Windows下Sqoop中關於分隔符的問題

背景

Sqoop是用來連接數據庫和HDFS或hive的工具,由於表在數據庫(以Mysql爲例)和hive中的默認分隔符不同,因此如果不指定分隔符的話可能會導致很多問題,比如把Mysql中的數據導入到hive中,結果hive表裏全是null,或者在把hdfs中數據文件導出到mysql中,發生異常導致export failed等。

按理說,使用sqoop的參數fields_terminated_by就可以解決這個問題,實則不然。

問題

在使用field_terminated_by參數時,如果直接把分隔符以字符串的形式傳入,比如這樣

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test -username root -password root  --table sales --hive-table sales_test --fields-terminated-by ','

會報錯,報錯內容如下

Missing argument for option: fields-terminated-by

解決方法

我們要把,轉換成八進制的unicode編碼,然後去掉裏面的u。

比如使用站長工具把,轉換成unicode編碼,得到的是\u002c,再用計算器把002c轉換成八進制,得到0054,然後我們以\0054作爲分隔符就沒問題了。新的命令如下所示

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test -username root -password root  --table sales --hive-table sales_test --fields-terminated-by '\0054'

結語

《Hadoop權威指南》裏面的代碼或命令不一定直接能用,很多甚至是大坑,還是得根據實際情況進行修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章