在Hadoop作业中找不到类

时间:2015-05-25 23:55:35

标签: hadoop mapreduce azure-cosmosdb

我有一个map reduce工作,它从DocumentDB获取输入。我已经在源代码中的lib目录下添加了jar文件,并在运行作业时使用-libjars。但我仍然得到jar文件中的类没有找到类的错误。这是我的驱动程序的一部分

public class MapReduceDriver extends Configured implements Tool  {

public static void main(String[] args) throws Exception {

    int res = ToolRunner.run(new Configuration(), new MapReduceDriver(), args);
    System.exit(res);

}



@Override
public int run(String[] args) throws Exception {

    Configuration conf =  this.getConf();
    ....

当使用-libjars时,我曾将所需的jar文件放在本地驱动程序上,一次放在hdfs上,但都没有工作。如何确保-libjars有效?

P.S。我正在使用双节点HDInsight群集(在Microsoft Azure中运行)。

以下是我收到的错误消息

 Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.microsoft.azure.documentdb.hadoop.DocumentDBInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1961)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getInputFormatClass(JobContextImpl.java:174)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:726)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1594)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
Caused by: java.lang.ClassNotFoundException: Class com.microsoft.azure.documentdb.hadoop.DocumentDBInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1867)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1959)
    ... 8 more

2 个答案:

答案 0 :(得分:1)

我假设你指的是这里找到的DocumentDB Hadoop连接器jar: https://github.com/Azure/azure-documentdb-hadoop

jar不包含依赖项。您可以让maven为您检索依赖项,也可以手动下载并自行包含在构建路径中。

以下是依赖项:

答案 1 :(得分:1)

HDInsight正在使用templton,它不支持libjars,所以你不能使用它 templton docs

此外,我假设您正在使用powershell脚本构建自定义HDInsight群集。 您可以将所有具有依赖关系的jar复制到 HADOOP_HOME +' \ share \ hadoop \ common \ lib 这将是hadoop lib文件夹。

或者您可以直接使用发布的powershell脚本更改包含依赖项jar的路径(将您的jar添加到azure blob包含并只替换路径) powershell script