【问题标题】:Spark job (shuffle) taking too long to finish the job [duplicate]Spark作业(洗牌)完成作业的时间太长[重复]
【发布时间】:2022-01-18 19:41:44
【问题描述】:

我正在 EMR 上运行 Spark 作业,并尝试将一个大型压缩 CSV 文件 (15GB) 转换为 parquet,但写入 S3 花费的时间太长。

我将 R5 实例用于主实例(1 个实例)和核心实例(3 个实例)。这是我的代码:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, to_date

def main():
    spark = SparkSession \
        .builder \
        .appName("csv-to-parquer-convertor") \
        .config("spark.sql.catalogimplementation", "hive") \
        .config("hive.metastore.connect.retries", 3) \
        .config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
        .enableHiveSupport().getOrCreate()   

    tgt_filename = 'SOME_Prefix'
    src_path = 'SOURCE_S3_PATH'
    tgt_path = 'TARGET_ BUCKET' + tgt_filename 

    df = spark.read.csv(src_path, header=True)
    partitioned_df = df.repartition(50)
    partitioned_df.write.mode('append').parquet(path=tgt_path)
    spark.stop()

if __name__ == "__main__":
    main()

【问题讨论】:

  • 它会像您遇到错误一样变慢吗?还是像 S3 那样慢真的很慢,我不喜欢性能并想要更好的方法? (提示不要使用 S3,它很慢)
  • 它很慢,我想要一个更好的方法。
  • 基于意见和什么是缓慢的。
  • 写入 S3 时

标签: python amazon-web-services apache-spark pyspark apache-spark-sql


【解决方案1】:

如果您想要更好的性能,请停止使用 S3。我是认真的。您根本没有做足够的工作来真正优化您的代码。这是一个简单的问题。如果您更改耗时最长的内容,您将获得更好的性能。 (您的读/写速度。)这肯定是您问题的瓶颈。要解决此问题,您需要考虑使用性能比 S3 更好的东西。 HDFS 集群性能更好,并且开箱即用,因此可能是一个很好的首选。当然,它们也是其他选择,但这取决于您喜欢什么。

【讨论】:

  • 感谢您的回复。写的时间最长,你是对的,是 S3 减慢了进程。
  • 如果您觉得我的回答有帮助,请点赞。如果您认为这是答案并且您觉得舒服,请将其标记为正确。
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
相关资源
最近更新 更多