增加Gzip压缩文本文件的Spark读取和镶木地板转换性能

时间:2017-08-26 22:26:44

标签: apache-spark-sql

用例: A>在AWS s3位置使用Text Gzipped文件 B个在文件顶部创建的Hive表,用于从表中访问文件中的数据 c取代;使用Spark Dataframe读取表并使用Snappy Compression转换为Parquet数据 d取代;表中的字段数为25,其中包括2个分区列。数据类型是字符串,除了两个以Decimal作为数据类型的字段。

使用以下Spark选项: - executor-memory 37G --executor-cores 5 --num-executors 20

群集大小 - 类型为r3.8xLarge的10个数据节点

发现AWS EMR中使用的vCore数量始终等于文件数量,可能是因为gzip文件不可拆分。 Gzip文件来自不同的系统,文件大小约为8 GB。

总共花费29.8GB的6个文件的Parquet转换所需的总时间超过2小时。

有没有办法通过Spark使用版本2.0.2来提高性能?

代码段:

val srcDF = spark.sql(stgQuery) srcDF.write.partitionBy( “data_date”, “batch_number”)选项(地图( “压缩” - > “活泼”, “spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version” - > “中2”,” spark.speculation “ - >” 中。假“))模式(SaveMode.Overwrite).parquet(finalPath)

1 个答案:

答案 0 :(得分:0)

无论您要求多少个节点,或者有多少个核心,如果您有6个文件,将分配六个线程来处理它们。尝试做一个

  • 以可拆分格式保存(snappy)
  • 获取保存数据的来源是许多较小的文件
  • 进行一些新格式的增量转换(例如,对新的gzip文件进行单个火花流式核心轮询,然后将其他地方保存到snappy文件中。也许尝试使用AWS-Lambda作为触发器,以节省将单个VM专用于任务。