8-1 맵핑 리듀스 파이썬으로 해보기

ㅇㄹㅇ

mapper

# f = open("C:\Avatar.txt","r", encoding='UTF8')
#
#
# lines = f.readlines()
# for line in lines:
# 파일로 불러오던 방식 밑에는 표준입력으로 하는방식
# 하둡으로 동작시키기 위해 표준입력으로 받아와야함
# 파일로 읽어오기는 하둡에서 읽어오지 못함함


import sys
# sys는 운영체제안에서 뭔가를 동작할때 도와줌

for line in sys.stdin:
    # print(line)
    words = line.strip().split(" ")  #양끝에 공백 제거 #특정 구분자를 기준으로 단어 쪼개기
    # print(words)
    for word in words:
        print('{}\t{}'.format(word, 1))
        # {}안에 word주고 \t로 한칸 탭 주고 {}에 1을 주겠다는 의미


# f.close()

한줄 한줄 출력

type C:\Avatar.txt | python .\mapper.py
명령어의 결과를 파일로 저장 >

type C:\Avatar.txt | python .\mapper.py > mapper_result.txt
이런 형태
이렇게 생김

이번에는 reducer

# f = open("mapper_result.txt", "r", encoding='UTF16')
#
# lines = f.readlines()
import sys
current_word = None
current_cnt = 0
word = None


for line in sys.stdin:
    columns = line.strip().split("\t")
    # 아까 탭을 중간에 넣어줫으니 탭으로 구분
    word = columns[0]
    count = int(columns[1])

    if current_word == word:
        current_cnt += count
    else:
        current_cnt = count
        current_word = word
    #     단어가 다르면 카운트를 다음걸로 단어도 다음걸로

    if current_word == word:
        print('{}\t{}'.format(current_word, current_cnt))

다하고 리눅스에서 다음과 같이 입력
cat Avatar.txt | python3 mapper.py | sort | python3 reducer.py
txt파일을 매핑한후 sort명령어로 정렬 하고 다시 리듀서로 카운팅

sort명령어가 없으면 단어순도 맞지않아 보기 힘들고 카운팅할때 문제가 조금 생김

하둡 스트리밍
자바코드가 아니더라도 다른프로그래밍 언어를 이용할 수 있음
내부에서 자바코드로 바꿔줌

\ 하면 뒤에 명령어를 다음줄에 치겠다는것
위에한 것을 하둡에서 해보기

hadoop jar /opt/hadoop-3.2.2/share/hadoop/tools/lib/hadoop-streaming-3.2.2.jar \
-file /root/mapper.py \
-mapper /root/mapper.py \
-file /root/reducer.py \
-reducer /root/reducer.py \
-input /Avatar.txt \
-output /result1

mapper /root/mapper.py
맵퍼는 루트 안에 mapper.py이다

하둡재실행

/opt/hadoop-3.2.2/bin/hdfs namenode -format (네임노드를 포맷)
/opt/hadoop-3.2.2/sbin/start-all.sh(모든것을 실행)
/opt/hadoop-3.2.2/sbin/stop-all.sh(모든것을 종료)
PATH=$PATH:/opt/hadoop-3.2.2/bin

하둡 스트리밍 오류들

  1. 업로드한 대본 파일이 깨짐
    파일을 cat이나 하둡 홈페이지 유틸리티에서 확인해보기

  2. mapper.py, reducer.py 파일의 소스코드 자체 에러
    @해결방법
    cat Avatar.txt | python3 mapper.py | sort | python3 reducer.py
    파이썬으로 돌아가나 한번 확인해보기

  1. mapper.py, reducer.py 파일 맨위에
    #!/usr/bin/python3 추가하기
  1. safe 모드 해제하기

hdfs dfsadmin -safemode leave

  1. 우분투 용량 부족
    홍인님의 경우
    매핑후 리듀싱이 진행되지가 않았음
    우분투 용량늘리고
    yarn-site.xml
    용량 수정후 stop-all ,start-all

좋은 웹페이지 즐겨찾기