복붙노트

[HADOOP] Hadoop 분산 캐시에서 파일 재사용

HADOOP

Hadoop 분산 캐시에서 파일 재사용

Hadoop에서 분산 캐시가 어떻게 작동하는지 설명 할 수 있는지 궁금합니다. 저는 여러 번 작업을 실행하고 각 실행 후에 각 노드의 로컬 분산 캐시 폴더 크기가 커짐을 확인합니다.

여러 작업이 분산 캐시에서 동일한 파일을 다시 사용할 수있는 방법이 있습니까? 분산 캐시는 개별 작업의 수명 동안 만 유효합니까?

혼란스러워하는 이유는 Hadoop 설명서에서 "DistributedCache가 캐시 파일의 수정 타임 스탬프를 추적합니다"라고 언급했기 때문에 타임 스탬프가 변경되지 않은 경우 다시 캐싱하거나 다시 호출 할 필요가 없다고 생각합니다. - 파일을 노드에 복사하십시오.

분산 캐시에 파일을 성공적으로 추가하는 방법은 다음과 같습니다.

DistributedCache.addFileToClassPath(hdfsPath, conf);

해결법

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

    1.DistributedCache는 참조 카운팅을 사용하여 캐시를 관리합니다. org.apache.hadoop.filecache.TrackerDistributedCacheManager.CleanupThread는 참조 카운트가 0 인 CacheDirs를 정리합니다. 매분마다 점검합니다 (기본 기간은 1 분, "mapreduce.tasktracker.distributedcache.checkperiod"로 설정할 수 있습니다). ").

    DistributedCache는 참조 카운팅을 사용하여 캐시를 관리합니다. org.apache.hadoop.filecache.TrackerDistributedCacheManager.CleanupThread는 참조 카운트가 0 인 CacheDirs를 정리합니다. 매분마다 점검합니다 (기본 기간은 1 분, "mapreduce.tasktracker.distributedcache.checkperiod"로 설정할 수 있습니다). ").

    작업이 완료되거나 실패하면 JobTracker는 TaskTrackers에 org.apache.hadoop.mapred.KillJobAction을 보냅니다. 그런 다음 TaskTracker가 KillJobAction을 받으면 actionsToCleanup에 작업을 넣습니다. TaskTracker에는 tasksToCleanup에서 작업을 가져와 정리 작업을 수행하는 taskCleanupThread라는 배경 스레드가 있습니다. KillJobAction의 경우 작업을 정리하기 위해 purgeJob을 호출합니다. 이 방법에서는이 작업 (rjob.distCacheMgr.release ();)에서 사용하는 참조 횟수를 줄입니다.

    위의 분석은 hadoop-core-2.0.0-mr1-cdh4.2.1-sources.jar을 기반으로합니다. 나는 또한 hadoop-core-0.20.2-cdh3u1-sources.jar를 확인했으며이 두 버전 사이에 큰 차이점이 있음을 발견했다. 예를 들어, 0.20.2-cdh3u1에는 org.apache.hadoop.filecache.TrackerDistributedCacheManager.CleanupThread가 없습니다. 작업을 초기화 할 때 TrackerDistributedCacheManager는이 작업에 대해 새 캐시 파일을 넣을 공간이 충분한 지 확인합니다. 그렇지 않은 경우 0 참조 카운트를 가진 캐시를 삭제합니다.

    cdh4.2.1을 사용하는 경우 정리 작업을 지연 시키려면 "mapreduce.tasktracker.distributedcache.checkperiod"를 늘릴 수 있습니다. 그런 다음 여러 Job이 동일한 분산 캐시를 사용할 확률이 높아집니다.

    cdh3u1을 사용하는 경우 캐시 크기 ( "local.cache.size", 기본값은 10G)와 캐시의 최대 디렉토리 ( "mapreduce.tasktracker.cache.local.numberdirectories", 기본값은 10000입니다. ). 이는 cdh4.2.1에도 적용 할 수 있습니다.

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

    2.이 책의 내용을 면밀히 살펴보면 분산 캐시에 저장할 수있는 것의 한계가 있다는 것입니다. 기본적으로 10GB (구성 가능)입니다. 여러 개의 다른 작업이 동시에 클러스터에서 실행될 수 있습니다. 또한 Hadoop은 파일이 캐시의 파일에 액세스하는 여러 작업에 대해 tasktracker가 수행 한 참조 횟수에 의해 유지되므로 파일이 단일 작업의 캐시에서 사용 가능한 상태를 유지하도록 보장합니다. 귀하의 경우, 후속 작업의 경우 파일이 이미 삭제 표시되었으므로 파일이 없을 수 있습니다.

    이 책의 내용을 면밀히 살펴보면 분산 캐시에 저장할 수있는 것의 한계가 있다는 것입니다. 기본적으로 10GB (구성 가능)입니다. 여러 개의 다른 작업이 동시에 클러스터에서 실행될 수 있습니다. 또한 Hadoop은 파일이 캐시의 파일에 액세스하는 여러 작업에 대해 tasktracker가 수행 한 참조 횟수에 의해 유지되므로 파일이 단일 작업의 캐시에서 사용 가능한 상태를 유지하도록 보장합니다. 귀하의 경우, 후속 작업의 경우 파일이 이미 삭제 표시되었으므로 파일이 없을 수 있습니다.

    당신이 어디서나 동의하지 않으면 나를 바로 잡으십시오. 나는 이것을 더 논의하게되어 기쁘다.

  3. ==============================

    3.이것에 따르면 : http://www.datasalt.com/2011/05/handling-dependencies-and-configuration-in-java-hadoop-projects-efficiently/

    이것에 따르면 : http://www.datasalt.com/2011/05/handling-dependencies-and-configuration-in-java-hadoop-projects-efficiently/

    "-libjars"대신에 DistributedCache API를 통해이 작업을 수행 할 수 있어야합니다.

  4. from https://stackoverflow.com/questions/18538280/re-use-files-in-hadoop-distributed-cache by cc-by-sa and MIT license