oozie spark action - 如何指定 spark-opts
oozie spark action - how to specify spark-opts
我是 运行 通过 oozie spark 操作在 yarn-client 模式下进行 spark 作业。我需要指定驱动程序和应用程序主机相关设置。我尝试按照 oozie 的说明配置 spark-opts,但它不起作用。
来自 oozie 文档:
Example:
<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
...
<action name="myfirstsparkjob">
<spark xmlns="uri:oozie:spark-action:0.1">
<job-tracker>foo:8021</job-tracker>
<name-node>bar:8020</name-node>
<prepare>
<delete path="${jobOutput}"/>
</prepare>
<configuration>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
<master>local[*]</master>
<mode>client<mode>
<name>Spark Example</name>
<class>org.apache.spark.examples.mllib.JavaALS</class>
<jar>/lib/spark-examples_2.10-1.1.0.jar</jar>
<spark-opts>--executor-memory 20G --num-executors 50</spark-opts>
<arg>inputpath=hdfs://localhost/input/file.txt</arg>
<arg>value=2</arg>
</spark>
<ok to="myotherjob"/>
<error to="errorcleanup"/>
</action>
...
</workflow-app>
上面的 spark-opts 被指定为 --executor-memory 20G --num-executors 50
在描述的同一页上它说:
"The spark-opts element if present, contains a list of spark options that can be passed to spark driver. Spark configuration options can be passed by specifying '--conf key=value' here"
所以根据文档应该是 --conf executor-memory=20G
那么这里是哪一个?我都试过了,但似乎没有用。我在 yarn-client 模式下 运行 所以主要想设置驱动相关的设置。我认为这是我唯一可以设置驱动程序设置的地方。
<spark-opts>--driver-memory 10g --driver-java-options "-XX:+UseCompressedOops -verbose:gc" --conf spark.driver.memory=10g --conf spark.yarn.am.memory=2g --conf spark.driver.maxResultSize=10g</spark-opts>
<spark-opts>--driver-memory 10g</spark-opts>
None 以上驱动程序相关设置在实际驱动程序 jvm 中设置。我在 linux 进程信息上验证了它。
参考:https://oozie.apache.org/docs/4.2.0/DG_SparkActionExtension.html
尝试将 <master>local[*]</master>
更改为 <master>yarn</master>
<spark-opts>--executor-memory 20G</spark-opts>
应该可以正常工作。
此外,尝试使用:
<master>yarn-cluster</master>
<mode>cluster</mode>
"Spark configuration options can be passed by specifying '--conf key=value' here " 可能指的是配置标签。
例如:
--conf mapred.compress.map.output=true
将转换为:
<configuration>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
我确实找到了问题所在。在 yarn-client 模式下,您不能使用 <spark-opts>--driver-memory 10g</spark-opts>
指定与驱动程序相关的参数,因为您的驱动程序(oozie 启动器作业)已经在此之前启动。这是一个 oozie 启动器(这是一个 mapreduce 作业)启动您的实际火花和任何其他作业,并且对于该作业 spark-opts 是相关的。但是要在 yarn-client 模式下设置驱动程序参数,您需要在 oozie 工作流中基本配置 configuration
:
<configuration>
<property>
<name>oozie.launcher.mapreduce.map.memory.mb</name>
<value>8192</value>
</property>
<property>
<name>oozie.launcher.mapreduce.map.java.opts</name>
<value>-Xmx6000m</value>
</property>
<property>
<name>oozie.launcher.mapreduce.map.cpu.vcores</name>
<value>24</value>
</property>
<property>
<name>mapreduce.job.queuename</name>
<value>default</value>
</property>
</configuration>
我没有尝试过 yarn-cluster 模式,但 spark-opts 可能适用于那里的驱动程序设置。但我的问题是关于 yarn-client 模式。
我是 运行 通过 oozie spark 操作在 yarn-client 模式下进行 spark 作业。我需要指定驱动程序和应用程序主机相关设置。我尝试按照 oozie 的说明配置 spark-opts,但它不起作用。
来自 oozie 文档:
Example:
<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
...
<action name="myfirstsparkjob">
<spark xmlns="uri:oozie:spark-action:0.1">
<job-tracker>foo:8021</job-tracker>
<name-node>bar:8020</name-node>
<prepare>
<delete path="${jobOutput}"/>
</prepare>
<configuration>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
<master>local[*]</master>
<mode>client<mode>
<name>Spark Example</name>
<class>org.apache.spark.examples.mllib.JavaALS</class>
<jar>/lib/spark-examples_2.10-1.1.0.jar</jar>
<spark-opts>--executor-memory 20G --num-executors 50</spark-opts>
<arg>inputpath=hdfs://localhost/input/file.txt</arg>
<arg>value=2</arg>
</spark>
<ok to="myotherjob"/>
<error to="errorcleanup"/>
</action>
...
</workflow-app>
上面的 spark-opts 被指定为 --executor-memory 20G --num-executors 50
在描述的同一页上它说:
"The spark-opts element if present, contains a list of spark options that can be passed to spark driver. Spark configuration options can be passed by specifying '--conf key=value' here"
所以根据文档应该是 --conf executor-memory=20G
那么这里是哪一个?我都试过了,但似乎没有用。我在 yarn-client 模式下 运行 所以主要想设置驱动相关的设置。我认为这是我唯一可以设置驱动程序设置的地方。
<spark-opts>--driver-memory 10g --driver-java-options "-XX:+UseCompressedOops -verbose:gc" --conf spark.driver.memory=10g --conf spark.yarn.am.memory=2g --conf spark.driver.maxResultSize=10g</spark-opts>
<spark-opts>--driver-memory 10g</spark-opts>
None 以上驱动程序相关设置在实际驱动程序 jvm 中设置。我在 linux 进程信息上验证了它。
参考:https://oozie.apache.org/docs/4.2.0/DG_SparkActionExtension.html
尝试将 <master>local[*]</master>
更改为 <master>yarn</master>
<spark-opts>--executor-memory 20G</spark-opts>
应该可以正常工作。
此外,尝试使用:
<master>yarn-cluster</master>
<mode>cluster</mode>
"Spark configuration options can be passed by specifying '--conf key=value' here " 可能指的是配置标签。
例如:
--conf mapred.compress.map.output=true
将转换为:
<configuration>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
我确实找到了问题所在。在 yarn-client 模式下,您不能使用 <spark-opts>--driver-memory 10g</spark-opts>
指定与驱动程序相关的参数,因为您的驱动程序(oozie 启动器作业)已经在此之前启动。这是一个 oozie 启动器(这是一个 mapreduce 作业)启动您的实际火花和任何其他作业,并且对于该作业 spark-opts 是相关的。但是要在 yarn-client 模式下设置驱动程序参数,您需要在 oozie 工作流中基本配置 configuration
:
<configuration>
<property>
<name>oozie.launcher.mapreduce.map.memory.mb</name>
<value>8192</value>
</property>
<property>
<name>oozie.launcher.mapreduce.map.java.opts</name>
<value>-Xmx6000m</value>
</property>
<property>
<name>oozie.launcher.mapreduce.map.cpu.vcores</name>
<value>24</value>
</property>
<property>
<name>mapreduce.job.queuename</name>
<value>default</value>
</property>
</configuration>
我没有尝试过 yarn-cluster 模式,但 spark-opts 可能适用于那里的驱动程序设置。但我的问题是关于 yarn-client 模式。