使用distp和s3a方案将文件从HDFS复制到Amazon S3

时间:2016-05-05 15:45:28

标签: hadoop amazon-s3

使用Apache Hadoop 2.7.2版并尝试使用以下命令将文件从HDFS复制到Amazon S3。

hadoop distcp  hdfs://<<namenode_host>>:9000/user/ubuntu/input/flightdata  s3a://<<bucketid>>

使用上述命令获取以下异常。

java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: s3a://<<bucketid>>.distcp.tmp.attempt_1462460298670_0004_m_000001_0

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

应该可以从HDFS转到S3 - 我在使用如下语法之前完成了它,从HDFS集群运行它:

distcp -Dfs.s3a.access.key = ... -Dfs.s3a.secret.key = ... / user / vagrant / bigdata s3a:// mytestbucket / bigdata

你运行这样的命令,它是否有效:

hadoop distcp hdfs:// namenode_host:9000 / user / ubuntu / input / flightdata s3a:// bucketid / flightdata

从例外情况来看,它似乎期待一个&#39;文件夹&#39;将数据放入,而不是存储桶的根。

答案 1 :(得分:0)

您需要提供AWS凭证才能成功将文件传输到/从HDFS和S3。

您可以传递access_key_id和secret参数,如上面的@stephen所示,但是您应该使用credential provider api进行生产使用,您可以在其中管理凭据而无需在单个命令中传递它们。

参考:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CredentialProviderAPI.html

第二,您不需要指定“ hdfs”协议。绝对的hdfs路径就足够了。