amazon-web-services - hadoop 将结果从 hdfs 复制到 S3
问题描述
我已经成功完成了我在 Amazon EMR 上的工作,现在我想将结果复制HDFS
到S3
,但我遇到了一些问题
这是代码(--steps)
{
"Name":"AAAAA",
"Type":"CUSTOM_JAR",
"Jar":"command-runner.jar",
"ActionOnFailure":"CONTINUE",
"Args": [
"s3-dist-cp",
"--src", "hdfs:///seqaddid_output",
"--dest", "s3://wuda-notebook/seqaddid"
]
}
这是日志:
2019-04-12 03:01:23,571 INFO com.amazon.elasticmapreduce.s3distcp.S3DistCp(主要):使用 args 运行:-libjars /usr/share/aws/emr/s3-dist-cp/lib/commons-httpclient -3.1.jar,/usr/share/aws/emr/s3-dist-cp/lib/commons-logging-1.0.4.jar,/usr/share/aws/emr/s3-dist-cp/lib/guava -18.0.jar,/usr/share/aws/emr/s3-dist-cp/lib/s3-dist-cp-2.10.0.jar,/usr/share/aws/emr/s3-dist-cp/lib /s3-dist-cp.jar --src hdfs:///seqaddid_output/ --dest s3://wuda-notebook/seqaddid 2019-04-12 03:01:24,196 INFO com.amazon.elasticmapreduce.s3distcp.S3DistCp (主要):S3DistCp 参数:--src hdfs:///seqaddid_output/--dest s3://wuda-notebook/seqaddid 2019-04-12 03:01:24,203 INFO com.amazon.elasticmapreduce.s3distcp.S3DistCp ( main):使用输出路径'hdfs:/tmp/4f93d497-fade-4c78-86b9-59fc3da35b4e/output' 2019-04-12 03:01:24,263 INFO com.amazon.elasticmapreduce.s3distcp。S3DistCp(主):GEThttp://169.254.169.254/latest/meta-data/placement/availability-zone结果:us-east-1f 2019-04-12 03:01:24,664 FATAL com.amazon.elasticmapreduce.s3distcp.S3DistCp(主):无法获取源文件系统 java.io.FileNotFoundException:文件不存在:hdfs: /seqaddid_output at org.apache.hadoop.hdfs.DistributedFileSystem$27.doCall(DistributedFileSystem.java:1444) at org.apache.hadoop.hdfs.DistributedFileSystem$27.doCall(DistributedFileSystem.java:1437) at org.apache.hadoop.fs .FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1452) at com.amazon.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:795) at com.amazon.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:705) 在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76) 在 org.apache.hadoop.util。ToolRunner.run(ToolRunner.java:90) 在 com.amazon.elasticmapreduce.s3distcp.Main.main(Main.java:22) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.hadoop.util.RunJar.run (RunJar.java:234) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:148)在 org.apache.hadoop.util.RunJar.run(RunJar.java:234) 在 org.apache.hadoop 的 java.lang.reflect.Method.invoke(Method.java:498) 调用(DelegatingMethodAccessorImpl.java:43) .util.RunJar.main(RunJar.java:148)在 org.apache.hadoop.util.RunJar.run(RunJar.java:234) 在 org.apache.hadoop 的 java.lang.reflect.Method.invoke(Method.java:498) 调用(DelegatingMethodAccessorImpl.java:43) .util.RunJar.main(RunJar.java:148)
解决方案
当 CopyFilesReducer 使用多个 CopyFilesRunable 实例从 S3 下载文件时,该错误似乎是由竞争条件引起的。问题是它在多个线程中使用相同的临时目录,并且线程在完成后会删除临时目录。因此,当一个线程在另一个线程之前完成时,它会删除另一个线程仍在使用的临时目录。
我已将问题报告给 AWS,但与此同时,您可以通过在作业配置中将变量s3DistCp.copyfiles.mapper.numWorkers设置为 1 来强制减速器使用单个线程来解决该错误。
推荐阅读
- html - 引导轮播控件不反映样式
- azure-ad-b2c - Azure B2C 将不同权限链接到用户
- python - Python reduce 删除列表的第一个元素
- javascript - Javascript 中的 Cookie 过期时间
- php - 脚本 html php
- android - 了解 Android 应用程序的 .trace 文件
- java - 使用带引号的类型验证字符串,如 Java 中的“String”、“Boolean”
- file - iCloud Drive 内用户选择的文件夹中的垃圾文件
- javascript - 如何选择和复制已使用 Javascript 过滤的表中的特定列
- scala - 如何创建递归生成项目的 Akka 流源