hadoop从hdfs复制到S3

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

我已成功完成 Amazon EMR 上的 mahout 矢量化作业(使用 Mahout on Elastic MapReduce 作为引用)。现在我想将结果从 HDFS 复制到 S3(以在将来的集群中使用它)。

For that I've used hadoop distcp:

den@aws:~$ elastic-mapreduce --jar s3://elasticmapreduce/samples/distcp/distcp.jar \
> --arg hdfs://my.bucket/prj1/seqfiles \
> --arg s3n://ACCESS_KEY:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c89b8d8b9a8d9c97838d9188a5b1e6aabdaba3adbc" rel="noreferrer noopener nofollow">[email protected]</a>/prj1/seqfiles \
> -j $JOBID

失败。发现该建议:Use s3distcp也尝试过:

elastic-mapreduce --jobflow $JOBID \
> --jar --arg s3://eu-west-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \
> --arg --s3Endpoint --arg 's3-eu-west-1.amazonaws.com' \
> --arg --src --arg 'hdfs://my.bucket/prj1/seqfiles' \
> --arg --dest --arg 's3://my.bucket/prj1/seqfiles'

在这两种情况下,我都有相同的错误:java.net.UnknownHostException:未知主机:my.bucket
下面是第二种情况的完整错误输出。

2012-09-06 13:25:08,209 FATAL com.amazon.external.elasticmapreduce.s3distcp.S3DistCp (main): Failed to get source file system
java.net.UnknownHostException: unknown host: my.bucket
    at org.apache.hadoop.ipc.Client$Connection.<init>(Client.java:214)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1193)
    at org.apache.hadoop.ipc.Client.call(Client.java:1047)
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225)
    at $Proxy1.getProtocolVersion(Unknown Source)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:401)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384)
    at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:127)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:249)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:214)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1413)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:68)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1431)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:256)
    at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:431)
    at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:216)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
    at com.amazon.external.elasticmapreduce.s3distcp.Main.main(Main.java:12)
    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.util.RunJar.main(RunJar.java:187)

最佳答案

我发现了一个错误:

  1. 主要问题不是

    java.net.UnknownHostException:未知主机:my.bucket

但是:

2012-09-06 13:27:33,909 FATAL com.amazon.external.elasticmapreduce.s3distcp.S3DistCp (main): Failed to get source file system

所以。在源路径中再添加 1 个斜杠后,作业开始顺利进行。 正确的命令是:

elastic-mapreduce --jobflow $JOBID \
> --jar --arg s3://eu-west-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \
> --arg --s3Endpoint --arg 's3-eu-west-1.amazonaws.com' \
> --arg --src --arg 'hdfs:///my.bucket/prj1/seqfiles' \
> --arg --dest --arg 's3://my.bucket/prj1/seqfiles'

附注所以。这是工作。作业已正确完成。我已成功复制包含 30Gb 文件的目录。

关于hadoop从hdfs复制到S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12301613/

相关文章:

amazon-web-services - "Error while running apache2ctl graceful"让我们在 AWS Lightsail Bitnami 上加密

amazon-web-services - 在 Cloudformation 中管理 Lambda 处理程序凭证

hadoop - 在哪里可以找到有关 Mapreduce 中文件系统计数器的信息

java - 如何使用hdfs中存储的jceks文件连接到aws sqs队列和s3

javascript - 如何将 "Vary: Accept-Encoding" header 添加到 Amazon S3 上的文件中

amazon-web-services - 如何在 S3 中限制用户上传

dns - Amazon S3 上的静态托管 - DNS 配置

amazon-web-services - 永久删除版本化 S3 存储桶中所有删除标记的对象

hadoop - 从oozie工作流程执行配置单元查询时,找不到表异常(E0729)

java - 如何使用Java Hadoop MapReduce以降序对数据集中的列进行排序?