【发布时间】:2017-09-29 21:42:49
【问题描述】:
我的用例是合并两个表,其中一个表包含 200 个列的 3000 万条记录,另一个表包含 200 个列的 100 万条记录。我对小表使用广播连接。我将两个表都加载为数据-来自 HDFS 上的 hive 托管表的帧。
我需要为此用例设置驱动程序内存和执行程序内存以及其他参数的值。
我的纱线集群有这个硬件配置:
Spark 版本 2.0.0
Hdp 版本 2.5.3.0-37
1) 纱线客户 20
2) 最大。为容器分配的虚拟核心 (yarn.scheduler.maximum.allocation-vcores) 19
3) 最大。为一个纱线容器分配的内存 216gb
4) 可用集群内存 3.1 TB 可用
您需要的任何其他信息我都可以为此集群提供。
我必须减少完成这个过程的时间。
我一直在使用一些配置,但我认为它是错误的,我花了 4.5 分钟完成它,但我认为 spark 有能力减少这个时间。
【问题讨论】:
-
您是否将表缓存到 RAM 中?
-
No @anshul_cached 我只是使用“spark.table("table_name")”代码将表加载为数据帧,然后继续帧进行合并。合并后我将表写回蜂巢将其存储为 ORC。
-
将数据帧缓存到 RAM 并执行计数操作,然后应用其余的
-
我尝试缓存两个数据帧,然后在缓存数据帧然后处理它时花费更多时间。 @anshul_cached
-
缓存是惰性的。您是否在缓存后对数据帧执行计数操作?
标签: apache-spark apache-spark-sql spark-dataframe hadoop-yarn hortonworks-data-platform