
# 配置YARN-Client和YARN-Cluster不同模式下的环境变量
#### 操作场景
**YARN-Client模式**：Spark应用的Driver运行在提交任务的客户端机器上，ApplicationMaster仅负责向YARN申请资源。该模式下用户可在客户端实时查看Driver输出，适合交互式调试和开发阶段使用。
**YARN-Cluster模式**：Spark应用的Driver运行在YARN分配的ApplicationMaster容器中，客户端提交任务后即可退出，不参与计算。该模式下应用独立运行于集群中，适合生产环境提交长期运行的任务。
当前，在YARN-Client和YARN-Cluster模式下，两种模式的客户端存在冲突的配置，即当客户端为一种模式的配置时，会导致在另一种模式下提交任务失败。
为避免出现如上情况，添加[表1]中的配置项，避免两种模式下来回切换参数，提升软件易用性。
- YARN-Cluster模式下，优先使用新增配置项的值，即服务端路径和参数。
- YARN-Client模式下，直接使用原有的三个配置项的值。 原有的三个配置项为："spark.driver.extraClassPath"、"spark.driver.extraJavaOptions"、"spark.driver.extraLibraryPath"。
  不添加[表1]中配置项时，使用方式与原有方式一致，程序可正常执行，只是在不同模式下需切换配置。
  
 
#### 配置参数
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"集群 \> 服务 \> Spark2x/Spark \> 配置"，单击"全部配置"，搜索并调整以下参数。 
    表1参数介绍 
   | **参数**                                     | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                     | 取值示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|:---|
   | spark.yarn.cluster.driver.extraClassPath   | YARN-Cluster模式下，Driver使用的extraClassPath，配置为服务端的路径和参数。同时，"spark.driver.extraClassPath"配置成Spark客户端路径，可以保证在YARN-Client模式下和YARN-Cluster模式下不需要切换配置。                                                                                                                                                                                                                                                               | ${BIGDATA_HOME}/common/runtime/security                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | spark.yarn.cluster.driver.extraJavaOptions | YARN-Cluster模式下Driver的extraJavaOptions，配置成服务端的路径和参数。 同时，"spark.driver.extraJavaOptions"配置成Spark客户端路径，可以保证YARN-Client模式和YARN-Cluster模式不需要切换配置。 Cluster模式下传递给driver的JVM选项字符串。例如GC或者其它日志设置。在这个选项中设置Spark属性或者堆大小是不合理的。 注意： 修改该值需谨慎。如果出现值错误，服务将启动失败。 | -Dfastjson.parser.safeMode=true -XX:+UseBiasedLocking -Xlog:gc\*:file='\<LOG_DIR\>/jdbcserver-%p-gc.log':utctime,uptime,tid,level:filesize=10M,filecount=20 -XX:-OmitStackTraceInFastThrow -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:OnOutOfMemoryError='kill -9 %p' -Dlog4j.configurationFile=./__spark_conf__/__hadoop_conf__/log4j2-executor.properties -Dlog4j.configuration.watch=true -Djava.security.auth.login.config=./__spark_conf__/__hadoop_conf__/jaas-zk.conf -Dzookeeper.server.principal=zookeeper/hadoop.\<域名\> -Djava.security.krb5.conf=./__spark_conf__/__hadoop_conf__/kdc.conf -Djetty.version=x.y.z -Dorg.xerial.snappy.tempdir=/opt/huawei/Bigdata/tmp -Dcarbon.properties.filepath=./__spark_conf__/__hadoop_conf__/carbon.properties -Djdk.tls.ephemeralDHKeySize=3072 -Dspark.ssl.keyStore=./__spark_conf__/__hadoop_conf__/child.keystore -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false |
      
   
   

3. 修改参数配置后，单击"保存"，根据界面提示操作后，等待配置保存成功。
4. Spark服务端配置更新后，如果"配置状态"为"配置过期"，则需重启组件以使配置生效。 
   图1修改Spark配置   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002305123220.png "点击放大")
   在Spark服务概览页面，选择"更多 \> 重启服务/滚动重启服务"，验证管理员密码后，等待服务重启成功。
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/warning_3.0-zh-cn.png)
   组件重启期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。
   
   
 
#### 常见问题
- **Q：配置后仍出现ClassNotFoundException如何排查？**
  A：请检查spark.yarn.cluster.driver.extraClassPath和spark.driver.extraClassPath的路径是否正确。Cluster模式下使用新增参数的路径（服务端路径），Client模式下使用原有参数的路径（客户端路径）。确认路径下存在所需的JAR包文件，且${BIGDATA_HOME}环境变量已正确设置。
  
- **Q：YARN-Cluster模式下Driver启动失败如何定位？**
  A：请检查spark.yarn.cluster.driver.extraJavaOptions配置是否正确。常见原因包括：JVM选项语法错误（如缺少-D前缀）、Kerberos认证配置文件路径不存在、域名占位符未替换。请通过YARN ResourceManager页面查看ApplicationMaster日志定位具体错误。
  
- **Q：修改extraJavaOptions后服务无法启动如何恢复？**
  A：登录FusionInsight Manager，进入Spark服务配置页面，将spark.yarn.cluster.driver.extraJavaOptions恢复为修改前的值或参考取值示例重新配置，保存后重启服务。建议在修改前记录原始值以便回滚。
  
 
#### 相关文档
- MRS集群创建成功后，用户可自行安装集群客户端，用于连接集群内组件服务端，进行组件连接、作业提交等任务。集群客户端可以安装在集群内的节点上，也可以安装在集群外的节点上，具体操作请参考[安装MRS客户端](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2127.html)。
- 了解Spark常用配置参数的含义和用法，请参考[Spark常用配置参数](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1931.html)。
 
