使用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
非常感谢你的帮助。
答案 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路径就足够了。