2017-03-03 176 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。 –