我正在使用Sqoop 1.4.6將數據從MySQL導入到Hive,使用import-all-tables選項。結果是好的,但導入過程本身很慢。例如,其中一個數據庫包含40-50張表,遠遠低於100萬行,並且需要大約25-30分鐘才能完成。經過調查,似乎大部分時間都花在初始化每個導入表的Hive上。在同一個數據庫上測試一個普通的mysqldump在下在1分鐘內完成。所以問題是如何減少初始化時間,如果是這種情況,例如使用單個Hive會話?使用import-all-tables優化Sqoop數據從MySQL導入到Hive
進口的命令是:
sqoop import-all-tables -Dorg.apache.sqoop.splitter.allow_text_splitter=true --compress --compression-codec=snappy --num-mappers 1 --connect "jdbc:mysql://..." --username ... --password ... --null-string '\\N' --null-non-string '\\N' --hive-drop-import-delims --hive-import --hive-overwrite --hive-database ... --as-textfile --exclude-tables ... --warehouse-dir=...
更新:
Sqoop版本:1.4.6.2.5.3.0-37
蜂巢版本:1.2.1000.2.5.3.0 -37
可能涉及到:
https://issues.apache.org/jira/browse/HIVE-10319
它l使用ooks like I can not use'--direct' with'--hive-drop-import-delims',但會嘗試你的其他建議,然後找回... –
幾乎相同的結果;每個數據庫大約25分鐘。我也試着用總行數不同的數據庫,但數據量大致相同,所花費的總時間相當接近。似乎每個表有一些不變的時間,這與其中的數據量無關。 –
您可以嘗試將mapper內存從當前值增加到更高的數字嗎?:'sqoop import-all-tables -D mapreduce.map.memory.mb = 2048 -D mapreduce.map.java.opts = -Xmx1024m' –