문제

데이터 흐름 관점에서 MapReduce와 HBase의 조합을 살펴보면 내 문제가 맞는 것 같습니다. 지도, 결합 및 축소하려는 큰 문서 세트가 있습니다. 이전의 SQL 구현은 작업을 배치 작업으로 분할하여 맵의 결과를 누적으로 저장 한 다음 해당 감소와 동등한 것을 수행하는 것이 었습니다. 이것은 실행 중 어느 시점에서든 (또는 실행 사이), 그 시점에서지도의 결과를 얻었다는 이점이있었습니다.

내가 이해하는 것처럼,이 작업을 MapReduce로 실행하려면 모든 맵 기능이 매번 실행해야합니다.

내 맵 함수 (및 실제로 모든 함수)는 항상 주어진 입력에 대해 동일한 출력을 제공합니다. 필요하지 않으면 출력을 다시 계산하는 데는 아무런 의미가 없습니다. 내 입력 (문서 세트)이 지속적으로 성장하고 있으며 데이터를 통해 주기적으로 MapReduce 작업을 실행합니다. 실행 사이에 새로 추가 된 문서의 맵 기능을 계산해야합니다.

내 데이터는 아마도 hbase-> mapreduce-> hbase 일 것입니다. Hadoop이 전체 생태계라는 점을 감안할 때, 주어진 기능이 주어진 신원이있는 행에 적용되었음을 알 수 있습니다. HBase 테이블에서 불변 항목을 가정합니다. / hadoop이 이것을 고려할 수 있습니까?

나는 문서 (특히 클로 데라 비디오)에서 (잠재적으로 중복되는 데이터의) 재 계산이 Hadoop이 사용하는 문제의 클래스를 지속하고 검색하는 것보다 빠를 수 있다는 것을 알게되었습니다.

의견 / 답변이 있습니까?

도움이 되었습니까?

해결책

매번 맵 단계를 실행하지 않으려는 경우 자체 단계로 나누고 (IdentityReducer를 사용하거나 작업의 감속기 수를 0으로 설정 함) 맵 단계의 출력을 사용하여 나중에 단계를 실행하십시오. .

매번 원시 데이터에서 재 계산하는 것보다 실제로 빠른지 여부는 입력 데이터의 볼륨과 모양에 따라 다릅니다. 출력 데이터, 맵 단계가 얼마나 복잡한 지 등.

새 데이터 세트에서 Mapper를 실행하면 이전 실행에 추가되지 않지만 날짜가있는 출력 폴더를 사용하여이를 해결할 수 있습니다. 이것은 첫 번째 파일 배치 매핑 출력을 저장할 수 있다고 말합니다. my_mapper_output/20091101, 그리고 다음 주 배치 my_mapper_output/20091108, 전체 세트에 걸쳐 줄이려면 전달할 수 있어야합니다. my_mapper_output 입력 폴더로서 모든 출력 세트를 잡습니다.

다른 팁

다른 환경에서 SQL 워크 플로우를 적용하지 않겠습니까? 즉, 입력 테이블에 "처리 된"열을 추가하십시오. 요약을 실행할 시간이 다가 오면 다음과 같은 것과 같은 파이프 라인을 실행하십시오.

MAP (MAP_FUNCTION) ON (입력 테이블이 필터링 된! Processed); HBASE 또는 간단히 HDFS에서 MAP_OUTPUT에 저장하십시오.

(map_outputs)에서 맵 (함수 감소); HBASE에 저장하십시오.

성공적인 요약 실행의 타임 스탬프 어딘가에 기록하고 마지막 성공적인 요약보다 나중에 날짜가 나오는 입력에 필터를 열면 삽입 날짜로 데이터를 저장한다고 가정하면 생명을 좀 더 쉽게 만들 수 있습니다. 상당한 스캔 시간을 절약하십시오.

다음은 한 회사가 워크 플로를 어떻게 건축했는지 보여주는 흥미로운 프레젠테이션입니다 (HBase를 사용하지는 않지만).http://www.scribd.com/doc/20971412/hadoop-world-production-dive-with-high-availability

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top