hadoop命令加载包的顺序

本文讲述了在使用Hadoop过程中遇到的函数冲突问题及解决方法。主要原因是CLASSPATH中多个jar包包含相同函数,导致Hadoop执行时选取错误的函数版本。文章提供了检查与调整CLASSPATH顺序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天在搞hadoop的一个基础包,过程中搞的很头大,明明用-libjars传了,在job提交前总是提示出错,新修改的函数执行出错。不过最后还是解决了,这要从hadoop本身加载包里函数的顺序说起。

hadoop命令执行时,本地执行时(没有提交到jobtracker之前)要从CLASSPATH里加载jar包,并调用从CLASSPATH里jar包中的函数。在runjob之前,提交job的gateway上的代码就是从CLASSPATH的jar包里取的函数(提交之后,是在各个map/reduce节点上找jar包里对应的函数。)

这时就有个问题,如果多个包中有相同的函数(当然包括package也相同),那么hadoop程序会执行哪个?答案是:顺序执行。hadoop(应该是java)会拿第一个匹配到的函数来用,这样当有两个jar包里的package名相同,而且函数名相同时,就会用第一个。

-libjars只是把你用到的第3方包传到M/R的节点上(hadoop目录lib下的包不会上传,如果有自己的第3方包的话,要显式的用-libjars上传),从hadoop的源码里可以看出,当前目录的包是放在lib之后加载的,所以调试的时候,如果这个包之前在lib下的话,会一直用lib下的jar,导致新的函数无法使用。

用sh -x hadoop xxxx 可以看到hadoop的详细运行过程,通过查看CLASSPATH能看到jar包的装载顺序。

所以,如果什么时候发现自己的新jar里的函数在runjob前出错,就看hadoop中定义的CLASSPATH里是否有jar和你的package名和函数名重了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值