복붙노트

[HADOOP] Hadoop 작업에 클래스가 없습니다.

HADOOP

Hadoop 작업에 클래스가 없습니다.

DocumentDB에서 입력을 가져 오는 map reduce 작업이 있습니다. jar 파일을 내 소스 코드의 lib 디렉토리 아래에 추가했으며 작업을 실행할 때 사용자에게 -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가 작동하는지 어떻게 확인할 수 있습니까?

추신. 2 노드 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

해결법

  1. ==============================

    1.여기서 찾을 수있는 DocumentDB Hadoop connector jar를 언급했다고 가정합니다 : https://github.com/Azure/azure-documentdb-hadoop

    여기서 찾을 수있는 DocumentDB Hadoop connector jar를 언급했다고 가정합니다 : https://github.com/Azure/azure-documentdb-hadoop

    항아리에는 종속성이 없습니다. 의존성을 검색하거나 직접 다운로드하여 직접 빌드 경로에 포함시킬 수 있습니다.

    종속성은 다음과 같습니다.

  2. ==============================

    2.HDInsight는 libjars를 지원하지 않는 템플턴을 사용하기 때문에 사용할 수 없습니다. 템플턴 워드 프로세서

    HDInsight는 libjars를 지원하지 않는 템플턴을 사용하기 때문에 사용할 수 없습니다. 템플턴 워드 프로세서

    또한 PowerShell 스크립트를 사용하여 사용자 정의 HDInsight 클러스터를 구축하고 있다고 가정합니다. 의존성이있는 모든 jar를 다음으로 복사 할 수 있습니다. HADOOP_HOME + '\ share \ hadoop \ common \ lib 이것은 hadoop lib 폴더 일 것입니다.

    또는 종속성 jar가 포함 된 경로를 변경하여 게시 된 powershell 스크립트를 직접 사용할 수 있습니다 (파란색 Blob에 jar 파일을 포함하고 경로를 바꾸기 만하면됩니다) 파워 쉘 스크립트

  3. from https://stackoverflow.com/questions/30447465/class-not-found-in-hadoop-job by cc-by-sa and MIT license