这几天在搞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名和函数名重了。
分享到:
相关推荐
hadoop命令大全hadoop命令大全hadoop命令大全hadoop命令大全hadoop命令大全
hadoop 命令大全
Hadoop命令手册,总结了hadoop常用的hadoop指令,是初学者入门很好的工具书。
熟悉haoop命令,让云计算更上一步 所有的hadoop命令均由bin/hadoop脚本引发。不指定参数运行hadoop脚本会打印所有命令的描述。
适合Hadoop初学者安装Hadoop
有时候在eclipse上运行项目,需要引用的Hadoop的jar包,也就是hadoop的外部依赖包,有conf,fs,io,mapreduce等等,这里列举了一部分,基本上hadoop的所有外部依赖jar包都包含在内了,如果下载了不会使用,可以看我...
分布式文件系统软件,Hadoop的命名使用手册,官方简体中文版
完整的Hadoop jar包,解压直接用。
Hadoop工具包 Hadoop工具包 Hadoop工具包 Hadoop工具包 Hadoop工具包
hadoop的jar包,已经经Linux系统编译过的,下载后直接解压就可以用
hadoop 3.3.2源码包
hadoop的相关包导入eclipse中 编译程序使文档上传到hdfs本地文件
Hadoop常用命令 Hadoop常用命令 Hadoop常用命令
涵盖所有Hadoop所需要的jar包,希望对大家有帮助!
Hadoop命令的研究 深入讲解了 Hadoop下面各个命令的详细使用方法,是Hadoop管理人员的一本好书
java项目Hadoop依赖包,包含MapReduce、hdfs。
docker部署hadoop资源包.txtdocker部署hadoop资源包.txtdocker部署hadoop资源包.txtdocker部署hadoop资源包.txtdocker部署hadoop资源包.txtdocker部署hadoop资源包.txtdocker部署hadoop资源包.txtdocker部署hadoop...
该压缩包是在官方包的基础上进行修改的,将Windows运行hadoop所需配置文件和部分插件已经导入,电脑只需安装64位java环境,修改hadoop-env.cmd配置即可使用
winutils windows hadoop 工具 模拟执行linux的几个命令用的。添加到 hadoop-2.2.0\bin下面就行了。