如何在集群中执行高效的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)

2 years ago

spark-submit 默认以客户端(本地)模式运行,为了在集群模式下提交spark作业,请使用 --deploy-mode 作为:

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

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

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