[HADOOP] Hadoop Map의 상위 N 개 값 코드 줄이기
HADOOPHadoop Map의 상위 N 개 값 코드 줄이기
나는 아주 새로운 세계에서 하나의 간단한 일을 성취하기 위해 고심하고 있습니다.
아무도지도를 줄이는 코드 기술만을 사용하여 단어 수에 대한 상위 n 개의 값을 얻는 방법을 알려주실 수 있습니까?
이 간단한 작업에 hadoop 명령을 사용하고 싶지 않습니다.
해결법
-
==============================
1.두 가지 확실한 옵션이 있습니다.
두 가지 확실한 옵션이 있습니다.
MapReduce 작업이 두 개 있습니다.
WordCount의 출력을 HDFS에 기록하십시오. 그런 다음 TopN에서 해당 출력을 읽도록하십시오. 이를 작업 체인 (job chaining)이라고하며이 문제를 해결할 수있는 여러 가지 방법이 있습니다 : oozie, bash 스크립트, 드라이버에서 두 가지 작업 시작하기 등.
두 가지 작업이 필요한 이유는 단어 수와 두 번째 집계가 두 가지 집계를 수행하고 있기 때문입니다. 일반적으로 MapReduce에서 각 집계에는 자체 MapReduce 작업이 필요합니다.
먼저 데이터에서 WordCount 작업을 실행하십시오. 그런 다음, bash를 사용하여 상단 N을 당깁니다.
hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n20
sort -n -k2 -r은 "열 # 2로 숫자순으로 내림차순으로 정렬"이라고 말합니다. head -n20이 상위 20 개를 가져옵니다.
WordCount는 수천 또는 수만 줄의 순서로만 출력되므로 MapReduce 작업이 필요하지 않기 때문에 WordCount의 더 나은 옵션입니다. 주변에 숨은 것이 라면서 Hadoop의 모든 문제를 해결해야한다는 것을 의미하지는 않습니다.
하나의 비 명백한 버전은 위의 두 가지가 섞여 있지만 까다 롭습니다.
WordCount MapReduce 작업을 작성하십시오.하지만 Reducer에서 이전에 보여준 TopN MapReduce 작업과 유사한 작업을 수행하십시오. 그런 다음 각 감속기에 해당 감속기의 TopN 결과 만 출력하십시오.
따라서 Top 10을 수행하는 경우 각 감속기는 10 개의 결과를 출력합니다. 30 개의 감속기가 있다고 가정 해보면 300 개의 결과가 출력됩니다.
그런 다음 옵션 # 2에서와 동일한 작업을 bash로 수행하십시오.
hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n10
결과의 일부만 후 처리하므로이 속도가 빨라야합니다.
이것은 내가 이것을 할 수있는 가장 빠른 방법이지만, 아마도 그럴만 한 가치가 없을 것입니다.
from https://stackoverflow.com/questions/20583211/top-n-values-by-hadoop-map-reduce-code by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop - 복합 키 (0) | 2019.06.07 |
---|---|
[HADOOP] Hadoop : Jps 명령을 사용할 수 없습니다. (0) | 2019.06.07 |
[HADOOP] 지도에서 중간 값 계산 (0) | 2019.06.07 |
[HADOOP] 하이브 테이블에 데이터 삽입 (0) | 2019.06.06 |
[HADOOP] 쪽모이 세공 형식의 스키마 진화 (0) | 2019.06.06 |