2015-01-01 1 views
0

툴 인터페이스를 구현하는 응용 프로그램에서 맵 축소 작업을 시작하려고합니다. 응용 프로그램은지도 축소 작업의 전제 조건과 같은 몇 가지 다른 작업을 수행합니다.맵 축소 작업을 시작하는 코드의 클래스 경로에 jar 파일 추가

이 클래스 명령을 사용하여 항아리를 실행하는 동안 내가 클래스 패스에 그 항아리를 추가하려면 어떻게, 어떤 타사 libs와 사용 하둡 항아리 <가 myjar>이 Cloudera's post에서

내가 HADOOP_CLASSPATH을 설정하려고 [인수] env var를 제 3 자 항아리에 전달했지만 효과가 없었습니다. 위에서 언급 한 제 3 자 jar는 Mapper/Reducer 클래스가 아닌 작업을 시작하는 클래스에서만 필요합니다. 분산 캐시에 넣을 필요가 없습니다.

$ HADOOP_HOME/lib 아래에 필요한 타사 jar 파일을 복사하면 작동하지만 깨끗한 해결책이 필요합니다.

감사합니다.

주 - 모든 타사 jar 파일을 my-map-reduce-job.jar 항아리의 lib 디렉토리에 넣는 것이 효과적 일지는 몰라도 그 자유가 없으며 항아리는 Maven을 사용하여 만들어지기를 원합니다. map-reduce-job.jar 외부에있는 제 3 자 jw

+0

이렇게하면 mapred를 호출하려고합니다. 그렇지 않아? 또는 hadoop fs -ls를 시도해도 예외가 발생합니까? – SMA

+0

hadoop -fs 명령에 대한 예외가 발생하지 않습니다. 스레드 "main"의 예외 java.lang.NoClassDefFoundError 타사 jar에있는 클래스에 대한 예외입니다. 감사합니다. – Niks

+0

예. 그렇다면 모든 맵핑 된 프로세스에 해당 타사 jar도 필요합니다. 따라서 다중 노드 클러스터를 가지고 있다면 다른 시스템에도이 jar를 배포해야합니다. – SMA

답변

2

나중에 참조 용으로 -env var HADOOP_CLASSPATH를 설정하면 맵 축소 작업을 시작하는 클라이언트 시스템 fron에 HADOOP_CLASSPATH가 표시됩니다.

내 실수를 알아 냈습니다. 잘못된 방법으로 HADOOP_CLASSPATH를 내보내고있었습니다./경로 /로는/내/jar2 다음 하둡 항아리 [mainClass : 항아리 사이 구분자는 플랫폼에 의존, 유닉스, 그 콜론 (:)

수출 HADOOP_CLASSPATH =/경로 /로/내/jar1입니다 ] [args]

미리 정의 된 HADOOP_CLASSPATH env var에 항아리를 추가 할 수 있습니다. export HADOOP_CLASSPATH = $ HADOOP_CLASSPATH :/path/to/my/jar1 :/path/to/my/jar2