performance - 将数据帧写入 Parquet 时,Spark Executor 性能低下

标签 performance apache-spark apache-spark-sql parquet apache-spark-2.0

Spark 版本:2.3
hadoop dist:azure Hdinsight 2.6.5
平台:Azure
存储:BLOB

集群节点数:6
执行器实例:6
每个执行器的核心数:3
每个执行器的内存:8GB

尝试通过同一存储帐户上的 spark 数据帧将 azure blob (wasb) 中的 csv 文件(大小为 4.5g - 280 列,280 万行)加载为 Parquet 格式。我用不同的大小重新分区了文件,即 20、40、60、100,但面临一个奇怪的问题,其中 6 个执行程序中的 2 个处理非常小的记录子集(<1%)继续运行 1 小时左右并最终完成。











题 :

1) 由这 2 个执行程序处理的分区需要处理的记录最少(少于 1%),但需要将近一个小时才能完成。这是什么原因。这与数据倾斜情况相反吗?

2) 运行这些执行程序的节点上的本地缓存文件夹被填满 (50-60GB)。不确定这背后的原因。

3) 增加分区确实将整个执行时间降低到 40 分钟,但只想知道这两个执行程序低通过的原因。

新来的 Spark 所以期待一些指针来调整这个工作负载。附加来自 Spark WebUi 的附加信息。

最佳答案

您使用的是什么 hadoop 集群环境?

1)
Ans : 你在写文件的时候唱 partitionColumnBy 吗?否则尝试并检查。

2)
Ans:增加分区数,即使用“spark.sql.shuffle.partitions”

3)
答:需要更具体的信息,如样本数据等来给出答案。

关于performance - 将数据帧写入 Parquet 时,Spark Executor 性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554463/

相关文章:

javascript - 是否有任何 native 方法可以对浏览器中公开的点的有序列表进行三 Angular 测量?

java.lang.UnsupportedOperationException : Cannot have circular references in bean class but got the circular reference of class java. 时间.ZoneOffset

scala - 如何将 JSON 的 RDD 转换为 Dataframe?

scala - 想法 sbt java.lang.NoClassDefFoundError : org/apache/spark/SparkConf

scala - 将 FASTQ 文件读入 Spark 数据帧

python - 在 AWS Glue/pyspark 中将纪元转换为日期时间

perl - Perl 中的字符串操作有多快?特别是串联和赋值

performance - Spark withColumn 性能

performance - Hadoop减少内存中的洗牌合并

apache-spark - DStream 和 Map 中的 Spark Transform 之间的确切区别是什么?