利用Sqoop將MySQL數據導入Hive中


初次寫文章,之前都是學習別人寫的東西,從今天開始學會記錄、學會分享。

這段時間開始了Hadoop的學習,今天主要學習利用Sqoop從MySQL數據源向Hive中導入數據。

1.執行導入的操作命令:在Sqoop的安裝目錄下輸入命令 bin/sqoop import --connect jdbc:mysql://數據庫主機ip:3306/數據庫名 --username root --P --table tablename --hive-import -m 1;

2.對命令及出現的問題說明:

(1)執行導入時,實際上在內部執行了三個步驟:

    • 第一步將數據導入hdfs,
    • 第二步創建hive表名相同的表,
    • 第三步將hdfs上數據傳入hive表中

(2)最開始執行導入后,可在Hadoop下使用fs命令在HDFS中看見導入的數據,在Hive中使用“show tables;”沒法看見對應的表,原因是之前執行導入的命令中,沒有加入 “--hive-import”參數;

(3)Hive exited with status 1的問題:

報異常:hive.HiveImport: Exception in thread "main" java.lang.NoSuchMethodError:  org.apache.thrift.EncodingUtils.setBit(BIZ)B。

解決辦法:這是因為在同路徑下安裝了hive和hbase,而hbase和hive的lib目錄下的thrift版本不同。hbase下的為libthrift-0.8.0.jar,hive下的為libthrift-0.9.0.jar。將Hbase下的0.8.0版的刪除,換為0.9.0的即可。ps:不知為什么Sqoop向Hive中導入數據還有Hbase的事;

(4)Hive exited with status 64的問題:

報異常:“FAILED: SemanticException Line 2:17 Invalid path ''hdfs://10.144.101.126:9000/user/root/machineinfo'': source contains directory: hdfs://10.144.101.126:9000/user/root/***/_logs-00000

13/07/25 10:34:07 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 64

”。根據提示,存在一個log文件。

解決辦法:經分析,原來在之前的導入中,雖然沒有正確的將數據導入到Hive中,但在HDFS中形成了相應的中間文件,可先將之前HDFS中的相應的目錄刪除(bin/hadoop fs -rmr /user/root/***),這個目錄往往就是要導入的MySQL中的表名命名的目錄。然后再使用Sqoop執行導入,會正確的在Hive中創建對應的表,且創建成功后,HDFS中創建的目錄會被自動刪除。看來這個目錄只是中間形成的臨時目錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM