JangGeonWu
janggeonwu97
JangGeonWu
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • SQLD (21)
    • 개인 공부용 (17)
    • Django (9)
    • Tableau (6)
    • ElasticSearch (8)
    • 빅데이터 엔지니어 (5)
    • Spring 퀵 스타트 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 개인 공부 기록용 블로그

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
JangGeonWu

janggeonwu97

hadoop 맵리듀스 실습 기록용
개인 공부용

hadoop 맵리듀스 실습 기록용

2022. 10. 21. 12:12

mapper, reducer를 python으로 구현해서 생성한 후, 이를 실제로 적용시켜 출력물을 내는 실습을 해보자.

 

1. /usr/local/hadoop으로 이동해서 mapreduce라는 폴더 생성하기

2. mapreduce 폴더로 이동한 후, mapper.py라는 파일 생성하기

3. 아래와 같이 입력하기

#!/usr/bin/env python
import sys
for line in sys.stdin:
	line = line.strip()
	words = line.split()
	for word in words:
		print('%s\t%s' % (word, 1))

stdin으로 입력된 문자열을 '\n' 단위로 분할해 line으로, ' ' 단위로 분할해 words라는 배열로 만든 후, 

배열 안의 word와 1을 화면에 출력시키는 파일이다.

저 위쪽의 주석 "#!/usr/bin/env python"은 반드시 있어야 한다.

 

이후, mapper.py를 실행 가능하게 만들자.

chmod로 실행 가능하게 했더니, 초록색으로 바뀐 걸 볼 수 있다.

 

4. reducer.py 생성 후 실행가능하게 만들기

reducer.py를 연 후, 아래와 같이 입력한다.

그리고, 실행가능하도록 chmod 명령어를 사용한다.

#!/usr/bin/env python
from operator import itemgetter
import sys

current_word = None
current_count = 0
word = None

for line in sys.stdin:
   line = line.strip()

   word, count = line.split('\t', 1)

   try:
       count = int(count)
   except ValueError:
       continue

   if current_word == word:
       current_count += count
   else:
       if current_word:
           print( '%s\t%s' % (current_word, current_count))
       current_count = count
       current_word = word

if  current_word == word:
   print( '%s\t%s' % (current_word, current_count))

5. 파이썬 사용 전, 다음과 같이 python-is-python3 설치 

sudo apt-get install python-is-python3

 

6. 아래와 같이 입력해, 구현한 코드가 잘 돌아가는지 확인해보자

echo you will never know until you try. | $HADOOP_HOME/mapreduce/mapper.py

mapper는 '단어 '와 '1'을 출력한다.

echo you will never know until you try. | $HADOOP_HOME/mapreduce/mapper.py | sort -k1,1 | $HADOOP_HOME/mapreduce/reducer.py

reducer는 '단어'와 그의 빈도 수를 출력한다.

 

7. 이제 Input Data를 다운로드 받아보자.

우선 Input이라는 폴더를 만들고

파이어폭스 웹 브라우저에서 Gutenberg.org 사이트로 이동해, 원하는 ebook 파일을 다운받아보자.

https://gutenberg.org/ebooks/64686

여기서 Plain Text UTF-8을 누른 후, 모든 텍스트를 복사해서 input 폴더에 집어넣어보자.

 

조금 더 편하게 하기 위해서 mapper와 reducer를 여기에 복사하기로 함

(아래쪽에 보면 알겠지만 굳이 복사할 필요가 없었다... 이건 실행 안해도 됨)

 

8. hadoop 실행하기

 

아래의 코드를 순서대로 입력한다.

> hadoop namenode -format
> start-all.sh
> jps

jps는 그냥 잘 실행되었는지 확인하는 용도다.

 

이후, hadoop 환경에 /user/mapreduce라는 폴더를 생성한다.

hdfs dfs -mkdir -p /user/mapreduce

 

그리고, input 폴더를 위에서 만든 /user/mapreduce에 복사한다. local에서 hadoop으로 복사하므로 copyFromLocal을 써야 한다.

hdfs dfs -copyFromLocal /usr/local/hadoop/mapreduce/input /user/mapreduce

복사가 잘 되었는지 아래의 명령어로 확인해본다

hdfs dfs -ls /user/mapreduce/input

mapper랑 reducer의 실행 mod가 해제되었다...

 

 

9. 이제, hadoop 환경에서 우리가 정의한 mapreduce를 실행시켜보자.

아래의 명령어를 정확하게 입력해야 동작한다.

 

hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-3.3.0.jar \

hadoop에서 jar는 파일을 다루는 명령어다. 우리는 hadoop-streaming-3.3.0.jar(버전마다 이름이 다름)의 mapper 옵션과 reducer 옵션을 이용해 사용자 정의 mapreducer를 사용할 것이다.

 

-file /usr/local/hadoop/mapreduce/mapper.py -mapper /usr/local/hadoop/mapreduce/mapper.py \

-file로 우리가 로컬에 정의한 mapper.py을 읽고, -mapper로 해당 파일을 'mapper'에 사용한다.

 

-file /usr/local/hadoop/mapreduce/reducer.py -reducer /usr/local/hadoop/mapreduce/reducer.py \

위와 같이, -reducer로 reducer.py를 'reducer'로 사용한다.

 

-input /user/mapreduce/input/ebook.txt -output /user/mapreduce/output-ebook

위는 input값으로 hadoop에 있는 ebook.txt를 사용하겠다는 뜻이고, output은 hadoop에 /user/mapreduce/output-ebook이라는 폴더에 결과물을 저장하겠다는 뜻이다.

 

\으로 줄을 나누는 것이 좋다. 보기도 좋고 이해하기도 좋기 때문

 

이렇게 실행하면, 다음과 같이 output-ebook이라는 폴더가 생성되는 것을 볼 수 있다.

 

여기에 part-00000을 열어 파일을 읽어보면, mapping과 reducing이 잘 적용된 것을 볼 수 있다.

 

ebook 하나를 통째로 분석하는데 시간이 짧게 걸리는 걸 느낄 수 있다.

왜? map-reducer의 장점이 병렬처리라서!

 


이것으로 MapReducer 실습을 정리해보았다.

'개인 공부용' 카테고리의 다른 글

Java 기본 및 원리  (0) 2023.01.09
MSA Design Pattern  (0) 2022.10.29
hadoop 실습 기록  (0) 2022.10.20
hadoop 설치(기록용)  (0) 2022.10.20
mongoDB 특징과 집계 정리  (0) 2022.10.19
    '개인 공부용' 카테고리의 다른 글
    • Java 기본 및 원리
    • MSA Design Pattern
    • hadoop 실습 기록
    • hadoop 설치(기록용)
    JangGeonWu
    JangGeonWu

    티스토리툴바