Hadoop 스트리밍 : Python으로 Hadoop MapReduce 프로그램 작성



Hadoop Streaming에 대한이 블로그 게시물은 엄청난 양의 빅 데이터를 처리하기 위해 Python으로 Hadoop MapReduce 프로그램을 작성하는 방법을 배우기위한 단계별 가이드입니다.

디지털 미디어, 사물 인터넷의 출현과 함께 매일 생성되는 디지털 데이터의 양은 기하 급수적으로 증가하고 있습니다. 이 시나리오는 이러한 데이터를 저장하고 조작 할 수있는 차세대 도구와 기술을 만드는 데 문제를 일으켰습니다. 이것이 Hadoop Streaming이 등장하는 곳입니다! 다음은 2013 년부터 세계에서 매년 생성되는 데이터의 증가를 나타내는 그래프입니다. IDC는 매년 생성되는 데이터의 양이 2025 년에 180Zettabyte에이를 것으로 예상합니다!

data-by-2025-hadoop-streaming





출처 : IDC

IBM은 매일 거의 2.5 조 바이트의 데이터가 생성되며 지난 2 년 동안 전 세계 데이터의 90 %가 생성됩니다. 이렇게 방대한 양의 데이터를 저장하는 것은 어려운 작업입니다. Hadoop은 기존 엔터프라이즈 데이터웨어 하우스보다 더 효율적으로 대량의 정형 및 비정형 데이터를 처리 할 수 ​​있습니다. 분산 된 컴퓨터 클러스터에 이러한 방대한 데이터 세트를 저장합니다. Hadoop Streaming은 막대한 양의 데이터를 처리하는 애플리케이션을 작성하는 데 사용할 수있는 MapReduce 프레임 워크를 사용합니다.



MapReduce 프레임 워크는 Java를 기반으로하기 때문에 개발자가 Java에 대한 경험이없는 경우 어떻게 작업 할 수 있는지 궁금 할 것입니다. 개발자는 Java에 대한 많은 지식 없이도 선호하는 언어를 사용하여 매퍼 / 리듀서 애플리케이션을 작성할 수 있습니다. Hadoop 스트리밍 Pig 및 Hive와 같은 새로운 도구 나 기술로 전환하는 대신

Hadoop 스트리밍이란 무엇입니까?

Hadoop Streaming은 Hadoop 배포와 함께 제공되는 유틸리티입니다. 빅 데이터 분석을위한 프로그램 실행에 사용할 수 있습니다. Hadoop 스트리밍은 Python, Java, PHP, Scala, Perl, UNIX 등과 같은 언어를 사용하여 수행 할 수 있습니다. 이 유틸리티를 사용하면 실행 파일이나 스크립트를 매퍼 및 / 또는 감속기로 사용하여 Map / Reduce 작업을 만들고 실행할 수 있습니다. 예를 들면 :

$ HADOOP_HOME / bin / hadoop jar $ HADOOP_HOME / hadoop-streaming.jar



-input myInputDirs

-출력 myOutputDir

-폴더 / 빈 / 고양이

-감속기 / bin / wc

매개 변수 설명:

Python MapReduce 코드:

mapper.py #! / usr / bin / python import sys #Word Count 예제 # 입력은 sys.stdin의 줄에 대한 표준 입력 STDIN에서 나옵니다. line = line.strip () # 선행 및 후행 공백 제거 words = line.split ( ) # 줄을 단어로 나누고 단어로 된 단어 목록으로 반환 : # 표준 출력에 결과를 기록 STDOUT print '% s % s'% (word, 1) # 단어를 내 보냅니다.

reducer.py

#! / usr / bin / python import sys from operator import itemgetter # 단어를 개수에 매핑하기 위해 사전 사용 current_word = None current_count = 0 word = None # sys.stdin의 라인에 대한 STDIN에서 입력이 들어옴 : line = line.strip () word, count = line.split ( '', 1) try : count = int (count) except ValueError : continue if current_word == word : current_count + = count else : if current_word : print '% s % s'% (current_word, current_count) current_count = count current_word = word if current_word == word : print '% s % s'% (current_word, current_count)

운영:

  1. 다음 내용으로 파일을 만들고 이름을 word.txt로 지정합니다.

고양이 마우스 사자 사슴 호랑이 사자 코끼리 사자 사슴

  1. mapper.py 및 reducer.py 스크립트를 위 파일이있는 동일한 폴더에 복사합니다.

  1. 터미널을 열고 파일의 디렉토리를 찾습니다 .Command : ls : 디렉토리의 모든 파일을 나열하려면 cd : 디렉토리 / 폴더를 변경합니다.

  1. 파일의 내용을보십시오.
    명령 : cat 파일 이름

> mapper.py의 내용

명령 : cat mapper.py

> reducer.py의 내용

명령 : 고양이 reducer.py

로컬 파일 (예 : word.txt)에서 매퍼와 리듀서를 실행할 수 있습니다. 맵을 실행하고 HDFS (Hadoop Distributed File System)를 줄이려면 Hadoop 스트리밍 항아리. 따라서 HDFS에서 스크립트를 실행하기 전에 스크립트가 제대로 작동하는지 로컬에서 실행 해 보겠습니다.

> 매퍼 실행

명령: 고양이 word.txt | 파이썬 mapper.py

> reducer.py 실행

명령: 고양이 word.txt | python mapper.py | 정렬 -k1,1 | 파이썬 reducer.py

매퍼와 감속기가 예상대로 작동하는 것을 확인할 수 있으므로 더 이상 문제가 발생하지 않습니다.

실행 Hadoop의 Python 코드

Hadoop에서 MapReduce 작업을 실행하기 전에 로컬 데이터 (word.txt)를 HDFS에 복사합니다.

php mysql_fetch_

> 예 : hdfs dfs -put source_directory hadoop_destination_directory

명령: hdfs dfs -put /home/edureka/MapReduce/word.txt / user / edureka

jar 파일의 경로 복사

jar 버전에 따른 Hadoop Streaming jar의 경로는 다음과 같습니다.

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

따라서 터미널에서 Hadoop Streaming jar를 찾아 경로를 복사하십시오.

명령:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

MapReduce 작업 실행

명령:

hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file / home / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

Hadoop은 통계 및 정보에 대한 기본 웹 인터페이스를 제공합니다. Hadoop 클러스터가 실행 중일 때 브라우저에서 http : // localhost : 50070을 엽니 다. 다음은 Hadoop 웹 인터페이스의 스크린 샷입니다.

이제 파일 시스템을 검색하고 생성 된 wordcount 파일을 찾아 출력을 확인합니다. 아래는 스크린 샷입니다.

이 명령을 사용하여 터미널에서 출력을 볼 수 있습니다.

명령: hadoop fs -cat / user / edureka / Wordcount / part-00000

이제 Hadoop Streaming을 사용하여 Python으로 작성된 MapReduce 프로그램을 실행하는 방법을 배웠습니다!

Edureka는 업계 실무자들이 공동으로 만든 빅 데이터 및 하둡에 대한 강사 주도의 라이브 과정을 제공합니다.

질문이 있으십니까? 의견란에 언급 해 주시면 연락 드리겠습니다.