가끔 내 MR 업무가 MyMapper 클래스를 찾을 수 없다는 불만을 나타냅니다. 그리고 나는 그 일을해야합니다 .setJarByClass (MyMapper.class); 내 jar 파일에서로드하도록 지시합니다.매퍼 클래스가 없습니다.
클라우 데라의 @의 클라우 데라-VM :/tmp를/번역기 $ 하둡 항아리 MapReduceJobs.jar 번역기 13/06/13 3시 36분 57초이 mapred.JobClient 경고/입/Portuguese.txt 번역기/출력 : 없음 작업 jar 파일 세트. 사용자 클래스를 찾을 수 없습니다. JobConf (Class) 또는 JobConf # setJar (String)을 참조하십시오. 13/06/13 03:36:57 INFO input.FileInputFormat : 처리 할 총 입력 경로 : 1 13/06/13 03:36:57 INFO mapred.JobClient : 실행중인 작업 : job_201305100422_0043 13/06/13 03 : 36 : 58 정보 mapred.JobClient : map 0 % reduce 0 % 13/06/13 03:37:03 INFO mapred.JobClient : 작업 ID : 시도 _201305100422_0043_m_000000_0, 상태 : FAILED java.lang.RuntimeException : java.lang. ClassNotFoundException : com.mapreduce.variousformats.keyvaluetextinputformat.MyMapper at org.apache.hadoop.conf.Configuration.getClass (Configuration.java:996) at org.apache.hadoop.mapreduce.JobContext.getMapperClass (JobContext.java:212)) at org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java:601)
질문 : 왜 그런 일이 발생합니까? 왜 내 항아리 파일에서로드하는지 항상 알려주지 않습니다. 이러한 종류의 문제를 해결하기위한 모범 사례가 있습니까? 또한 일부 제 3 자 라이브러리를 사용하는 경우, 내가 그들을 위해 이렇게해야합니다. 합니다 (예) 현재와 lib
디렉토리에서 모든 항아리 종속성을 추가하려면 다음
사용 :
죄송하지만 기계 액세스 권한이 없습니다. hadoop jar -libjars'echo ./lib/*.jar | " 내 jar 파일 안에 모든 외부 jar 파일을 묶는 중이라면 여전히 job.setJarByClass를 사용해야합니다. 그렇지 않으면 hadoop이 그것을 처리합니다. –