하둡 스트리밍 - Python으로 MapReduce
by Kim
기존 자바로 작성된 jar 기반으로 하는 대신에 하둡 스트리밍을 이용하여 Python같은 스크립트 언어로 Mapper와 Reducer를 만들어서 실행합니다. 이번 글에서는 항공 데이터를 이용하여 년.월
별 운항 횟수를 출력해보겠습니다.
Python 위치 확인
우선 리눅스에서 python의 위치를 확인해봅니다.
which python
/usr/bin/python3
mapper 생성
Python의 위치를 확인 후 아래 스크립트를 mapper.py라는 이름으로 리눅스에 만듭니다.
실행할 파일 최상단에 #![프로그램 위치]를 입력하면 해당 프로그램을 기반으로 스크립트가 동작하게 됩니다.
입력된 파일을 한 줄씩 읽어와 ,
를 구분자로 사용하여 나누고 1,2번째 원소를 이용해 년.월
이라는 변수를 생성합니다.
다음에는 도착 지연 시간이 양수인 경우 (년.월
, 1
)을 출력합니다.
reducer 생성
다음으로 아래 스크립트를 reducer.py라는 이름으로 리눅스에 만듭니다.
mapper에서 (년.월
, 1
)을 받게 되는데 key값에 년.월
을, value에 숫자를 줍니다. 같은 key에 대해서 횟수를 추가하며 key가 바뀔 때마다 년.월에 대한 횟수를 출력하게 됩니다.
하둡 실행 생성
Python 스크립트를 다 작성했으면 명령어를 통해 하둡을 실행합니다.
manager@master:/usr/local/hadoop/code$ hadoop jar ../share/hadoop/tools/lib/hadoop-streaming-2.9.2.jar -input /airdata/2008.csv -output /pyoutput2 -mapper mapper.py -reducer reducer.py
명령어의 문법 설명은 이렇습니다.
hadoop jar ../share/hadoop/tools/lib/hadoop-streaming-2.9.2.jar -input [입력할 파일 위치] -output [결과 파일이 저장될 위치] -mapper [mapper 파일] -reducer [reducer 파일]
명령어 실행 완료 후 파일 내용을 확인해봅니다.
hadoop fs -cat /pyoutput2/part-00000
2008.1 279427
2008.10 183582
2008.11 181506
2008.12 280493
2008.2 278902
2008.3 294556
2008.4 256142
2008.5 254673
2008.6 295897
2008.7 264630
2008.8 239737
2008.9 169959
Subscribe via RSS