3

我正在使用 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. 
4

1 回答 1

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

当启动数据节点守护程序有延迟时,我在尝试部署单节点集群时遇到了类似的问题

于 2012-06-15T23:57:28.947 回答