복붙노트

[HADOOP] Hadoop Map의 상위 N 개 값 코드 줄이기

HADOOP

Hadoop Map의 상위 N 개 값 코드 줄이기

나는 아주 새로운 세계에서 하나의 간단한 일을 성취하기 위해 고심하고 있습니다.

아무도지도를 줄이는 코드 기술만을 사용하여 단어 수에 대한 상위 n 개의 값을 얻는 방법을 알려주실 수 있습니까?

이 간단한 작업에 hadoop 명령을 사용하고 싶지 않습니다.

해결법

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

    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
    

    결과의 일부만 후 처리하므로이 속도가 빨라야합니다.

    이것은 내가 이것을 할 수있는 가장 빠른 방법이지만, 아마도 그럴만 한 가치가 없을 것입니다.

  2. from https://stackoverflow.com/questions/20583211/top-n-values-by-hadoop-map-reduce-code by cc-by-sa and MIT license