1

我想从 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) at com.cloudera.com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:1070) at org.apache.hadoop.fs.s3a.S3AFileSystem.verifyBucketExists(S3AFileSystem.java: 312) 在 org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2815) 在 org.apache.hadoop.fs 的 org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:260) .FileSystem.access$200(FileSystem.java:98) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2852) at 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。在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 上运行(DistCp.java:131) 在 org.apache.hadoop.tools.DistCp.main(DistCp.java:441) 18/11/ 09 00:55:40 错误 tools.DistCp:无效参数:org.apache.hadoop.fs.s3a.AWSS3IOException:segmentor-data-import-dev 上的 dosBucketExist:com.cloudera.com.amazonaws.services.s3.model。 AmazonS3Exception:错误请求(服务:Amazon S3;状态代码:400;错误代码:400 错误请求;请求 ID:121931CAB75C3BB0),S3 扩展请求 ID:jn/iTngZS83+A5U8e2gjQsyArDC68E+r0q/Sll0gkSCn0h5yDaG17TEb9HNSx7o590hmofguJIg=:错误请求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) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2852) at 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/Sll0gkSCn0h5yDaG17TEb9HNSx7o590hmofguzonamaJIg= 在 com.cloudera.com。 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) at org.apache.hadoop.fs.s3a.S3AFileSystem.verifyBucketExists(S3AFileSystem.java:312) ... 还有 11 个无效参数:segmentor-data-import 上的 dosBucketExist -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 OPTIONS [source_path ...] OPTIONS -append 重用目标文件中的现有数据,并在可能的情况下将新数据附加到它们 -async distcp 执行是否应该阻塞 -atomic 提交所有更改或不提交 -bandwidth 指定每个映射的带宽 (MB) -delete
从目标中删除,源中缺少文件 -diff
使用快照差异报告来识别源和目标之间的差异 -f 需要复制的文件列表 -filelimit(已弃用!)限制复制到 <= n 的文件数 -filters 包含字符串列表的文件的路径要从副本中排除的路径。-i 在复制期间忽略失败 -log DFS 上保存 distcp 执行日志的文件夹 -m 用于复制的最大并发映射数 -mapredSslConf 用于 ssl 配置文件的配置,与 hftps 一起使用://。必须在类路径中。-numListstatusThreads 用于构建文件列表的线程数(最多 40 个)。-overwrite 选择无条件覆盖目标文件,即使它们存在。-p 保留状态 (rbugpcaxt)(复制、块大小、用户、组、权限、校验和类型、ACL、XATTR、时间戳)。如果 -p 指定为 no ,则保留复制、块大小、用户、组、权限、校验和类型和时间戳。生的。* 当源路径和目标路径都在 /.reserved/raw 层次结构中(仅限 HDFS)时,会保留 xattrs。raw.* xattrpreservation 独立于 -p 标志。有关详细信息,请参阅 DistCp 文档。-rdiff 使用目标快照差异报告来识别对目标所做的更改 -sizelimit(已弃用!)限制复制到 <= n 字节的文件数 -skipcrccheck 是否跳过源路径和目标路径之间的 CRC 检查。-strategy 要使用的复制策略。

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

4

1 回答 1

1

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

您是否尝试过:

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

这已经解决了我的问题。

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

我希望它有所帮助。

于 2018-12-11T20:39:09.123 回答