>백엔드 개발 >파이썬 튜토리얼 >Python 개발 MapReduce 시리즈 WordCount 데모

Python 개발 MapReduce 시리즈 WordCount 데모

ringa_lee
ringa_lee원래의
2017-09-17 09:28:381781검색

우리는 MapReduce가 코끼리 Hadoop의 핵심이라는 것을 알고 있습니다. Hadoop에서 데이터 처리의 핵심은 MapReduce 프로그래밍 모델입니다. Map/Reduce는 일반적으로 입력 데이터 세트를 여러 개의 독립적인 데이터 블록으로 분할하며, 이는 맵 작업(작업)에 의해 완전히 병렬 방식으로 처리됩니다. 프레임워크는 먼저 맵의 출력을 정렬한 다음 결과를 reduce 작업에 입력합니다. 일반적으로 작업의 입력 및 출력은 파일 시스템에 저장됩니다. 따라서 우리 프로그래밍 센터는 주로 매퍼 단계와 리듀서 단계입니다.

MapReduce 프로그램을 처음부터 개발하고 Hadoop 클러스터에서 실행해 보겠습니다.
mapper 코드 map.py:

 import sys    
    for line in sys.stdin:
        word_list = line.strip().split(' ')    
        for word in word_list:            print '\t'.join([word.strip(), str(1)])


코드 보기

reducer 코드 Reduce.py:

 import sys
    
    cur_word = None
    sum = 0    
    for line in sys.stdin:
        ss = line.strip().split('\t')        
        if len(ss) < 2:            continue
    
        word = ss[0].strip()
        count = ss[1].strip()    
        if cur_word == None:
            cur_word = word    
        if cur_word != word:            print &#39;\t&#39;.join([cur_word, str(sum)])
            cur_word = word
            sum = 0
        
        sum += int(count)    
    print &#39;\t&#39;.join([cur_word, str(sum)])
    sum = 0


코드 보기

리소스 파일 src.txt(테스트용, 클러스터에서 실행용) hdfs에 업로드하는 것을 잊지 마세요):

hello    
    ni hao ni haoni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ao ni haoni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni haoao ni haoni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao ni hao
    Dad would get out his mandolin and play for the family
    Dad loved to play the mandolin for his family he knew we enjoyed singing
    I had to mature into a man and have children of my own before I realized how much he had sacrificed
    I had to,mature into a man and,have children of my own before.I realized how much he had sacrificed

코드 보기

먼저 로컬에서 디버그하여 결과가 올바른지 확인하고 다음 명령을 입력하십시오.

cat src.txt | python map.py | sort -k 1 | python reduce.py

명령줄의 결과 출력:

a    2
    and    2
    and,have    1
    ao    1
    before    1
    before.I    1
    children    2
    Dad    2
    enjoyed    1
    family    2
    for    2
    get    1
    had    4
    hao    33
    haoao    1
    haoni    3
    have    1
    he    3
    hello    1
    his    2
    how    2
    I    3
    into    2
    knew    1
    loved    1
    man    2
    mandolin    2
    mature    1
    much    2
    my    2
    ni    34
    of    2
    out    1
    own    2
    play    2
    realized    2
    sacrificed    2
    singing    1
    the    2
    to    2
    to,mature    1
    we    1
    would    1

코드 보기

Passed Debugging에서 로컬 디버깅이 발견되었으며 코드는 정상입니다. 클러스터에 넣고 실행하세요. 편의상 노동력 해방을 위한 특별한 스크립트 run.sh를 작성했습니다.

HADOOP_CMD="/home/hadoop/hadoop/bin/hadoop"
    STREAM_JAR_PATH="/home/hadoop/hadoop/contrib/streaming/hadoop-streaming-1.2.1.jar"
    
    INPUT_FILE_PATH="/home/input/src.txt"
    OUTPUT_PATH="/home/output"
    
    $HADOOP_CMD fs -rmr  $OUTPUT_PATH 
    
    $HADOOP_CMD jar $STREAM_JAR_PATH \        -input $INPUT_FILE_PATH \        -output $OUTPUT_PATH \        
    -mapper "python map.py" \        -reducer "python reduce.py" \        -file ./map.py \        -file ./reduce.py

아래 스크립트를 분석해 보겠습니다.

 HADOOP_CMD: hadoop的bin的路径
    STREAM_JAR_PATH:streaming jar包的路径
    INPUT_FILE_PATH:hadoop集群上的资源输入路径
    OUTPUT_PATH:hadoop集群上的结果输出路径。(注意:这个目录不应该存在的,因此在脚本加了先删除这个目录。**注意****注意****注意**:若是第一次执行,没有这个目录,会报错的。可以先手动新建一个新的output目录。)
    $HADOOP_CMD fs -rmr  $OUTPUT_PATH
    
    $HADOOP_CMD jar $STREAM_JAR_PATH \        -input $INPUT_FILE_PATH \        -output $OUTPUT_PATH \       
     -mapper "python map.py" \        -reducer "python reduce.py" \       
      -file ./map.py \        -file ./reduce.py                 
      #这里固定格式,指定输入,输出的路径;指定mapper,reducer的文件;
      #并分发mapper,reducer角色的我们用户写的代码文件,因为集群其他的节点还没有mapper、reducer的可执行文件。


감소 단계 이후의 레코드 출력을 보려면 다음 명령을 입력하세요.

cat src.txt | python map.py | sort -k 1 | python reduce.py | wc -l
命令行中输出:43

작업 세부 정보를 보려면 브라우저에 master:50030을 입력하세요.

Kind    % Complete    Num Tasks    Pending    Running    Complete    Killed     Failed/Killed Task Attempts
map       100.00%        2            0        0        2            0            0 / 0
reduce    100.00%        1            0        0        1            0            0 / 0

이것을 Map-Reduce Framework에서 봤습니다.

Counter                      Map    Reduce    Total
Reduce output records    0      0          43


전체 과정이 성공했다는 증거입니다. 첫 번째 hadoop 프로그램 개발이 완료되었습니다.

위 내용은 Python 개발 MapReduce 시리즈 WordCount 데모의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.