使用apachehadoopversion2.7.2并尝试使用下面的命令将文件从hdfs复制到amazons3。
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条答案
按热度按时间sc4hvdpw1#
您需要提供aws凭据才能成功地将文件传输到hdfs和s3或从中传输。
您可以传递access\u key\u id和secret参数,如上面@stephen所示,但是您应该使用凭证提供者api进行生产使用,这样您就可以管理凭证,而无需在单个命令中传递凭证。
裁判:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/credentialproviderapi.html
其次,不需要指定“hdfs”协议。一个绝对的hdfs路径就足够了。
z6psavjg2#
从hdfs到s3应该是可能的—在使用以下语法之前,我已经完成了,从hdfs集群运行它:
distcp-dfs.s3a.access.key=-dfs.s3a.secret.key=/user/vagrant/bigdata s3a://mytestbucket/bigdata
如果您像这样运行命令,它是否工作:
hadoop分布hdfs://namenode_host:9000/user/ubuntu/input/flightdata s3a://bucketid/flightdata
从异常情况来看,它似乎希望有一个“文件夹”将数据放入,而不是存储桶的根目录。