我正尝试使用以下命令使用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主站没有数据可以开始) .
对于我在测试中看到的内容,Yarn以完全随机的方式选择AM,我找不到强迫他选择Spark Master作为AM的方法 .
我的集群由4个节点(3个Spark Slaves,1个Spark Master)组成,具有64GB的总RAM和32个内核,基于HDP 2.4与HortonWorks构建 . Spark Master只托管namenode,三个slave是datanode .
1 回答
您希望能够指定一个没有任何DataNode的节点来运行Spark Master . 据我所知,这是不可能开箱即用的 .
你可以做的是在运行NameNode的节点上以纱线客户端模式运行master,但这可能不是你想要的 .
另一种方法是创建自己的Spark Client(您指定使用YARN API来为Spark Master选择某些节点而不是其他节点) .