2012-04-13 3 views
0

저는 Hadoop을 처음 사용합니다. Hadoop 0.22를 사용하고 있습니다. 내가 로컬 클래스 경로에 항아리를 추가하는 데 사용할 무슨 코드 맵 클래스에서Hadoop 분산 캐시가 작동하지 않습니다.

Job job = Job.getInstance(configuration); 
    ... 
    job.addArchiveToClassPath(new Path(JAR_DIR); 
    ... 

: 드라이버에서 이 코드를 I'used?

자세한 내용

내가지도에 필요 단계를 줄이기 위의 코드와 클래스 패스에이 항아리를 추가 htmlunit.jar.I,하지만 작업을 제출할 때, 나는 라인에서의 ClassNotFoundException이 직업이 위의 코드가 괜찮다면 DistributedCache가 자동으로 tasktrackers 클래스 패스에 항아리를 추가합니다. 문제는 무엇입니까? 작업을 제출할 때 -libjars htmlunit.jar 옵션을 사용해야합니다? 다른 hadoop 구성 요소를 사용해야합니까?

+0

다음 링크를 사용해보십시오. [link] http://hadoop.apache.org/common/docs/r0.20.0/api/org/apache/hadoop/filecache/DistributedCache.html. 방해 캐시를 사용하는 방법에 대한 예제를 제공합니다. 또한, 당신은 질문을 정교하게 만들 수 있습니까? –

+0

귀하의 질문은 무엇입니까? "일하지 마세요"보다 더 자세한 내용을 제시하지 않으면 도움이되지 않습니다. –

답변

0

아무 것도 할 필요가 없습니다. 당신이 무슨 말을하는지 작업 클래스 패스에 항아리를 추가하면

는 "지도의 클래스 경로에서이 포함 일자리 감소"당신의 맵퍼로 너무 오래

입니다 그리고 감속기는 매퍼 (Mapper) 및 감속기 (Reducer) 기본 클래스에서 확장되어 '작동합니다'.

주목할만한 점은, 필요한 각 개별 Jar에 대해 addFileToClassPath를 사용해야한다는 것입니다.

대체 방법 (우리가 수행)은 소스와 의존성을 포함하는 단일 항아리를 만드는 것입니다.

평소와 같이 코드 jar를 만든 다음 'lib'라는 jar 파일에 하위 디렉토리를 만들고 여기에 모든 종속성 jar 파일을 추가하십시오. 그런 다음 전체 작업이 자체적으로 포함되므로 분산 캐시에 다른 jar를 추가하는 것에 대해 걱정할 필요가 없습니다.

그래서 예를 들어 다음과 같은 내용으로 병이있을 것이다 :

/com/example/Something.class 
/com/example/SomethingElse.class 
/lib/dependency.jar 
/lib/dependency2.jar 

(항아리 그냥 zip 파일, 그래서 당신이 그것을 구축하기 위해 일반 우편 작성 유틸리티를 사용할 수 있습니다)

여러가지 이유 때문에 이것은 의존성의 .class 파일을 항아리에 직접 추가하는 것보다 효과적입니다.

관련 문제