2012-05-30 54 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

我正面临着类似的问题,而试图部署单节点集群时,有在启动数据延迟节点守护进程