如何在集群中执行高效的spark程序

时间:2016-12-28 11:39:43

标签: apache-spark

我有2个节点的hadoop集群。每个都有16GB RAM和512GB硬盘。

我已经编写了类似下面的火花程序

代码:

val input = sc.wholeTextFiles("folderpath/*")

do some operations on input.
convert it to dataframe. then register temptable. execute insert command to insert the dataframe value to hive table.

然后我打开主机1(这是我的群集的名称节点)终端&我像

一样运行spark submit命令
>spark-submit --class com.sample.parser --master yarn Parser.jar.

但是处理25个文件总共需要50分钟以上,总共大约1gb。当我检查spark UI时,执行者列表只有我的主机2.主机1被列为驱动程序。

因此实际上只有一个节点正在执行程序(主机2)。为什么呢?

有没有办法让我的驱动程序也可以执行程序。这样运行得快一点?难道我做错了什么?基本上我希望我的驱动程序节点也是执行程序的一部分(两台机器都有8个核心)。 在此先感谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,

spark-submit以客户端(本地)模式运行,以集群模式提交spark作业,使用--deploy-mode

spark-submit \
--class com.sample.parser \
--master yarn \
--deploy-mode cluster \
Parser.jar
  

--deploy-mode:是否在工作节点上部署驱动程序   (集群)或本地作为外部客户端(客户端)(默认:客户端)

另外,尝试--num-executors <n> - 使用不同的<n>值...并查看它是否与您的应用的性能有任何区别。

相关问题