2013-02-04 173 views
3

我試圖使用sqoop將MySQL中的1 TB表導入HDFS。所使用的命令是:由於任務超時導致Sqoop導入作業失敗

sqoop import --connect jdbc:mysql://xx.xx.xxx.xx/MyDB --username myuser --password mypass --table mytable --split-by rowkey -m 14

執行邊界丘壑查詢後,所有的映射器啓動,但一段時間後,這些任務被殺掉因爲超時(1200秒)。我認爲這是因爲執行在每個映射器中運行的select查詢花費的時間超過了爲超時設置的時間(在sqoop中它似乎是1200秒)。因此它沒有報告狀態,任務隨後被殺死。 (我也嘗試過使用100 GB數據集;由於多個映射器超時,它仍然失敗。)對於單個映射器導入,它工作正常,因爲不需要過濾結果集。在sqoop中使用多個映射器時,是否有任何方法可以覆蓋映射任務超時(將其設置爲0或非常高的值)?

回答

0

Sqoop使用特殊線程發送狀態,以便地圖任務不會被jobtracker殺死。我會有興趣進一步探索你的問題。你介意共享sqoop日誌,地圖任務日誌和表格模式之一嗎?

Jarcec

+4

這解決了這個問題,我(暫時):sqoop進口-D mapred.task.timeout = 0 --connect的jdbc:mysql的://xx.xx.xxx.xx/MyDB --username myuser --password mypass --table mytable --split-by rowkey -m 14只需將timeout參數添加爲「-D」參數即可。謝謝你的回覆,sqoop應該有一些線程機制來發送你所說的狀態,我想知道爲什麼會發生這種情況。或者,也許是因爲我的表沒有任何索引,查詢需要的時間比預期長。 –

相關問題