2009-11-07 6 views
2

데이터 흐름의 관점에서 MapReduce와 HBase의 조합을 보면 제 문제가 적합하다고 보입니다. 지도, 결합 및 축소하려는 많은 문서 집합이 있습니다. 필자가 이전에 사용한 SQL 구현은 작업을 일괄 작업으로 분할하여 Map의 결과가 될 테이블을 누적 적으로 저장 한 다음 그와 동일한 작업을 수행하는 것이 었습니다. 이것은 실행 중 (또는 실행 사이의) 어느 시점에서나 그 시점에서 Map의 결과를 얻는 이점이있었습니다.Hadoop MapReduce에서지도 애플리케이션 캐싱?

이 작업을 MapReduce로 실행하면 매번 Map 함수가 모두 실행되어야합니다.

내지도 함수 (실제로 모든 함수)는 항상 주어진 입력에 대해 동일한 출력을 제공합니다. 필연적으로 출력을 다시 계산할 필요가 없습니다. 필자의 입력 (문서 세트)은 지속적으로 증가 할 것이며 MapReduce 작업을 데이터를 통해 주기적으로 실행할 것입니다. 실행 사이에 새로 추가 된 문서의 Map 함수를 계산해야합니다.

내 데이터는 아마도 HBase -> MapReduce -> HBase 일 것입니다. Hadoop이 전체 생태계라는 점을 감안할 때 주어진 함수가 주어진 ID로 행에 적용되었음을 알 수 있습니다. HBase 테이블에 변경 불가능한 항목이 있다고 가정합니다. Hadoop이 이것을 고려할 수 있습니까?

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

모든 댓글/답변?

답변

1

당신은지도마다 단계 실행 방지로 탈옥을 찾고 있다면 그 (IdentityReducer를 사용하거나 작업에 대한 감속기 수를 0으로 설정하여) 자신의 단계를 수행하고 맵 단계의 출력을 사용하여 이후 단계를 실행하십시오.

이 등, 실제로 빠른 때마다지도 단계가 얼마나 복잡 볼륨과 모양 입력 데이터의 대 출력 데이터에 의존 원시 데이터에서 재 계산보다는 실행중인 것을

주입니다 여부 새 데이터 세트의 매퍼는 이전 실행에 추가되지 않지만 데이트 된 출력 폴더를 사용하여이 문제를 해결할 수 있습니다. 즉, 첫 번째 파일 배치를 my_mapper_output/20091101에 매핑하고 다음 주 배치를 my_mapper_output/20091108에 저장할 수 있습니다. 전체 세트를 줄이려면 my_mapper_output을 다음과 같이 전달할 수 있습니다. 입력 폴더를 만들고 모든 출력 세트를 포착하십시오.

1

다른 환경에서 SQL 워크 플로를 적용하지 않는 이유는 무엇입니까? 의미, "처리 된"열을 입력 테이블에 추가하십시오. 요약을 실행하는 데 시간이되면 다음과 같은 형식의 파이프 라인을 실행하십시오.

map (map_function) on (입력 된 테이블은 처리되었습니다!); hbase 또는 단순히 hdfs에서 map_outputs에 저장하십시오.

지도 (축소 기능) 켜기 (map_outputs); hbase에 저장하십시오.

성공적인 요약 실행의 타임 스탬프를 기록하고 마지막 성공 요약보다 늦은 날짜의 입력에 필터를 열면 Hbase에 데이터를 삽입 날짜별로 저장한다고 가정하면 좀 더 쉽게 작업 할 수 있습니다. - 중요한 스캔 시간을 절약 할 수 있습니다.

여기 (그들은 HBase를 사용하지 않지만) 한 회사가 자신의 워크 플로우를 구조화하는 방법을 보여줍니다 흥미로운 프리젠 테이션입니다 : http://www.scribd.com/doc/20971412/Hadoop-World-Production-Deep-Dive-with-High-Availability

+0

HBase를 사용할 수있는 스키마가 어떤 종류인지 확실하지 않지만 Key가 고유 한 Key => Value라고 항상 생각했습니다. 동일한 키를 가진 많은 결과물을 가질 수 있다는 점을 감안할 때, 중간 구조의 출력 (맵 함수로부터)이이 구조에 적합할까요? 또한 귀하의 제안은 하나의 실행 결과를 이전 실행 결과와 병합하는 것을 의미한다고 생각합니다. 이것이 가능한가? 먼저 대상 (FS 디렉토리 또는 BigTable 테이블)을 비우는 MR 실행의 출력을 가정 했습니까? – Joe

+0

HBase는 행과 열을 지원합니다. RDBMS와의 차이점은 트랜잭션이 행 전체에서 사용 가능하지 않다는 것입니다 (단, 동일한 행의 다른 열에 대한 업데이트시 산을 사용할 수 있음). 열은 희소합니다. 많은 열을 가질 수 있으며 다른 행은 다른 열을가집니다. 일반 MR에서는 추가가 불가능합니다 (HDFS 문제).하지만 HBase를 사용하면 테이블에 행을 추가 할 수 있으므로 작동해야합니다. – SquareCog