Как устранить ошибку S3: org.jets3t.service.S3ServiceException: сбой S3 GET? Java - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь получить и прочитать файл паркета на S3 с помощью Apache Parquet Reader, и мой код выглядит примерно так:

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>

Кто-нибудь знает, как решить эту проблему?

1 Ответ

2 голосов
/ 13 апреля 2020

Из сообщения об ошибке похоже, что ваш регион S3 использует протокол подписи Signature Version 4 (v4) и не поддерживает более старую версию (v2).

Предоставленный вами механизм авторизации не поддерживается. Пожалуйста, используйте AWS4-HMA C -SHA256 .

. В этом случае вы должны установить свойство fs.s3a.endpoint либо в core-site.xml, либо в конфигурации задания. Значение этого свойства можно найти здесь в Конечные точки Amazon S3 .

Кроме того,

  1. Использование имел oop * s3a клиент вместо s3.

  2. Вместо того, чтобы встраивать access_key и secret_access_key в URL-адрес s3a, используйте эти свойства fs.s3a.access.key и fs.s3a.secret.key. Полный список свойств, которые можно использовать для аутентификации S3, можно найти здесь .

...