我正在尝试将外部 jar 设置为 hadoop 类路径,但到目前为止还没有运气。
我有以下设置
$hadoop 版本
Hadoop 2.0.6-alpha
颠覆https://git-wip-us.apache.org/repos/asf/bigtop.git-r ca4c88898f95aaab3fd85b5e9c194ffd647c2109
由 jenkins 于 2013-10-31T07:55Z 编译
来自带有校验和 95e88b2a9589fa69d6d5c1dbd48d4e 的源
此命令是使用 /usr/lib/hadoop/hadoop-common-2.0.6-alpha.jar 运行的
类路径
$回显$HADOOP_CLASSPATH
/home/tom/workspace/libs/opencsv-2.3.jar
我可以看到上面的 HADOOP_CLASSPATH 已被 hadoop 拾取
$ hadoop 类路径
/etc/hadoop/conf:/usr/lib/hadoop/lib/:/usr/lib/hadoop/.//:/home/tom/workspace/libs/opencsv-2.3.jar:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/:/usr/lib/hadoop-hdfs/.//:/usr/lib/hadoop-yarn/lib/:/usr/lib/hadoop-yarn/.//:/usr/lib/hadoop-mapreduce/lib/:/usr/lib/hadoop-mapreduce/.//
Command
$ 须藤 hadoop 罐子FlightsByCarrier.jar FlightsByCarrier /user/root/1987.csv /user/root/result
我也尝试使用 -libjars 选项
$ 须藤 hadoop 罐子FlightsByCarrier.jar FlightsByCarrier /user/root/1987.csv /user/root/result-libjars/home/tom/workspace/libs/opencsv-2.3.jar
堆栈跟踪
2004 年 11 月 14 日 16:43:23 信息 mapreduce.Job:正在运行的作业:job_1415115532989_0001
2004 年 14 月 11 日 16:43:55 信息 mapreduce.Job:作业 job_1415115532989_0001 在 uber 模式下运行: false
2004 年 11 月 14 日 16:43:56 信息 mapreduce.Job:映射 0% 减少 0%
14/11/04 16:45:27 INFO mapreduce.Job:映射 50% 减少 0%
2004 年 11 月 14 日 16:45:27 信息 mapreduce.Job:任务 ID:attempt_1415115532989_0001_m_000001_0,状态:失败
错误:java.lang。类未找到异常:au.com.bytecode.opencsv。CSV解析器在 java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在 java.net.URLClassLoader$1.run(URLClassLoader.java:355)
在 java.security.AccessController.doPrivileged(本机方法)
在 java.net.URLClassLoader.findClass(URLClassLoader.java:354)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:425)
在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
在 FlightsByCarrierMapper.map(FlightsByCarrierMapper.java:19)
在 FlightsByCarrierMapper.map(FlightsByCarrierMapper.java:10)
在 org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:757)
在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
在 org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:158)
在 java.security.AccessController.doPrivileged(本机方法)
在 javax.security.auth.Subject.doAs(Subject.java:415)
在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1478)
在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:153)
非常感谢任何帮助。
运行地图的节点上缺少您的外部 jar。您必须将其添加到缓存中才能使其可用。尝试 :
DistributedCache.addFileToClassPath(new Path("pathToJar"), conf);
不确定是哪个版本DistributedCache
已弃用,但从 Hadoop 2.2.0 开始,您可以使用:
job.addFileToClassPath(new Path("pathToJar"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)