我正尝试使用以下命令使用Spark over Yarn激活一些作业(这只是一个示例,实际上我使用的是不同数量的内存和核心):
./bin/spark-submit --class org.mypack.myapp \
--master yarn-cluster \
--num-executors 3 \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
lib/myapp.jar \
当我查看Web UI以了解幕后真正发生的事情时,我注意到YARN正在选择Application Master作为不是Spark Master的节点。这是一个问题,因为真正的Spark Master节点强烈地参与分布式计算,导致不必要的网络数据传输(因为,当然,Spark master没有数据可以开始)。
对于我在测试中看到的内容,Yarn以完全随机的方式选择AM,我找不到一种方法强迫他选择Spark Master作为AM。
我的群集由4个节点(3个Spark Slaves,1个Spark Master)组成,具有64GB的总RAM和32个内核,基于HDP 2.4与HortonWorks构建。 Spark Master只托管namenode,三个slave是datanode。
答案 0 :(得分:0)
您希望能够指定一个没有任何DataNode的节点来运行Spark Master。据我所知,这不是开箱即用的。
你可以做的是在运行NameNode的节点上以纱线客户端模式运行master,但这可能不是你想要的。
另一种方法是创建自己的Spark客户端(您指定使用YARN API来优先选择某些节点而不是其他节点用于Spark Master)。