我有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个核心)。 在此先感谢。
答案 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>
值...并查看它是否与您的应用的性能有任何区别。