【发布时间】:2020-04-25 16:28:18
【问题描述】:
我正在运行一个处理大约 2 TB 数据的 spark 作业。处理涉及:
- 读取数据(avrò 文件)
- 在属于地图类型的列上展开
-
OrderBy分解列中的键 - 过滤DataFrame(我有一个非常小的(7)组键(称为键集),我想过滤df)。我做一个
df.filter(col("key").isin(keyset: _*) ) - 我将此 df 写入镶木地板(此数据框非常小)
- 然后我再次过滤原始数据帧以获取不在键集中的所有键
df.filter(!col("key").isin(keyset: _*) )并将其写入镶木地板。这是更大的数据集。
原始的 avro 数据约为 2TB。处理大约需要 1 小时。我想优化它。我在第 3 步之后缓存数据帧,使用 6000 的随机分区大小。min executors = 1000,max = 2000,executor memory = 20 G,executor core = 2。还有其他优化建议吗?左连接会比过滤器性能更好吗?
【问题讨论】:
-
Spark 集群中有多少个节点,使用了什么样的存储驱动器?在一小时内总共读取和写入 4 TB 数据(2 TB 读取 + 2 TB 写入)提供 1.1 GB/s,这取决于配置,可能接近或不接近物理限制。
标签: scala performance apache-spark