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/