【问题标题】:PySpark hangs on S3 readPySpark 在 S3 读取时挂起
【发布时间】:2022-01-12 02:16:47
【问题描述】:

我想使用 PySpark 从 S3 读取文件(本地安装,而不是 EMR)。问题是它在读取时冻结,没有任何超时或错误。

版本:

  • 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()

我能用这个做什么?我见过this question,但那里没有解决方案。

使用与 boto3 相同的凭据和 S3 路径可以在不到一秒的时间内完成并下载文件。

【问题讨论】:

    标签: amazon-web-services apache-spark amazon-s3 hadoop pyspark


    【解决方案1】:

    通过一些实验(当您等待时,查询超时并打印错误,但经过很长时间)我想出了解决方案 - 设置就足够了:

    .config("spark.hadoop.fs.s3a.endpoint", "s3.eu-central-1.amazonaws.com")
    

    注意s3.必须使用,而不是s3a.,在我见过的一些地方建议使用。通过此修改,一切正常。

    【讨论】:

    • 堆栈跟踪是什么?它不应该阻塞那么久......如果它确实有太多的重试正在进行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2016-12-16
    相关资源
    最近更新 更多