[英]Spark job (shuffle) taking too long to finish the job
我正在 EMR 上运行 Spark 作业并尝试将大型压缩 CSV 文件 (15GB) 转换为镶木地板,但写入 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 更好的东西。 HDFS 集群性能更好,并且可以与开箱即用的 spark 一起使用,因此可能是一个不错的首选替代方案。 当然,它们也是其他选择,但这取决于您对什么感到满意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.