Amazon EMR:使用数据初始化集群

时间:2012-05-30 20:49:04

标签: hadoop amazon-s3 hdfs emr

我正在使用Amazon EMR,我可以使用CLI工具创建和运行作业流程。乔布斯运行良好。但是,当我尝试从S3和名称节点的本地文件系统将数据加载到我的EMR集群的HDFS中时,我遇到了一个问题。

我想从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.replication = 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. 

1 个答案:

答案 0 :(得分: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。这可能是造成的   由于各种各样的原因。检查DataNode日志,NameNode   日志,网络连接,...请参阅页面:   CouldOnlyBeReplicatedTo

在启动数据节点守护程序时出现延迟时尝试部署单节点群集时遇到类似问题