为了从 Spark 与S3 交互,我们需要使用第三方库,有3个选项:
用法 | 描述 | |
---|---|---|
s3 | s3:\\ |
也称为classic,该文件系统已被弃用,建议使用第二代或第三代库。 |
s3n | s3n:\\ |
s3n 使用本机 s3 对象,并且可以轻松地将其与 Hadoop 和其他文件系统一起使用。这也不是推荐的选项。 |
s3a | s3a:\\ |
s3a – 这是s3n 的替代品 ,它支持更大的文件并提高了性能。 |
本节我们使用s3a与S3交互。
在EC2上绑定一个能访问S3的role;或者将AK/SK配置在环境变量;或者将AK/SK配置在~/.aws/credentials
。
运行以下命令,spark-shell会使用DefaultAWSCredentialsProviderChain
方式获取S3的访问密钥
./spark-shell --conf spark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.DefaultAWSCredentialsProviderChain \
--packages com.amazonaws:aws-java-sdk:1.12.20,\
org.apache.hadoop:hadoop-common:3.2.0,\
org.apache.hadoop:hadoop-client:3.2.0,\
org.apache.hadoop:hadoop-aws:3.2.0
运行以下命令:
var s3file=spark.read.format("csv").load("s3a://airflow-kpf/1.csv")
s3file.count
s3file.show()
参考:
https://qbiqing.medium.com/using-aws-temporary-credentials-with-hadoop-s3-connector-256911a65ac7