AWS文件上传

时间:2018-11-09 09:15:52

标签: amazon-web-services hadoop amazon-s3 distcp s3distcp

我想从hadoop上传一些文件到AWS桶中。我有     AWS ACCESS KEY,SECRET KEY和S3 IMPORT PATH。

我无法通过AWS CLI命令访问。 我将密钥设置在AWS凭证文件中。 我尝试做“ aws s3 ls” 我收到

错误
An error occurred (InvalidToken) when calling the ListBuckets operation: The provided token is malformed or otherwise invalid.

由于上述代码无效,因此我尝试使用distcp命令,如下所示。

hadoop distcp -Dmapreduce.job.queuename=root.mr.sbg.sla -Dfs.s3a.proxy.host=qypprdproxy02.ie.xxx.net  -Dfs.s3a.proxy.port=80  -Dfs.s3a.endpoint=s3.us-west-2.amazonaws.com -Dfs.s3a.aws.credentials.provider="org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" -Dfs.s3a.access.key="AXXXXXXXXXXQ" -Dfs.s3a.secret.key="4I9nXXXXXXXXXXXXHA" -Dfs.s3a.session.token="FQoDYXdzECkaDNBtHNfS5sKxXqNdMyKeAuqLbVXG72KvcPmUtnpLGbM7UE59zjvNNo0u8mWlslCEvZcZLxXw1agAInzGH8vnGleqxjzuBBgXMXXXXXXXG0zpHA8eyrwCZqUBXSg9cdqevv1sFT8lUIEi5uTGLjHXgkQoBXXXXXXXXXXXXXXt80Rp4vb3P7k5N2AVZmuVvM/SEH/qMLiFabDbVliGXqw7MHXTXXXXXXXXXXXXXXXtW8JvmOFPR3nGdQ4VKzw0deSbNmL/BCivfh9pf7ubm5RFRSLxqcdoT7XAXIWf1jJguEGygcBkFRh2Ztvr8OYcG78hLEJX61ssbKWXokOKTBMnUxx4b0jIG1isXerDaO6RRVJdBrTXn2Somzigo4ZbL0wU=" TXXXX/Data/LiXXXXL/HS/ABC/part-1517397360173-r-00000 s3a://data-import-dev/1012018.csv

对于上述命令,我也收到以下错误消息。

  

18/11/09 00:55:40信息http.AmazonHttpClient:配置代理。代理   主机:qypprdproxy02.ie.XXXX.net代理端口:80 18/11/09 00:55:40 WARN   s3a.S3AFileSystem:客户端:Amazon S3错误400:400错误的请求;坏   请求(可重试)

     

com.cloudera.com.amazonaws.services.s3.model.AmazonS3Exception:错误   请求(服务:Amazon S3;状态代码:400;错误代码:400错误   请求;请求ID:121931CAB75C3BB0),S3扩展请求ID:   jn / iTngZS83 + A5U8e2gjQsyArDC68E + r0q / Sll0gkSCn0h5yDaG17TEb9HNSx7o590hmofguJIg =     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182)     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)     在   com.cloudera.com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3785)     在   com.cloudera.com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1107)     在   com.cloudera.com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:1070)     在   org.apache.hadoop.fs.s3a.S3AFileSystem.verifyBucketExists(S3AFileSystem.java:312)     在   org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:260)     在   org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2815)     在org.apache.hadoop.fs.FileSystem.access $ 200(FileSystem.java:98)在   org.apache.hadoop.fs.FileSystem $ Cache.getInternal(FileSystem.java:2852)     在org.apache.hadoop.fs.FileSystem $ Cache.get(FileSystem.java:2834)     在org.apache.hadoop.fs.FileSystem.get(FileSystem.java:387)处   org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)在   org.apache.hadoop.tools.DistCp.setTargetPathExists(DistCp.java:205)     在org.apache.hadoop.tools.DistCp.run(DistCp.java:131)处   org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)在   org.apache.hadoop.tools.DistCp.main(DistCp.java:441)18/11/09 00:55:40   错误tools.DistCp:无效的参数:   org.apache.hadoop.fs.s3a.AWSS3IOException:didBucketExist存在于   segmentor-data-import-dev:   com.cloudera.com.amazonaws.services.s3.model.AmazonS3Exception:错误   请求(服务:Amazon S3;状态代码:400;错误代码:400错误   请求;请求ID:121931CAB75C3BB0),S3扩展请求ID:   jn / iTngZS83 + A5U8e2gjQsyArDC68E + r0q / Sll0gkSCn0h5yDaG17TEb9HNSx7o590hmofguJIg =:   错误的请求(服务:Amazon S3;状态代码:400;错误代码:400错误   请求;请求ID:121931CAB75C3BB0)   org.apache.hadoop.fs.s3a.S3AUtils.translateException(S3AUtils.java:178)     在   org.apache.hadoop.fs.s3a.S3AFileSystem.verifyBucketExists(S3AFileSystem.java:318)     在   org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:260)     在   org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2815)     在org.apache.hadoop.fs.FileSystem.access $ 200(FileSystem.java:98)在   org.apache.hadoop.fs.FileSystem $ Cache.getInternal(FileSystem.java:2852)     在org.apache.hadoop.fs.FileSystem $ Cache.get(FileSystem.java:2834)     在org.apache.hadoop.fs.FileSystem.get(FileSystem.java:387)处   org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)在   org.apache.hadoop.tools.DistCp.setTargetPathExists(DistCp.java:205)     在org.apache.hadoop.tools.DistCp.run(DistCp.java:131)处   org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)在   org.apache.hadoop.tools.DistCp.main(DistCp.java:441)由以下原因引起:   com.cloudera.com.amazonaws.services.s3.model.AmazonS3Exception:错误   请求(服务:Amazon S3;状态代码:400;错误代码:400错误   请求;请求ID:121931CAB75C3BB0),S3扩展请求ID:   jn / iTngZS83 + A5U8e2gjQsyArDC68E + r0q / Sll0gkSCn0h5yDaG17TEb9HNSx7o590hmofguJIg =     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182)     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)     在   com.cloudera.com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)     在   com.cloudera.com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3785)     在   com.cloudera.com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1107)     在   com.cloudera.com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:1070)     在   org.apache.hadoop.fs.s3a.S3AFileSystem.verifyBucketExists(S3AFileSystem.java:312)     ... 11更多无效的参数:didBucketExist于   segmentor-data-import-dev:   com.cloudera.com.amazonaws.services.s3.model.AmazonS3Exception:错误   请求(服务:Amazon S3;状态代码:400;错误代码:400错误   请求;请求ID:121931CAB75C3BB0),S3扩展请求ID:   jn / iTngZS83 + A5U8e2gjQsyArDC68E + r0q / Sll0gkSCn0h5yDaG17TEb9HNSx7o590hmofguJIg =:   错误的请求(服务:Amazon S3;状态代码:400;错误代码:400错误   请求;请求ID:121931CAB75C3BB0)用法:distcp选项   [source_path ...]                 选项-append重用目标文件中的现有数据,并                                  如果可能,向其添加新数据-async应该阻止distcp执行-atomic提交所有更改或不提交-bandwidth以MB为单位指定每个映射的带宽-delete
  从目标中删除,源-diff
中缺少的文件   使用快照差异报告来确定                                  源和目标之间的差异-f需要复制的文件列表-filelimit(不建议使用!)限制复制的文件数                                  到<= n -filters包含列表的文件的路径                                  从中排除的路径字符串                                  复制。 -i忽略复制期间的失败-log文件夹位于   distcp执行日志所在的DFS                                  保存-m用于的最大并发映射数                                  复制ssl配置文件的-mapredSslConf配置,以使用                                  与hftps://。必须在类路径中。 -numListstatusThreads要用于的线程数   建筑文件                                  列表(最多40个)。 -overwrite选择覆盖目标文件                                  即使它们存在也无条件。 -p保留状态(rbugpcaxt)(复制,                                  块大小,用户,组,权限,                                  校验和类型,ACL,XATTR,时间戳)。如果                                  -p指定为no,然后                                  保留复制,块大小,用户,                                  组,权限,校验和类型和                                  时间戳记。 raw。* xattrs在以下情况下保留                                  源路径和目标路径都是                                  在/.reserved/raw层次结构(HDFS                                  只要)。 raw。* xattrpreservation是                                  独立于-p标志。请参阅                                  有关更多详细信息,请参见DistCp文档。 -rdiff使用目标快照差异报告来识别                                  对目标-sizelimit进行的更改(不建议使用!)限制复制的文件数                                  到<= n个字节-skipcrccheck是否在源之间跳过CRC检查                                  和目标路径。 -strategy复制要使用的策略。默认为除法                                  基于文件大小的工作-tmp用于的中间工作路径                                  atomic commit -update更新目标,仅复制缺少的文件或                                  目录

请让我知道如何实现这一目标。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。手动而不是通过“ aws configure”命令修改〜.aws内部的文件时,可能会出现此问题。

您尝试过:

  1. 删除“ config”和“ credentials”文件(位于〜.aws)
  2. 运行“ aws configure”命令(重新创建您在#1中删除的文件)

那为我解决了这个问题。

这主要是因为我使用了其他工具来修改这些文件。

希望对您有帮助。