文章目录

  • 1. 背景
  • 2. 使用自定义的jdk

1. 背景

  公司的hadoop集群默认使用的还是jdk1.7 我刚来不知道,用spark2.0+jdk1.8开发了应用程序。 提交到集群上面报错

Job aborted due to stage failure: Task 1 in stage 37.0 failed 4 times, most recent failure: Lost task 1.3 in stage 37.0 (TID 10960, hadoop37):
java.lang.UnsupportedClassVersionError: com/chen/search//task/IndexBuilder$1 : Unsupported major.minor version 52.0

当时内心有点崩溃,没想到集群只支持jdk1.7, 最开始想到的方案是降低当前工程的jdk版本吧,于是在本地又装了一个jdk1.7, 然后各种依赖的包都要处理,因为很多第三方包新一些的都是jdk1.8了,让人欲哭无泪,我一顿操作,终于把大部分依赖都降低到了1.7, 结果发现有一个没法绕过去的地方,这个spark任务最终要写入Elasticsearch, ES的版本是7.+, 7.0之后ES的client对jdk1.7已经不再支持了,所以也决定了这个问题无法通过降低jdk来完成了,而且降低jdk的操作本来也不合我的想法,开历史倒车。

2. 使用自定义的jdk

  上面的一顿操作猛如虎,一看结果啥用没有,比较坑。也说明我的思维不够灵活,遇到问题第一个想到的是适应,比如hadoop平台说只支持1.7,我就去降低自己的代码的jdk版本,没有想过怎样在集群中运行高版本的jdk。还好在经历上面的失败之后我并没有放弃,想到有没有其他方案呢,我就查了一下,结果真的有,就是hadoop集群的多版本jdk的方案。这里需要提交的时候做更多的配置。整个的提交命令是这样的:

spark-submit --deploy-mode client --master yarn --class com.xxxx.task.RebuildStarter \
--driver-memory 2G    \--num-executors 80     \--queue aaa            \--conf spark.default.parallelism=60 \--executor-cores 4        \--executor-memory 16G       \user-1.0-SNAPSHOT.jar \--conf "spark.yarn.appMasterEnv.JAVA_HOME=/opt/jdk1.8.0_181"      \--conf "spark.executorEnv.JAVA_HOME=/opt/jdk1.8.0_181"             \--conf "spark.yarn.executor.memoryOverhead=2048"               2>&1

其中比较重要的是

--conf "spark.yarn.appMasterEnv.JAVA_HOME=/opt/jdk1.8.0_181"      \--conf "spark.executorEnv.JAVA_HOME=/opt/jdk1.8.0_181"             \

这个设置需要在hadoop集群中所有的机器上都安装jdk1.8,其实就是解压放上去就好,所以实际上不会对集群的稳定性造成影响。
设置master和executor的jdk。这个方案也是我从网上找到的一个方案,但是在我实际运行后不行,依然报上面的jdk的版本不支持的错误,有点头大, 这个时候,我想有没有可能是这些命令在将任务提交到其他executor的时候没有分发过去呢(在使用集群的时候多少觉得这个集群哪里不对头)?
于是在代码里面增加了一些设置,就是把这个设置抄写了一遍

  SparkConf sparkConf = new SparkConf().setAppName(JOB_NAME).set(ConfigurationOptions.ES_NODES, esHost).set(ConfigurationOptions.ES_PORT, esPort).set(ConfigurationOptions.ES_NET_HTTP_AUTH_USER, esUser).set(ConfigurationOptions.ES_NET_HTTP_AUTH_PASS, esPass).set(ConfigurationOptions.ES_BATCH_SIZE_ENTRIES, "1000").set(ConfigurationOptions.ES_MAPPING_ID, ES_MAPPING_ID).set(ConfigurationOptions.ES_BATCH_WRITE_REFRESH, "false").set("spark.sql.warehouse.dir", "/user/hive/warehouse").set("spark.executorEnv.JAVA_HOME","/opt/jdk1.8.0_181").set("spark.default.parallelism","60").set("spark.yarn.executor.memoryOverhead","2048")                    ;SparkSession session = SparkSession.builder().appName(JOB_NAME).config(sparkConf).enableHiveSupport().getOrCreate();

这样提交任务后终于不再报这个错了。

spark on yarn 使用自定义jdk相关推荐

  1. Spark 在YARN上运行

    在YARN上运行Spark 安全 在YARN上启动Spark 添加其他JAR 准备工作 组态 调试您的应用程序 Spark特性 重要笔记 的Kerberos YARN特定的Kerberos配置 Ker ...

  2. Spark通过YARN提交任务不成功(包含YARN cluster和YARN client)

    无论用YARN cluster和YARN client来跑,均会出现如下问题. [spark@master spark-1.6.1-bin-hadoop2.6]$ jps 2049 NameNode ...

  3. Spark(十二) -- Spark On Yarn Spark as a Service Spark On Tachyon

    Spark On Yarn: 从0.6.0版本其,就可以在在Yarn上运行Spark 通过Yarn进行统一的资源管理和调度 进而可以实现不止Spark,多种处理框架并存工作的场景 部署Spark On ...

  4. spark视频-Spark on Yarn

    第十期Spark亚太研究院决胜大数据时代公益大讲坛:Spark on Yarn,视频地址:http://pan.baidu.com/share/link?shareid=3629554384& ...

  5. Spark on YARN的部署

    Spark on YARN的原理就是依靠yarn来调度Spark,比默认的Spark运行模式性能要好的多,前提是首先部署好hadoop HDFS并且运行在yarn上,然后就可以开始部署spark on ...

  6. 搭建Spark On YARN集群

    文章目录 零.本讲学习目标 一.Spark On YARN架构 (一)client提交方式 (二)cluster提交方式 二.搭建Spark On YARN集群 (一)搭建Spark Standalo ...

  7. 2021年大数据Spark(九):Spark On Yarn两种模式总结

    目录 Spark On Yarn两种模式 引入 一.当一个MR应用提交运行到Hadoop YARN上时 二.当一个Spark应用提交运行在集群上时 注意 client 模式 cluster 模式 总结 ...

  8. Apache Spark源码走读之8 -- Spark on Yarn

    欢迎转载,转载请注明出处,徽沪一郎. 概要 Hadoop2中的Yarn是一个分布式计算资源的管理平台,由于其有极好的模型抽象,非常有可能成为分布式计算资源管理的事实标准.其主要职责将是分布式计算集群的 ...

  9. spark on yarn 完全分布式_Spark编程笔记(1)-架构基础与运行原理

    引言 根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一 次重大变革 .当前我们正处于第三次信息浪潮(2010年前后),物联网.云计算和大数据技术突飞猛进. 信息爆炸是我们当前所需要解决 ...

最新文章

  1. PL/SQL复合变量
  2. linux内核earlyprink,内核启动参数机制学习笔记
  3. linux fedora35指定某个固定的启动项作为默认的启动项
  4. 转 Java对日期Date类进行加减运算一二三
  5. TCP/UDP 网络编程实例
  6. asp.net core 环境(Development、Staging 、Production)
  7. oracle 查询过去一个星期的数据_过去一星期,最懂我的居然是一个表情包
  8. Android doc |Getting Started|部分 转载 --管理Activity生命周期
  9. 4月27日--28日课堂内容
  10. Linux操作系统中使用“autogen.sh+configure+make”编译代码的方法
  11. Oracle 存储过程、存储函数 与原生 JDBC 调用
  12. 全地形机器人HEXA评测:不做玩具 钻洞爬台阶可编程 | 评测
  13. my97前端日期插件使用示例
  14. 还在找一款编辑友好,美观方便的开源wiki系统?安利一款超好用wiki
  15. Emacs的日常生活
  16. C语言|计算流逝后的时间
  17. 计算机属于机器人相关专业,人工智能属于什么学科门类
  18. 【保姆级】网络安全工程师学习成长路线,就业前景,薪资待遇分享
  19. android onupgrade调用,Android Sqlite中常见的对于onUpgrade的处理方法
  20. 翻译:俄国卫星GLONASS 简介 天基全球导航卫星系统 (GNSS)

热门文章

  1. boost.asio系列——io_service
  2. 漫游Kafka设计篇之Producer和Consumer
  3. 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?
  4. python time,datetime当前时间,昨天时间,时间戳和字符串的转化
  5. 滑动窗口算法学习(一)
  6. “新型肺炎患者同乘查询系统”上线,超2千万用户使用
  7. RabbitMQ Network Partitions
  8. 实时音视频助力在线教育风口
  9. 以“用户播放行为与体验”为核心的视频服务质量优化
  10. 开源声码器WORLD在语音合成中的应用