我正在尝试将外部 jar 设置为 hadoop 类路径,但到目前为止还没有运气。
我有以下设置
$ hadoop version
Hadoop 2.0.6-alpha Subversion https://git-wip-us.apache.org/repos/asf/bigtop.git -r ca4c88898f95aaab3fd85b5e9c194ffd647c2109 由 jenkins 于 2013-10-31T07:55Z 从源代码编译,校验和为 95e88b2a95d48dcdbd此命令是使用 /usr/lib/hadoop/hadoop-common-2.0.6-alpha.jar 运行的
类路径
$ echo $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/.//
命令
$ sudo hadoop jar FlightsByCarrier.jar FlightsByCarrier /user/root/1987.csv /user/root/result
我也尝试了 -libjars 选项
$ sudo hadoop jar FlightsByCarrier.jar FlightsByCarrier /user/root/1987.csv /user/root/result -libjars /home/tom/workspace/libs/opencsv-2.3.jar
堆栈跟踪
2004 年 14 月 11 日 16:43:23 信息 mapreduce.Job:运行作业:job_1415115532989_0001 14/11/04 16:43:55 信息 mapreduce.Job:作业 job_1415115532989_0001 在 uber 模式下运行:假 14/11/04 16:43 :56 INFO mapreduce.Job: map 0% reduce 0% 14/11/04 16:45:27 INFO mapreduce.Job: map 50% reduce 0% 14/11/04 16:45:27 INFO mapreduce.Job: 任务ID:尝试_1415115532989_0001_m_000001_0,状态:失败错误:java.lang。ClassNotFoundException: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(Native Method) 在 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) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild .java:158) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:第1478章)
非常感谢任何帮助。