我的用例是合并两个表格,其中一张表包含3000万张记录与200个COLS,另一个表包含100万个记录,其中200 cols.i am am in for Small Table.i我正在将两个表作为来自HDFS上Hive托管表的数据框架加载。
我需要为驱动程序内存和执行器内存以及其他参数以及此用例设置的值。
我为我的纱线集群具有此硬件配置:
SPARK版本2.0.0
HDP版本2.5.3.0-37
1(纱线客户端20
2(最大。分配给容器(Yarn.scheduler.maximum.altocation-vcores(的虚拟内核19
3(最大。分配了用于纱线容器的内存216GB
4(群集存储器可用3.1 TB可用
您需要提供的任何其他信息,我可以为此集群提供。
我必须减少完成此过程的时间。
我一直在使用一些配置,但我认为这是错误的,我花了4.5分钟才能完成它,但我认为Spark可以减少这次。
当您想加快Spark应用程序时,主要有两件事。
缓存/持久性:
这不是加快处理的直接方法。当您有多个操作(减少,加入等(时,这将很有用,并且您想避免在失败的情况下避免RDD的重新计算,从而减少申请运行持续时间。
增加了并行性:
这是加快火花应用程序的实际解决方案。这可以通过增加分区数来实现。根据用例,您可能必须增加分区
-
每当您创建dataframes/rdds :这是增加分区的更好方法,因为您不必触发昂贵的洗牌操作来增加分区。
-
通过调用retartition :这将触发洗牌操作。
注意: 一旦增加了分区数,然后增加执行者(可能是很大的小容器,vcors很少,vcors很少,几个GB的内存
增加每个执行人内部的并行性通过向每个执行人添加更多核心,您可以在分区级别上增加并行性。这也将加速处理。
要更好地了解配置,请参阅此帖子