spark生产问题之一:执行作业报错 “org.apache.spark.sql.AnalysisException: undefined function: ‘your_function‘ is~~

这个错误想必大家都遇到过,是使用了spark不支持的函数导致。

背景是这样的:我们有三个环境,开发环境、服务环境测试态,服务环境生产态。

这个作业在开发环境和服务环境生产态是可以正常运行的,但是在上线前夕,在服务环境测试态做最后的模拟上线,报错了,打印日志正是这个错误。

        经查看,怀疑服务环境测试态的版本低于另外两个环境,所以出现这个问题。验证思路如下:查看spark-core的版本,进入到nodemanager节点的 /usr/hadoop3/spark2/jars 目录,spark-core是2.11版本,我们这里还使用了jodd工具包,解释下为什么我们在spark中使用这个包呢------

  1. 日期和时间处理:jodd-core-3.5.2提供了强大的日期和时间处理功能,可以帮助Spark更好地处理和操作与时间相关的数据。
  2. 缓存:jodd-core-3.5.2提供了一个缓存机制,可以帮助Spark更高效地缓存数据,从而提高数据处理的速度和效率。
  3. HTTP请求:jodd-core-3.5.2提供了一个简单的HTTP请求库,可以帮助Spark更好地与其他服务进行通信。
  4. 工具类:jodd-core-3.5.2还提供了一些其他的工具类和方法,例如文件操作、字符串处理等,这些工具类可以帮助Spark更好地处理数据和操作文件。

jodd-core-3.5.2这个jar包可以帮助Spark更好地处理和操作数据,提高数据处理的速度和效率,并且还可以帮助开发者更方便地进行开发。

就是这些原因。好,言归正传,然后我们把所有节点上的这个jodd都移动走,然后准备重新导入。

注意,如果你的jodd-core同时存在多个jar,也有可能报这个错。重点来了!!!我们正常环境确实有两个jodd-core jar包,一个是jodd-core 3.5.2, 一个是jodd-core 3.9.1 但是问题环境只有一个jodd-core 3.5.2,奇不奇怪??

解决办法肯定是将高版本的拷贝回来,保持和executor上一致。

但是依然报错,,查打印日志发现,实际运行时,没有检测到这个包,于是我们进入了提交spark程序的服务器 、data/project/dts-executor/plugins/sparkSQL目录,

和正常环境相比,少了个配置项,conf.spark.yarn.archive ,说明一下,算子加载的依赖包有两部分,一个是算子lib下的,另一个是spark客户端jars下的。没配置archive算子用的就是spark客户端下的jar包,配置archive,使用的是executor的lib。那就补上配置项。这样只有executor端本地有jar包,就不用去hdfs上找了。

最终,我们在nodemanager里放上了jodd 3.9.1的包,重跑成功。

全文完,讲的不清楚的地方多多包涵,文字功底有限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

{BOOLEAN}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值