【问题标题】:hadoop copying the result from hdfs to S3hadoop 将结果从 hdfs 复制到 S3
【发布时间】:2019-04-12 03:26:11
【问题描述】:

我已经成功完成了我在 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 信息 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(主要):使用输出路径“hdfs:/tmp/4f93d497-fade-4c78-86b9-59fc3da35b4e/output” 2019-04-12 03:01:24,263 信息 com.amazon.elasticmapreduce.s3distcp.S3DistCp(主要):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(主):无法获取源文件系统 java.io.FileNotFoundException:文件不存在:hdfs:/seqaddid_output 在 org.apache.hadoop.hdfs.DistributedFileSystem$27.doCall(DistributedFileSystem.java:1444) 在 org.apache.hadoop.hdfs.DistributedFileSystem$27.doCall(DistributedFileSystem.java:1437) 在 org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) 在 org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1452) 在 com.amazon.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:795) 在 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)

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-emr


    【解决方案1】:

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

    我已将问题报告给 AWS,但与此同时,您可以通过设置变量 s3DistCp.copyfiles.mapper.numWorkers 强制减速器使用单个线程来解决该错误在您的工作配置中设置为 1。

    【讨论】:

    • 谢谢,我找到了另一种方法将我的结果保存到s3,首先我将结果合并到master,然后使用“aws s3 cp ......”复制到s3,它像这样:
    • { "Name":"save the results", "Type":"CUSTOM_JAR", "Jar"​​:"s3://us-east-1.elasticmapreduce/libs/script-runner/ script-runner.jar", "ActionOnFailure":"CONTINUE", "Args": [ "s3://wuda-notebook/bash/save-results.sh", "--save-results", "s3:/ /wuda-notebook/results" ] }
    • 这是'save-results.sh' { hadoop fs -getmerge metric_output metric aws s3 cp metric s3://wuda-notebook/metric}
    【解决方案2】:

    好吧,我在复制时遇到了同样的问题,问题是因为我没有为主路径添加完整路径。

    我和你一样:

    s3-dist-cp --src hdfs:///my_path/ --dest s3://my_mucket --srcPattern .*\.parquet
    

    我得到了和你一样的错误。 解决方案是为hdfs路径添加完整路径:

    s3-dist-cp --src hdfs:///user/hadoop/my_path/ --dest s3://my_mucket --srcPattern .*\.parquet
    

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 2016-07-31
      • 1970-01-01
      • 2016-11-23
      • 2019-12-17
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多