How to address S3 error: org.jets3t.service.S3ServiceException: S3 GET failed? Java
How to address S3 error: org.jets3t.service.S3ServiceException: S3 GET failed? Java
我正在尝试使用 Apache Parquet Reader 在 S3 上获取和读取 parquet 文件,我的代码如下所示:
ParquetReader<GenericData.Record> reader = null;
Path internalPath = new Path("s3://S3AccessID:S3SecretKey@bucketName/tmp0.parquet");
try {
InputFile inputFile = HadoopInputFile.fromPath(internalPath, new Configuration());
reader = AvroParquetReader.<GenericData.Record>builder(inputFile).build();
GenericData.Record record;
while ((record = reader.read()) != null) {
System.out.println(record);
}
}
但是,当我构建并 运行 一个程序时,这是错误屏幕:
at org.apache.hadoop.fs.s3.Jets3tFileSystemStore.get(Jets3tFileSystemStore.java:156)
at org.apache.hadoop.fs.s3.Jets3tFileSystemStore.retrieveINode(Jets3tFileSystemStore.java:195)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
at com.sun.proxy.$Proxy12.retrieveINode(Unknown Source)
at org.apache.hadoop.fs.s3.S3FileSystem.getFileStatus(S3FileSystem.java:332)
at org.apache.parquet.hadoop.util.HadoopInputFile.fromPath(HadoopInputFile.java:39)
at read.read.readParquetFile(read.java:153)
at read.read.main(read.java:80)
Caused by: org.jets3t.service.S3ServiceException: S3 GET failed for '/%2Ftmp0.parquet' XML Error Message: <?xml version="1.0" encoding="UTF-8"?><Error><Code>InvalidRequest</Code><Message>The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message><RequestId>1A66095653EBAD50</RequestId><HostId>jNzbaMmKmszHiLvzA4NsqILRxF+qJFxJLTWvKVwqHoggB0MnYy1ESoajHaa/Ufs5RE8ghs31Jaw=</HostId>
Does anyone have any idea how to address this?
从错误消息来看,您的 S3 存储桶区域似乎使用签名版本 4 (v4) 签名协议并且不支持旧版本 (v2)。
The authorization mechanism you have provided is not supported. Please
use AWS4-HMAC-SHA256.
在这种情况下,您必须在 core-site.xml
或作业配置中设置 属性 fs.s3a.endpoint
。此 属性 的值可在此处 Amazon S3 Endpoints.
下找到
此外,
使用 hadoop 的 s3a
客户端代替 s3
。
与其在 s3a URL 中嵌入 access_key 和 secret_access_key,不如使用这些属性 fs.s3a.access.key
和 fs.s3a.secret.key
。可以在 here.
中找到可用于 S3 身份验证的完整属性列表
我正在尝试使用 Apache Parquet Reader 在 S3 上获取和读取 parquet 文件,我的代码如下所示:
ParquetReader<GenericData.Record> reader = null;
Path internalPath = new Path("s3://S3AccessID:S3SecretKey@bucketName/tmp0.parquet");
try {
InputFile inputFile = HadoopInputFile.fromPath(internalPath, new Configuration());
reader = AvroParquetReader.<GenericData.Record>builder(inputFile).build();
GenericData.Record record;
while ((record = reader.read()) != null) {
System.out.println(record);
}
}
但是,当我构建并 运行 一个程序时,这是错误屏幕:
at org.apache.hadoop.fs.s3.Jets3tFileSystemStore.get(Jets3tFileSystemStore.java:156)
at org.apache.hadoop.fs.s3.Jets3tFileSystemStore.retrieveINode(Jets3tFileSystemStore.java:195)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
at com.sun.proxy.$Proxy12.retrieveINode(Unknown Source)
at org.apache.hadoop.fs.s3.S3FileSystem.getFileStatus(S3FileSystem.java:332)
at org.apache.parquet.hadoop.util.HadoopInputFile.fromPath(HadoopInputFile.java:39)
at read.read.readParquetFile(read.java:153)
at read.read.main(read.java:80)
Caused by: org.jets3t.service.S3ServiceException: S3 GET failed for '/%2Ftmp0.parquet' XML Error Message: <?xml version="1.0" encoding="UTF-8"?><Error><Code>InvalidRequest</Code><Message>The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message><RequestId>1A66095653EBAD50</RequestId><HostId>jNzbaMmKmszHiLvzA4NsqILRxF+qJFxJLTWvKVwqHoggB0MnYy1ESoajHaa/Ufs5RE8ghs31Jaw=</HostId>
Does anyone have any idea how to address this?
从错误消息来看,您的 S3 存储桶区域似乎使用签名版本 4 (v4) 签名协议并且不支持旧版本 (v2)。
The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
在这种情况下,您必须在 core-site.xml
或作业配置中设置 属性 fs.s3a.endpoint
。此 属性 的值可在此处 Amazon S3 Endpoints.
此外,
使用 hadoop 的
s3a
客户端代替s3
。与其在 s3a URL 中嵌入 access_key 和 secret_access_key,不如使用这些属性
fs.s3a.access.key
和fs.s3a.secret.key
。可以在 here. 中找到可用于 S3 身份验证的完整属性列表