2012-05-30 100 views
3

我正在使用Amazon EMR,並且能夠使用CLI工具創建和運行作業流程。喬布斯運行良好。但是,當我嘗試從S3和名稱節點的本地文件系統中將數據加載到EMR羣集的HDFS時,我遇到了問題。Amazon EMR:使用數據初始化羣集

我想從S3填充HDFS。我正在嘗試使用S3DistCp工具來做到這一點。我正在運行此命令:

elastic-mapreduce --jobflow $JOBFLOWID --jar s3://us-east-1.elasticmapreduce/libs/s3distcp/1.0.1/s3distcp.jar --arg --src --arg 's3n://my-bucket/src' --arg --dest --arg 'hdfs:///my-emr-hdfs/dest/' 

我在日誌中收到兩個可能相關的錯誤。在MapReduce工作輸出作業完成100%,但在最後失敗:

INFO org.apache.hadoop.mapred.JobClient (main):  Map output records=184 
ERROR com.amazon.elasticmapreduce.s3distcp.S3DistCp (main): 21 files failed to copy 

在名稱節點守護程序日誌我得到這個異常:

INFO org.apache.hadoop.ipc.Server (IPC Server handler 13 on 9000): IPC Server handler 13 on 9000, call addBlock(/mnt/var/lib/hadoop/tmp/mapred/system/jobtracker.info, DFSClient_-1580223521, null) from xx.xx.xx.xx:xxxxx: error: java.io.IOException: File /mnt/var/lib/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 
java.io.IOException: File /mnt/var/lib/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1531) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:685) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563) 
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388) 
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:396) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382) 

我設置DFS。創建工作流時複製= 1。我的節點是c1.mediums,我試圖推入HDFS的數據低於3GB。所以它不應該是一個磁盤外的問題。但也許我錯過了一些東西。

兩個問題: 1)任何洞察爲什麼S3DistCp失敗? 2)第二個問題有點不相關。是否有可能創建一個作業流程,其中第一個作業是S3DistCp作業以使用數據初始化羣集?

任何洞察讚賞。謝謝。

更新:我在下面的評論測試似乎沒有工作。以下是日誌中的更多信息。

WARN org.apache.hadoop.hdfs.DFSClient (Thread-15): Error Recovery for block null bad datanode[0] nodes == null 
WARN org.apache.hadoop.hdfs.DFSClient (Thread-15): Could not get block locations. Source file "/mnt/tmp/mapred/system/jobtracker.info" - Aborting... 
WARN org.apache.hadoop.mapred.JobTracker (main): Writing to file hdfs://xx.xx.xx.xx:xxxx/mnt/tmp/mapred/system/jobtracker.info failed! 
WARN org.apache.hadoop.mapred.JobTracker (main): FileSystem is not ready yet! 
WARN org.apache.hadoop.mapred.JobTracker (main): Failed to initialize recovery manager. 
+0

EMR以不推薦使用的hadoop-site.xml文件啓動,它看起來像它可能正在使用它以及定義在其中的hadoop.tmp.dir配置,它指向/ tmp。/tmp要小得多。我將嘗試覆蓋該配置。它可能無法正常工作。 https://forums.aws.amazon.com/thread.jspa?threadID=32108 –

+1

EMR上的名稱節點守護進程日誌幾乎總是以日誌中的這些錯誤啓動。我認爲那些是紅鯡魚。只要在Hadoop調用的jar中有一個main方法,您就可以在EMR步驟中執行任何操作。但是直接使用s3n://(本地s3文件系統)進行地圖輸入有什麼問題? –

+0

感謝這個見解@JudgeMental。看起來我的所有數據文件都可以進入EMR HDFS。但是s3distcp作業每次都會進入失敗狀態,因此它看起來很糟糕。 –

回答

3

對於第一個查詢 「Jobtracker.info只能複製到0節點,而不是1」 希望這有助於:從上面的鏈接 http://wiki.apache.org/hadoop/FAQ#What_does_.22file_could_only_be_replicated_to_0_nodes.2C_instead_of_1.22_mean.3F 複製:

3.13。 「文件只能複製到0節點,而不是1」是什麼意思?

NameNode沒有任何可用的DataNode。這可能由於各種各樣的原因導致 。檢查數據管理部日誌,在NameNode的 日誌,網絡連接,...請參閱網頁: CouldOnlyBeReplicatedTo

我正面臨着類似的問題,而試圖部署單節點集羣時,有在啓動數據延遲節點守護進程