本文介紹了如何為org.apache.parquet.avro.AvroParquetReader配置S3訪問?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我在這個問題上掙扎了一段時間,想分享我的解決方案。AvroParquetReader是一個很好的閱讀Parquet的工具,但它對S3訪問的默認設置很弱:
java.io.InterruptedIOException: doesBucketExist on MY_BUCKET: com.amazonaws.AmazonClientException: No AWS Credentials provided by BasicAWSCredentialsProvider EnvironmentVariableCredentialsProvider SharedInstanceProfileCredentialsProvider : com.amazonaws.AmazonClientException: Unable to load credentials from service endpoint
我想使用類似于com.amazonaws.auth.profile.ProfileCredentialsProvider,使用的憑據提供程序,它用于訪問我的S3存儲桶,但從AvroParquetReader的類定義或文檔中不清楚我將如何實現這一點。
推薦答案
此代碼適用于我。它允許AvroParquetReader使用ProfileCredentialsProvider訪問S3。
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import org.apache.parquet.avro.AvroParquetReader;
import org.apache.parquet.hadoop.ParquetReader;
import org.apache.hadoop.fs.Path;
import org.apache.avro.generic.GenericRecord;
import org.apache.hadoop.conf.Configuration;
...
final String path = "s3a://"+bucketName+"/"+pathName;
final Configuration configuration = new Configuration();
configuration.setClass("fs.s3a.aws.credentials.provider", ProfileCredentialsProvider.class,
AWSCredentialsProvider.class);
ParquetReader<GenericRecord> parquetReader =
AvroParquetReader.<GenericRecord>builder(new Path(path)).withConf(configuration).build();
這篇關于如何為org.apache.parquet.avro.AvroParquetReader配置S3訪問?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,