Spark程序里使用指定的JDK版本

本文介绍如何在Spark应用中正确配置JDK环境,包括在客户端和YARN集群部署相同版本JDK的方法,以及当集群未部署所需JDK时,如何通过spark.yarn.dist.archives参数上传并使用自定义JDK。

1. 客户端和yarn集群都部署了相同版本的JDK

如客户端和yarn集群的JDK均安装在 /usr/java/jdk1.8.0_25 目录

通过参数设置  spark.executorEnv.JAVA_HOME 和 spark.yarn.appMasterEnv.JAVA_HOME,这分别为 Spark 的 Executor 和 Driver 指定 JDK 路径,如下:

$SPARK_HOME/bin/spark-submit --master yarn-cluster  \
      ...  \
        --conf "spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_25" \
        --conf "spark.executorEnv.JAVA_HOME=/usr/java/jdk1.8.0_25" \
        --executor-cores 1 \
        --class com....-1.0-SNAPSHOT.jar

2. yarn集群中没有部署相关的JDK版本,又无法安装

可配置参数spark.yarn.dist.archives=jdk压缩包,在启动spark时,spark会自动上传到yarn集群中,并解压运行。

$SPARK_HOME/bin/spark-submit --master yarn-cluster  \
...  \
--conf "spark.yarn.dist.archives=jdk-8u211-linux-x64.tar.gz" \
--conf "spark.executorEnv.JAVA_HOME=./jdk-8u211-linux-x64.tar.gz/jdk1.8.0_211" \
--conf "spark.yarn.appMasterEnv.JAVA_HOME=./jdk-8u211-linux-x64.tar.gz/jdk1.8.0_211" \

### 如何在 Apache Spark 中配置指定版本JDK #### 配置背景 自 Spark 2.2 开始,官方已停止对 Java 7 的支持,在实际生产环境中,Spark 应用程序通常运行于 Hadoop 系统之上。如果 Hadoop 所依赖的 JDK 版本较低(如 JDK 7),而 Spark Application 基于更高版本JDK 编写,则可能会引发兼容性问题[^1]。 #### 参数说明 为了确保 Spark Application 运行时使用JDK 版本与预期一致,可以通过设置 `spark.yarn.appMasterEnv.JAVA_HOME` 和 `spark.executorEnv.JAVA_HOME` 来分别指定 Driver 端和 Executor 端所使用JDK 路径。这些参数的作用在于覆盖默认环境变量中的 `JAVA_HOME` 设置,从而避免因系统级配置不匹配而导致的任务失败[^2]。 #### 实现方法 以下是具体实现步骤: 1. **修改 Spark 配置文件** 可以在 `spark-defaults.conf` 文件中添加如下两行配置: ```properties spark.yarn.appMasterEnv.JAVA_HOME /path/to/higher/java/version spark.executorEnv.JAVA_HOME /path/to/higher/java/version ``` 2. **动态传递参数** 如果不想更改全局配置文件,也可以通过命令行提交任务时动态传入上述两个参数。例如: ```bash ./bin/spark-submit \ --conf spark.yarn.appMasterEnv.JAVA_HOME=/path/to/higher/java/version \ --conf spark.executorEnv.JAVA_HOME=/path/to/higher/java/version \ your-application.jar ``` 3. **验证配置生效** 提交任务后,可以查看日志确认是否加载了正确的 JDK 版本。若未显式设置以上参数,可能导致任务仍使用旧版 JDK 或者报错退出[^4]。 #### 示例代码 下面展示了一个简单的 Spark Conf 创建过程,并演示如何利用该对象进一步扩展其他必要选项。 ```java import org.apache.spark.SparkConf; public class SparkConfigExample { public static void main(String[] args) { SparkConf conf = new SparkConf() .setAppName("Custom JDK Example") .setMaster("yarn") // or local[*], etc. .set("spark.yarn.appMasterEnv.JAVA_HOME", "/usr/lib/jvm/java-8-openjdk-amd64/") .set("spark.executorEnv.JAVA_HOME", "/usr/lib/jvm/java-8-openjdk-amd64/"); System.out.println(conf.get("spark.yarn.appMasterEnv.JAVA_HOME")); System.out.println(conf.get("spark.executorEnv.JAVA_HOME")); } } ``` #### 总结 通过合理调整 Spark Configuration,能够有效解决多版本 JDK 并存场景下的冲突问题。这不仅有助于提升系统的稳定性,还能减少不必要的调试时间成本。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值