如何在hadoop classpath中添加第三方jar?

时间:2019-06-04 15:42:59

标签: mapreduce hadoop2 cloudera-cdh

我想添加一个第三方jar,其地图还原作业中使用了它们的方法。 我只想将我的第三方jar添加到hadoop类路径中,并确保它将被使用。

我不想做的事情: 1)使用分布式缓存 2)使用脂肪罐

我所做的事情: 1)在安装hadoop的某个位置添加了jar,在我的yarn-site.xml中提供了该路径,如下所示,它使用了该路径,但无法在该jar中找到该类,因为我打印了显示该jar的类路径(但不使用它。)

<property>
    <name>yarn.application.classpath</name>
    <value>/home/user/lib/myjarname.jar, $HADOOP_CLIENT_CONF_DIR,$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*</value>
  </property>
org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoClassDefFoundError: com/companyName/lib/MyClassName
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:2442)
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2407)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2503)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:187)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:759)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
Caused by: java.lang.ClassNotFoundException: com.companyName.lib.MyClassName
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 13 more

0 个答案:

没有答案