Spark与S3交互

为了从 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访问S3

运行以下命令,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()

image-20240303204803506


参考:

https://qbiqing.medium.com/using-aws-temporary-credentials-with-hadoop-s3-connector-256911a65ac7

https://qbeast.io/read-from-public-s3-bucket-with-spark/