PySpark 在 S3 读取时挂起
PySpark hangs on S3 read
我想使用 PySpark(本地安装,而非 EMR)从 S3 读取文件。问题是它在读取时冻结,没有任何超时或错误。
版本:
- PySpark 3.2.2
- Hadoop 3.3.1
- Hadoop-AWS 3.3.1.jar
- AWS Java SDK 包 1.12.136 .jar(也试过 1.11.901)
JAR 文件直接放在 SPARK_HOME/jars
目录中,所以我不需要在这里单独指定它们(这种方法适用于我的其他具有其他 JAR 依赖项的 Spark 作业)。
我的 PySpark 代码:
from pyspark.sql import SparkSession
# filled in code
aws_access_key_id = ""
aws_secret_access_key = ""
spark = (
SparkSession
.builder
.appName("Test S3 app")
.config("spark.hadoop.fs.s3a.access.key", aws_access_key_id)
.config("spark.hadoop.fs.s3a.secret.key", aws_secret_access_key)
.config("spark.hadoop.fs.s3a.endpoint", "eu-central-1.amazonaws.com")
.getOrCreate()
)
# here the execution hangs
df = spark.read.parquet("s3a://bucket/file.parquet")
df.show()
我能用它做什么?我已经看到 ,但那里没有解决方案。
使用与 boto3 相同的凭据和 S3 路径可以在不到一秒的时间内下载文件。
通过一些实验(当你等待时,查询超时并打印错误,但是在很长时间之后)我想出了解决方案 - 设置就足够了:
.config("spark.hadoop.fs.s3a.endpoint", "s3.eu-central-1.amazonaws.com")
请注意 s3.
必须使用 ,而不是 s3a.
,在我看到的某些地方建议使用。修改后,一切正常。
我想使用 PySpark(本地安装,而非 EMR)从 S3 读取文件。问题是它在读取时冻结,没有任何超时或错误。
版本:
- PySpark 3.2.2
- Hadoop 3.3.1
- Hadoop-AWS 3.3.1.jar
- AWS Java SDK 包 1.12.136 .jar(也试过 1.11.901)
JAR 文件直接放在 SPARK_HOME/jars
目录中,所以我不需要在这里单独指定它们(这种方法适用于我的其他具有其他 JAR 依赖项的 Spark 作业)。
我的 PySpark 代码:
from pyspark.sql import SparkSession
# filled in code
aws_access_key_id = ""
aws_secret_access_key = ""
spark = (
SparkSession
.builder
.appName("Test S3 app")
.config("spark.hadoop.fs.s3a.access.key", aws_access_key_id)
.config("spark.hadoop.fs.s3a.secret.key", aws_secret_access_key)
.config("spark.hadoop.fs.s3a.endpoint", "eu-central-1.amazonaws.com")
.getOrCreate()
)
# here the execution hangs
df = spark.read.parquet("s3a://bucket/file.parquet")
df.show()
我能用它做什么?我已经看到
使用与 boto3 相同的凭据和 S3 路径可以在不到一秒的时间内下载文件。
通过一些实验(当你等待时,查询超时并打印错误,但是在很长时间之后)我想出了解决方案 - 设置就足够了:
.config("spark.hadoop.fs.s3a.endpoint", "s3.eu-central-1.amazonaws.com")
请注意 s3.
必须使用 ,而不是 s3a.
,在我看到的某些地方建议使用。修改后,一切正常。