hadoop将结果从hdfs复制到S3

问题描述 投票:0回答:1

我已经成功完成了我在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(main):使用args运行:-libjars / usr / share / aws / emr / s3-dist-cp / lib / commons-httpclient -3.1.jar,在/ usr /共享/ AWS / EMR / S3-DIST-CP / LIB /共享记录-1.0.4.jar,在/ usr /共享/ AWS / EMR / S3-DIST-CP / LIB /番石榴-18.0.jar,在/ usr /共享/ AWS / EMR / S3-DIST-CP / LIB / S3-DIST-CP-2.10.0.jar,在/ usr /共享/ 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 args:--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'2011-04-12 03:01:24,263 INFO com.amazon.elasticmapreduce.s3distcp.S3DistCp(main):GET http://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(main):无法获取源文件ystem 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)org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)atg.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1452)at com.amazon.elasticmapreduce .s3distcp.S3DistCp.run(S3DistCp.java:795)位于org.apache.hadoop.util.ToolRunner.run的com.amazon.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:705)(ToolRunner.java:76 )atg.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)at com.amazon.elasticmapreduce.s3distcp.Main.main(Main.java:22)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) )at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja) va:43)位于org.apache.hadoop.util.RunJar的org.apache.hadoop.util.RunJar.run(RunJar.java:234)的java.lang.reflect.Method.invoke(Method.java:498) 。主要(RunJar.java:148)

amazon-web-services amazon-s3 amazon-emr
1个回答
0
投票

当CopyFilesReducer使用多个CopyFilesRunable实例从S3下载文件时,看起来该错误是由竞争条件引起的。问题是它在多个线程中使用相同的临时目录,并且线程在完成后删除临时目录。因此,当一个线程在另一个线程之前完成时,它会删除另一个线程仍在使用的临时目录。

我已经向AWS报告了这个问题,但同时你可以通过在你的作业配置中将变量s3DistCp.copyfiles.mapper.numWorkers设置为1来强制reducer使用单个线程来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.