2010-02-25 2 views
33

Google은 개의 값을 가진 함수를 사용하여 여러 데이터를 분석 할 수 있습니다. 모든 Hadoop 하나의지도 및 다중 값 Reduce

같은 지도 기능에 의해 생성 된 동일한 데이터 세트에 알고리즘 작업을 줄일 수 있습니다. 대용량 데이터 집합을 읽는 데 너무 많은 비용이 필요할 때마다 한 번만 읽으면 에 매핑되고 데이터가으로 줄어 듭니다.

하둡으로이 작업을 수행 할 수 있습니까? 나는 예제와 intarweb을 찾았지만 어떤 해결책도 찾을 수 없었다.

답변

3

모든 감속기가 정확하게 동일한 매핑 된 데이터에서 작동 할 것으로 기대합니까? 그러나 적어도 감속기를 결정할 때 "키"는 달라야합니다.

mapper에서 여러 번 출력을 작성하고 키로 출력 할 수 있습니다. 여기서 $ i는 i 차감 장치 용이고 $ key는 원래 키입니다. 그리고 이러한 n 개의 레코드가 $ i를 기준으로 감속기에 분산되어 있는지 확인하기 위해 "Partitioner"를 추가해야합니다. 그런 다음 "GroupingComparator"를 사용하여 원본 $ 키별로 레코드를 그룹화합니다.

하나의 MR에서 그렇게 할 수는 있지만 사소한 것은 아닙니다.

+0

하지만'context.write()'메쏘드로 새로운 키를 출력에 추가하면'Mapper' 객체로부터 전송되는 데이터가 여러 배가됩니다. 파일 읽기 문제 만 해결할 수 있습니까? –

+0

그러면 매핑 된 데이터를 파일로 출력하고 다른 MR을 사용하여이 파일을 처리하도록 제안합니다. – Victor

0

물론 여러 개의 감속기를 정의 할 수 있습니다. Job (Hadoop 0.20)의 경우 다음을 추가하십시오.

job.setNumReduceTasks(<number>); 

그러나. 인프라는

  1. 에있는
  2. 그에 따라 mapred-site.xml의
에 mapred.tasktracker.reduce.tasks.maximum을 조정 가능한 두 개 이상의 CPU를 가지고 있음을 의미하는 여러 감속기를 지원해야

그리고 물론 당신의 직업은 일부 사양과 일치해야합니다. 당신이 정확하게 뭘 원하는지 모르고, 난 단지 다양한 팁 제공 할 수 있습니다 :

  • 이 %의 numreducers에 의해 파티션으로 하나가 키 지도 출력을 또는 당신은 당신의 자신의 파티션 프로그램 정의 할 수 있습니다 job.setPartitionerClass(...) 를 들어 랜덤 파티션 프로그램으로 예 ...
  • 데이터 감소-수 파티션 포맷 더 ...해야한다 (참조 필요?)

당신은 각 감속기 하나를 여러 개의 출력 파일을 얻을 수 있습니다. 정렬 된 출력을 원한다면 모든 파일 (이번에는 여러 개의 맵 작업 ...)을 읽는 다른 작업을 추가하고 하나의 감속기로 정렬하여 작성해야합니다 ...

Combiner- 클래스는 로컬 감속기입니다. 이는 맵에 의해 방출 된 부분 데이터보다 이미 메모리에 집계 (축소) 할 수 있음을 의미합니다. 아주 좋은 예는 WordCount-Example입니다. 지도는 각 단어를 키로 표시하고 개수는 1 : (단어, 1)로 표시합니다. Combiner는지도에서 부분 데이터를 가져 와서 (,)를 로컬에서 가져옵니다. Reducer는 똑같지 만, 이제 일부 (결합 된) 단어 수는 이미> 1입니다. 대역폭을 저장합니다.

+3

나는 말할 수있는 한 멀리있다; OP는 "여러 개의 감속기 구현"에 대해 묻고 있으며 "동일한 감속기 코드의 여러 인스턴스"에 대해 이야기하고 있습니다. 어떤 것이 완전히 다른 것입니다. –

11

단순한 해결책은 축소 기능이없는 작업을 작성하는 것일 수 있습니다. 따라서 모든 매핑 된 데이터를 작업 출력으로 직접 전달할 수 있습니다. 작업에 대한 감속기의 수를 0으로 설정하면됩니다.

그런 다음 해당 데이터에서 작동하는 각기 다른 축소 기능에 대한 작업을 작성합니다. 이것은 매핑 된 모든 데이터를 HDFS에 저장하는 것을 의미합니다.

또 다른 대안은 모든 축소 기능을 하나의 감속기로 결합하여 각기 다른 기능에 대해 다른 출력을 사용하여 여러 파일로 출력하는 것입니다. 다중 출력은 this article for hadoop 0.19에 나와 있습니다. 나는이 기능이 0.20.1과 함께 출시 된 새로운 mapreduce API에서 깨 졌음을 확신하지만 이전 mapred API에서도이 기능을 사용할 수 있습니다.

0

나는 아직도 당신이 다음과 같은 순서로 사용할 수 있습니다 문제를 얻을 해달라고 :

데이터베이스를 ->지도 -> 줄이기 (사용 고양이 또는 없음 요구 사항에 따라) 는 다음 추출한 데이터 표현을 저장합니다. 메모리에 들어갈만큼 작기 때문에 디스크에 저장하면 문제가되지 않습니다.

또한 주어진 문제에 대한 MapReduce 패러다임의 사용은 올바르지 않습니다. 단일 맵 기능과 여러 "다른"축소 기능을 사용하면 의미가 없습니다.지도를 사용하여 다른 컴퓨터로 데이터를 전달한다는 것을 보여줍니다 다른 것들. 당신은 hadoop이나 다른 특별한 아키텍처를 요구하지 않습니다.

+0

맵 축소는 여러 시스템을 사용하여 단일 프로세스를 더 빠르게 수행하는 패러다임이지만 동일한 데이터를 사용하여 다른 작업을 수행하면 맵 축소가 발생하지 않습니다. 또한 단일 맵 및 다중 축소는 의미가 없습니다. map1-> reduce1-> map2 (작업 수행) -> reduce2를 사용하면됩니다. map2는 데이터의 여러 분할에서 단일 기능을 수행해야합니다. –

3

복합 키를 사용할 수 있습니다. 여러분이 두 종류의 감속기 'R1'과 'R2'를 필요로한다고 가정 해 봅시다. 이러한 ID를 매퍼의 o/p 키에 접두어로 추가하십시오. 따라서 매퍼에서 키 'K'는 이제 'R1 : K'또는 'R2 : K'가됩니다.

그런 다음 감속기에서 값을 프리픽스에 따라 R1 또는 R2 구현에 전달합니다.

1

체인에서 다른 감속기를 실행하고 싶습니다. hadoop에서 '다중 감속기'는 같은 감속기의 여러 인스턴스를 실행하는 것을 의미합니다. 한 번에 하나의 감속기를 달아서 첫 번째 감속기를 제외한 모든 감속기를위한 간단한지도 기능을 제공 할 것을 제안합니다. 데이터 전송 시간을 최소화하기 위해 압축을 사용할 수 있습니다.

관련 문제