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
하둡 스트리밍 오류들
-
업로드한 대본 파일이 깨짐
파일을 cat이나 하둡 홈페이지 유틸리티에서 확인해보기
-
mapper.py, reducer.py 파일의 소스코드 자체 에러
@해결방법
cat Avatar.txt | python3 mapper.py | sort | python3 reducer.py
파이썬으로 돌아가나 한번 확인해보기
- mapper.py, reducer.py 파일 맨위에
#!/usr/bin/python3 추가하기
- safe 모드 해제하기
hdfs dfsadmin -safemode leave
- 우분투 용량 부족
홍인님의 경우
매핑후 리듀싱이 진행되지가 않았음
우분투 용량늘리고
yarn-site.xml
용량 수정후 stop-all ,start-all
Author And Source
이 문제에 관하여(8-1 맵핑 리듀스 파이썬으로 해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kst5137/8-1-맵핑-리듀스-파이썬으로-해보기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)