2017-03-03 132 views
-1

我从一个shell脚本提交一个火花作业,该脚本有一堆env vars和参数传递给spark。奇怪的是,驱动程序主机不是这些参数之一(但是有驱动程序核心和内存)。因此,如果我在群集中有3台机器,则会随机选择一个驱动程序。我不想要这样的行为,因为1)我要提交的jar只在其中一台机器上,2)驱动程序机器应该比其他机器小,如果它是随机选择,情况就不是这样。指定火花提交的火花驱动程序

到目前为止,我没有办法在命令行上指定这个参数为spar-submit。我试过--conf SPARK_DRIVER_HOST="172.30.1.123--conf spark.driver.host="172.30.1.123和许多其他的东西,但没有任何影响。我正在使用spark 2.1.0。谢谢。

+0

您是否以群集模式启动纱线? – FaigB

+0

我使用集群模式 – Dmitri

+0

任何人都可以点我一个很好的资源解释火花执行模型?官方文档只是增加了混淆... – Dmitri

回答

1

我假设你正在运行Yarn群集。简而言之,纱线使用容器来启动和执行任务。资源管理器根据资源的可用性决定运行哪个容器。在火花情况下,驱动程序和执行程序也作为具有独立jvms的容器启动。致力于执行者之间分裂任务的驱动程序,并从中收集结果。如果你的节点从启动应用程序的地方包含在集群中,那么它也将被用作启动驱动程序/执行程序的共享资源。

+0

好吧,我想我没有清楚地了解它看起来的执行模型。如果执行程序自动启动,是否需要指定'--executor-memory'和'--executor-cores'(以及驱动程序的相同内容)?目前如果我没有指定内存,看起来只有1GB(尽管有更多可用)并且得到'OutOfMemoryError'。 – Dmitri

+0

我的建议让你阅读Spark的行动。所有关于你的情况的要点都在这里描述 – FaigB

1

从文档:http://spark.apache.org/docs/latest/running-on-yarn.html

运行在独立或Mesos驱动主机集群(这是主)当可推出:

--master <master-url> #e.g. spark://23.195.26.187:7077 

当使用YARN它的工作原理有点不同。这里参数是纱线

--master yarn 

在Hadoop中指定纱线的配置为ResourceManager。关于如何做到这一点,请参阅本指南https://dqydj.com/raspberry-pi-hadoop-cluster-apache-spark-yarn/。基本上在hdfs hdfs-site.xml和纱线yarn-site.xml

+0

我确实用'--master'参数指定了master,但驱动程序仍然是随机选择的。 – Dmitri

+0

对于内存不足的错误,看看下面的堆栈溢出很有用:http://stackoverflow.com/questions/21138751/spark-java-lang-outofmemoryerror-java-heap-space。使用spark.executor.memory选项可以指定内存量,这是在群集中运行时的情况。有关更多内存信息,请阅读:http://spark.apache.org/docs/latest/configuration.html。当您使用Spark本地时,Spark会在同一个JVM中产生所有执行组件 - 驱动程序,执行程序,后端和主设备。这是使用驱动程序执行的唯一模式。 –

+0

您的记忆问题的一个解决方案可能是使用动态分配。这允许更细粒度的控制。这在博客http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/中更具体。启动集群时,您可以在conf/spark-env.sh中指定主集的启动位置。这里也将是你的司机。请参阅http://spark.apache.org/docs/latest/spark-standalone.html。 –