| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Spark on yarn运行时Jar包加载踩坑经历 -> 正文阅读 |
|
[大数据]Spark on yarn运行时Jar包加载踩坑经历 |
博客访问地址:小菜鸟的大梦想 欢迎各位同学扫码关注本人公众号 ↓↓↓ 更多优质内容将 首发 公众号 前言本文起因于近段时间在做的项目,百亿级数据的存储与实时检索。项目主要采用HBase存储全量数据,Elasticsearch作为二级索引库,数据入库采用Spark批量写入,最终数据通过微服务平台API接口对外提供实时线上访问。
具体方案由于工作原因,不便透漏,此处不再详细叙述,感兴趣的可以至 本人博客 留言板 或者 随心聊 模块私信本人。 下面主要叙述项目上线后 Spark on yarn 运行时 Jar 包加载异常的解决方案。 生产异常报错由于表入库时需要读取 Mysql 数据库当前表的配置信息,因此项目中添加了 Mysql 驱动的依赖,测试环境从开发到上线均正常运行。但一上生产通过调度工具调用起来直接就报错,我们这上线换版出现问题是比较严重的,所以当时还是小小惊了一下的,然后抓紧时间通过电话排查问题(此时我已经回家了)。 1.查看运行日志
很明显就是找不到合适的驱动,明显是挺明显,但是很懵逼… 懵逼归懵逼但还是要抓紧时间解决问题,中间又让同事在测试环境同步进行排查,并解压检查上线包里的mysql驱动是否package进去了,但是无疾而终。由于连接mysql这块的代码不是我开发的,具体情况也不太清楚,只知道测试环境跑的没有问题。没办法,只好想着先通过临时指定驱动包(submit提交时通过参数指定)的方式进行解决,但通过网上查到的方式,似乎有的可以有的不行,而我们这的生产环境又不让做任何尝试性的测试操作(很扯dan)。由于不能百分百的确定可以,所以这种方式打算暂时放弃。后来想了想干脆直接把mysql驱动包放到${SPARK_HOME}/jars目录下得了,这样在运行时肯定是会被加载到的。结果自然是可以运行了,但是对于源代码运行异常,还得需要进一步排查。 第二天到公司后,在测试环境开始分析可以运行的原因,最后发现测试环境每台服务器 ${JAVA_HOME}/jre/lib/ext 目录下都存在 mysql-jdbc 的驱动包(不知道哪位大佬先前埋下的坑,目前也无从查起),把驱动包手动移除之后再重新跑Spark任务,也开始报和生产一样的错,而生产环境后来检查了环境之后,发现JAVA_HOME目录下是没有这个包的。所以就可以解释生产异常而测试通过了。 环境不一致归不一致,但是理论上项目中已经加载了mysql驱动的依赖,并且也确定发版后驱动包也包含在内,那么还出现运行时加载异常的问题,就大致可以定位以下两种情况:
Spark on yarn加载的jar在进行试验之前先了解下 spark on yarn 运行时会加载的jar包:
spark-submit中指定jar当使用如下的脚本提交应用时,会将应用本身的jar以及–jar指定的jar包上传到集群中。
–jar是以逗号分隔的jar包列表,不支持直接使用目录。 $SPARK_HOME/jars下的jar包提交应用时,会将$SPARK_HOME/jars下的所有jar包打成一个zip包,上传到集群中。“打zip上传”这个操作会在每次提交应用时执行,会有一点的性能损耗。 yarn提供的jar包在yarn-site.xml中会配置yarn.application.classpath,包含hadoop相关的一些包,这些包也会在应用提交的时候被加载。
通过参数指定的jar包
通过extraClassPath指定jar包的方式和之前通过 --jars 差不多,只不过extraClassPath可以通过指定目录的方式来指定,如/cdh/jars/*。 实验测试结果在明确了上一部分的各种加载方式之后,针对驱动包的加载进行了测试,其结果如下: spark-submit主要测试参数
代码读取mysql数据库
最终测试结论 1. 驱动放入 SPARK_HOME/jars 或者 JAVA_HOME/jre/lib/ext 目录 2. 代码中指定Driver 3. 代码中不指定Driver
2) cluster模式提交
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:37:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |