'Cloud&BigData/하둡(Hadoop)'에 해당되는 글 22건

  1. 2016.01.20 하둡 맵리듀스 Join 활용 퀴즈!!
  2. 2016.01.18 하둡 맵리듀스 Join 활용 예제
  3. 2016.01.15 하둡 스트리밍을 활용한 파이썬 word counting 예제~
  4. 2016.01.13 HDFS 명령어 테스트~
  5. 2016.01.11 Pig 두번째 예제 살펴보기~
  6. 2016.01.08 HBase 예제 살펴보기~
  7. 2016.01.07 Hive 예제 살펴보기~
  8. 2016.01.06 Pig 첫번째 예제 VM에서 실행하기~
  9. 2016.01.05 Hadoop 2.0 - HDFS2와 YARN
  10. 2016.01.04 [QuickStartVM] 하둡 word counting 테스트

하둡 맵리듀스 Join 활용 퀴즈!!

|



본 퀴즈는 University of California, San Diego의 Super Computer Center, Paul Rodriguez님의 강의에 포함된 내용이다. 

해당 퀴즈에 대한 답은 올려놓지 않을 계획이므로 아래 내용을 잘 따라하고 직접 풀어보기 바란다. 

하둡 맵리듀스 Join 활용 예제 를 참고하면 쉽게 구현할 수 있을 것이다. 


아래 예제에 따라 데이터 파일을 생성하고 조인하는 맵리듀스를 파이썬으로 구현해 보도록 하자. 


1. 퀴즈에 사용할 데이터 파일을 생성하는 다음 파이썬 소스를 make_join2data.py 파일로 저장한다. 


2. 파이썬 소스를 실행하는 스크립트를 make_data_join2.txt 파일로 만들고 이를 실행한다. 

> sh make_data_join2.txt


3. 생성된 데이터 파일을 살펴보자. 

join2_gennum*.txt 파일은 <TV show, count> 형태로 TV 프로그램과 시청수를 나타낸다. 


join2_genchan*.txt 파일은 <TV show, channel> 형태로 TV 프로그램과 해당 프로그램의 TV 채널을 나타내고 있다. 


4. 생성된 파일들을 HDFS에 올린다. 


5. 이제 다음 과제를 수행하는 맵리듀스를 구현해보자. 

"ABC 채널에서 방송되는 프로그램의 전체 시청자 수는 얼마일까?"

이 과제를 SQL 형태로 만들어보면 다음과 같다. 

select sum( viewer count) from File A, File B where FileA.TV show = FileB.TV show and FileB.Channel='ABC' grouped by TV show


최종 결과 파일의 앞부분 일부는 다음과 같이 나오면 된다. 


참고

하둡 맵리듀스 Join 활용 예제 를 참조해서 먼저 스스로 구현해 보고 잘 안될 경우, 아래 힌트를 참고해서 구현해 보기 바란다. 


join2_mapper.py 구현

read lines, and split lines into key & value
if value is ABC or if value is a digit print it out


다음 명령어로 결과값을 먼저 확인해 볼 수 있다. 

> cat join2_gen*.txt | ./join2_mapper.py | sort


join2_reducer.py 구현

read lines and split lines into key & value
if a key has changed (and it's not the first input)
then check if ABC had been found and print out key and running total,
if value is ABC then set some variable to mark that ABC was found (like abc_found = True)
otherwise keep a running total of viewer counts

다음 명령어로 결과값을 먼저 확인해 볼 수 있다. 

> cat join2_gen*.txt | ./join2_mapper.py | sort | ./join2_reducer.py


하둡 스트리밍으로 최종 명령어의 형식은 다음과 같다. 

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
   -input /user/cloudera/input/join2*.txt \
   -output /user/cloudera/output_join2 \
   -mapper /home/cloudera/join2_mapper.py \
   -reducer /home/cloudera/join2_reducer.py


신고



Trackback 0 And Comment 0

하둡 맵리듀스 Join 활용 예제

|



하둡 맵리듀스를 활용하다 보면 서로 다른 유형의 데이터 셋을 조인해야 하는 경우가 종종 있다. 

SQL에서 테이블간 조인을 생각해 보면 된다. 


Word Count 예제를 기반으로 맵리듀스의 조인을 고려해 보자. 

특정 단어의 개수를 세는데 파일 하나는 전체 기간을 대상으로 하고, 다른 파일은 월별로 각 단어의 개수를 나타낸다고 해보자. 

아래의 두 파일을 하나로 합쳐서 <날짜 단어 월별개수 전체개수> 형태로 합쳐서 출력하는 부분을 하둡 맵리듀스로 구현해보는 것이다. 

join1_FileA.txt

able,991
about,11
burger,15
actor,22

join1_FileB.txt

Jan-01 able,5
Feb-02 about,3
Mar-03 about,8
Apr-04 able,13
Feb-22 actor,3
Feb-23 burger,5
Mar-08 burger,2
Dec-15 able,100


맵 함수를 작성할 때 먼저 고려해야 할 사항은 어떤 것을 키(Key)로 설정할 것인가이다. 

위의 두 파일을 보면 조인 할 수 있는 공통 부분이 단어이므로 단어를 키로 설정하면 된다. 

그럼 파이썬으로 만든 맵 프로그램 소스를 살펴보자. 

join1_mapper.py


그리고 리듀스 함수에서 합칠 때 값(Value)에 따라 적절하게 융합하면 된다. 

리듀스 함수의 소스는 다음과 같다.

join1_reducer.py 


파이썬으로 생성한 맵리듀스 프로그램을 한번 실행해 보자. 

1. 새롭게 생성한 파이썬 소스를 실행가능하도록 설정한다. 

> chmod +x join1_mapper.py
> chmod +x join1_reducer.py
> ls -al join1_*.py


2. 하둡 파일 시스템의 /user/cloudera/input 디렉토리에 있는 기존 파일을 제거한다. 

> hdfs dfs -ls /user/cloudera/input
> hdfs dfs -rm /user/cloudera/input/*
> hdfs dfs -ls /user/cloudera/input


3. 맵리듀스 조인에 활용할 예제 파일을 하둡 파일 시스템으로 올린다.

> hdfs dfs -put join1_File*.txt /user/cloudera/input/
> hdfs dfs -ls /user/cloudera/input


4. 하둡 스트리밍을 활용하여 실행한다. 

> hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
  -input /user/cloudera/input \
  -output /user/cloudera/output_join \
  -mapper /home/cloudera/join1_mapper.py \
  -reducer /home/cloudera/join1_reducer.py


5. 실행 결과를 확인해 보자. 

> hdfs dfs -ls /user/cloudera/output_join
> hdfs dfs -cat /user/cloudera/output_join/part-00000


6. 맵리듀스의 결과와 파이프라인으로 실행한 결과를 비교해보면 순서는 다르지만 동일한 결과가 나오는 것을 확인할 수 있을 것이다. 

> cat join1_File*.txt | ./join1_mapper.py | sort | ./join1_reducer.py


위 예제는 University of California, San Diego의 Super Computer Center, Paul Rodriguez님의 강의를 참고했다. 


신고



Trackback 0 And Comment 0

하둡 스트리밍을 활용한 파이썬 word counting 예제~

|



하둡 스트리밍을 활용하면 맵리듀스 잡을 실행가능한 스크립트, 쉘 프로그래밍/파이썬/자바/R 등으로 처리할 수 있다. 

하둡 스트리밍에 대해서는 Apache Hadoop Streaming을 참고하면 된다. 


이번 강의에서는 기본 하둡 예제인 Word Count를 파이썬으로 구성한 후, 하둡 스트리밍으로 맵리듀스를 적용하는 예제를 살펴보기로 한다. 

하둡 스트리밍 명령어는 다음과 같이 사용법을 확인할 수 있다. 

> hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar --help


1. 먼저 파이썬으로 맵 함수를 만들어 보자. 

WordCount에서 맵 함수는 파일의 각 라인별로 읽어서 공백으로 자른 다음, Key: 단어, Value: 1로 출력하면 된다. 

> gedit wordcount_mapper.py

#!/usr/bin/env python

import sys

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

    for key in keys:
        value = 1
        print('{0}\t{1}'.format(key, value) )


2. 이어서 파이썬으로 리듀스 함수를 만들어 보자. 

리듀서로 넘어올 때는 이미 정렬과 그룹핑이 되어 있기 때문에 키 값인 단어를 이전과 비교해서 총합을 구하면 된다. 

> gedit wordcount_reducer.py

#!/usr/bin/env python

import sys

last_key = None
running_total = 0

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

    this_key, value = input_line.split("\t", 1)
    value = int(value)

    if last_key == this_key:
        running_total += value

    else:
        if last_key:
            print( "{0}\t{1}".format(last_key, running_total) )
        running_total = value
        last_key = this_key

if last_key == this_key:
    print( "{0}\t{1}".format(last_key, running_total))


3. 작성한 파이썬 소스코드를 실행가능한 모드로 변경한다. 

> chmod +x wordcount_mapper.py
> chmod +x wordcount_reducer.py
> ls


4. Word Count를 테스트할 파일을 생성한다. 

> echo "A long time ago in a galaxy far far away" > /home/cloudera/testfile1
> echo "Another episode of Star Wars" > /home/cloudera/testfile2


5. 생성한 테스트 파일을 하둡 파일 시스템에 올린다. 

만약 이전 강의를 따라하면서 똑같은 파일명이 있다면 해당 파일을 먼저 지우고 올리면 된다. 

> hdfs dfs -mkdir /user/cloudera/input
> hdfs dfs -put /home/cloudera/testfile1 /user/cloudera/input
> hdfs dfs -put /home/cloudera/testfile2 /user/cloudera/input
> hdfs dfs -ls /user/cloudera/input


6. 하둡 스트리밍을 활용하여 생성한 테스트 파일 기반으로 파이썬 맵퍼와 리듀서를 실행한다. 

> hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
  -input /user/cloudera/input \ 
  -output /user/cloudera/output_new \
  -mapper /home/cloudera/wordcount_mapper.py \
  -reducer /home/cloudera/wordcount_reducer.py


7. 결과를 확인하면 테스트 파일의 단어와 개수가 정렬되어 있는 것을 볼 수 있다. 

> hdfs dfs -cat /user/cloudera/output_new/part-00000
> hdfs dfs -ls /user/cloudera/output_new


8. 이번에는 리듀스를 포함하지 않고 적용해보자. 마지막에 numReduceTasks를 0으로 세팅했다. 

> hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
  -input /user/cloudera/input \
  -output /user/cloudera/output_new_0 \
  -mapper /home/cloudera/wordcount_mapper.py \
  -reducer /home/cloudera/wordcount_reducer.py \
  -numReduceTasks 0


9. 결과를 살펴보면 다음과 같이 세 개의 파일로 나누어져 있는 것을 확인할 수 있다. 

또한 리듀서를 적용하지 않았기 때문에 동일한 단어에 대해서 개수를 통합하지 못한 것을 far를 보면 알 수 있다. 

> hdfs dfs -ls /user/cloudera/output_new_0
> hdfs dfs -cat /user/cloudera/output_new_0/part-00000
> hdfs dfs -cat /user/cloudera/output_new_0/part-00001
> hdfs dfs -cat /user/cloudera/output_new_0/part-00002


10. 여러개의 파일로 결과가 나올 경우, getmerge를 통해 하나의 파일로 합쳐서 로컬에 가져올 수 있다. 

> hdfs dfs -getmerge /user/cloudera/output_new_0/* wordcount_num0_output.txt
> ls
> cat wordcount_num0_output.txt


11. 만약 numReducerTasks를 2로 설정하면 어떻게 될까? 

참고로 맵리듀스 결과가 저장될 곳을 기존 디렉토리를 지정하면 이미 파일이 존재한다는 에러가 난다. 

> hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
  -input /user/cloudera/input \
  -output /user/cloudera/output_new_1 \
  -mapper /home/cloudera/wordcount_mapper.py \
  -reducer /home/cloudera/wordcount_reducer.py \
  -numReduceTasks 2


12. 리듀서를 2개를 사용하면 결과값이 글로벌하게 정렬되지 않는 점을 제외하고는 Word Count는 제대로 실행되는 것을 확인할 수 있다. 

> hdfs dfs -ls /user/cloudera/output_new_1
> hdfs dfs -cat /user/cloudera/output_new_1/part-00000
> hdfs dfs -cat /user/cloudera/output_new_1/part-00001


본 강의의 예제는 University of California, San Diego의 폴 로드리게즈(Paul Rodriguez) 교수의 자료를 참고했다. 

신고



Trackback 0 And Comment 0

HDFS 명령어 테스트~

|



클라우데라의 QuickStartVM에서 HDFS 명령어를 테스트해보자. 

하둡 파일 시스템의 전체 명령어는 하둡(Hadoop) 파일시스템 (HDFS) 명령어 정리~를 참고하기 바란다. 


아래 내용은 University of California, San Diego의 Mahidhar  Tatineni 교수 자료를 참고했다. 


1. -ls 명령어로 현재 하둡 파일 시스템에 내용을 확인할 수 있다. 

VM에서는 /hbase, /solr 등의 디렉토리 구성을 볼 수 있다.  

> hdfs dfs -ls /


2. -mkdir을 사용하여 예제로 쓸 /user/test 디렉토리를 생성한다. 

> hdfs dfs -mkdir /user/test
> hdfs dfs -ls /user/


3. 리눅스의 dd 명령어를 통해 1GB의 대용량 파일을 만들어 보자. 

> dd if=/dev/urandom of=sample.txt bs=64M count=16


4. 생성된 sample.txt 파일을 하둡 파일 시스템으로 저장한다. 

> hdfs dfs -put sample.txt /user/test/
> hdfs dfs -ls /user/test/


5. 하둡 파일 시스템에 저장된 파일의 상세 내역은 fsck 명령어로 확인할 수 있다. 

블럭 개수 및 블럭 사이즈, 리플리케이션 팩터 등을 확인할 수 있다. 

참고로 VM에서는 128M의 블럭 사이즈와 1개의 리플리케이션이 기본으로 설정되어 있는 것을 알 수 있다. 

> hdfs fsck /user/test/sample.txt


6. 마지막으로 dfsadmin 명령어를 통해서 데이터 노드의 전체 상태를 살펴볼 수 있다. 

> hdfs dfsadmin -report


신고



Trackback 0 And Comment 0

Pig 두번째 예제 살펴보기~

|



passwd 파일에서 아이디, 이름, 홈디렉토리를 가져오는 피그 예제를 살펴봤다. 

이번에는 하둡 완벽 가이드에 나왔던 연도별 최고 온도를 계산하는  예제를 살펴보기로 하자. 

해당 예제에 대한 설명은 Hive & Pig - 하둡(Hadoop)의 맵리듀스를 보다 편하게~ 를 참고하기 바란다. 


1. 먼저 예제로 사용할 sample.txt 파일을 만들어 보자. 

> vi sample.txt


2. 년도 온도 품질 순으로 탭을 공백으로 다음과 같이 입력하고 저장한다. 


3. 생성한 sample.txt 파일을 하둡 파일 시스템의 /user/cloudera에 업로드하고 확인한다. 

> hdfs dfs -put sample.txt /user/cloudera
> hdfs dfs -ls /user/cloudera


4. pig를 실행하고  grunt shell에서 다음과 같이 명령어를 입력한다. 

> pig -x mapreduce
grunt> records = LOAD ‘/user/cloudera/sample.txt’
>> AS(year: chararray, temperature:int, quality:int);
grunt> filtered_records = FILTER records BY temperature != 9999
>> AND quality == 1

grunt> grouped_records = Group filtered_records BY year;
grunt> max_temp = FOREACH grouped_records GENERATE group,
>> MAX(filtered_records.temperature);

grunt> DUMP max_temp;


5. 결과 값을 확인하면 다음과 같이 1949년에 111, 1950년에 22가 나온 것을 확인할 수 있다. 


신고



Trackback 0 And Comment 0

HBase 예제 살펴보기~

|



이번에는 클라우데라에 포함된 HBase에 대해서 살펴보도록 하자. 

HBase에 대해서는 하둡(Hadoop) 관련 기술 - 피그, 주키퍼, HBase에 대한 간략한 정리! 를 참고하기 바란다. 


HBase 서버 확인

먼저 HBase 서버가 동작 중인지 확인해 봐야 한다. 

HBase는 Master와 RegionServer가 모두 동작해야 하므로 다음 명령어로 상태를 확인하고 

동작 중이 아닌 경우, start 명령어로 시작하면 된다. 

> sudo service hbase-master status
> sudo service hbase-regionserver status

> sudo service hbase-master start
> sudo service hbase-regionserver start


HBase 실행 

1. HBase Shell을 실행한다.  

> hbase shell


2. HBase에 userinfotable 을 만들고 데이터를 넣어보자. 

hbase(main):001:0> create 'userinfotable',{NAME=>'username'},{NAME=>'fullname'},{NAME=>'homedir'}
hbase(main):001:0> put 'userinfotable','r1','username','vcsa'
hbase(main):001:0> put 'userinfotable','r2','username','sasuser'
hbase(main):001:0> put 'userinfotable','r3','username','postfix'
hbase(main):001:0> put 'userinfotable','r1','fullname','VirtualMachine Admin'
hbase(main):001:0> put 'userinfotable','r2','fullname','SAS Admin'
hbase(main):001:0> put 'userinfotable','r3','fullname','Postfix User'
hbase(main):001:0> put 'userinfotable','r1','homedir','/home/vcsa'
hbase(main):001:0> put 'userinfotable','r2','homedir','/var/sasuser'
hbase(main):001:0> put 'userinfotable','r3','homedir','/user/postfix'


3. scan을 활용해서 userinfotable의 내용을 확인해 본다. 

hbase(main):001:0> scan 'userinfotable'
hbase(main):001:0> scan 'userinfotable',{COLUMNS=>'fullname'}


Hbase Shell을 빠져나올때는 exit 명령어를 사용한다. 


Hue에서의 HBase

Hue 인터페이스에서도 HBase의 내용을 확인하고 스캔할 수 있다. 

Data Browser > HBase를 선택하면 HBase 화면으로 들어갈 수 있다. 

위에서 생성한 userinfotable이 존재하는 것을 확인할 수 있다. 

테이블 이름을 클릭해서 해당 내용을 조회하고 처리할 수 있다. 


신고

'Cloud&BigData > 하둡(Hadoop)' 카테고리의 다른 글

HDFS 명령어 테스트~  (0) 2016.01.13
Pig 두번째 예제 살펴보기~  (0) 2016.01.11
HBase 예제 살펴보기~  (0) 2016.01.08
Hive 예제 살펴보기~  (0) 2016.01.07
Pig 첫번째 예제 VM에서 실행하기~  (0) 2016.01.06
Hadoop 2.0 - HDFS2와 YARN  (0) 2016.01.05



Trackback 0 And Comment 0

Hive 예제 살펴보기~

|



클라우데라의 QuickStartVM을 통해 하둡 어플리케이션을 살펴보고 있다. 

이번에는 Hive를 beeline과 Hue를 통해서 간략하게 알아보자. 


Hive Beeline 예제

1. 터미널을 띄우고 /etc/passwd 파일을 HDFS의 /tmp 폴더에 넣는다. 

> hdfs dfs -put /etc/passwd /tmp/
> hdfs dfs -ls /tmp/


2. Hive를 실행하기 위해 beeline을 실행한다. 

> beeline -u jdbc:hive2://


3. beeline에서 userinfo 테이블을 생성하고, /tmp/passwd 파일을 읽어서 테이블에 저장한다. 

jdbc:hive2://>> CREATE TABLE userinfo ( uname STRING, pswd STRING, uid INT, gid INT, fullname STRING, hdir STRING, shell STRING ) ROW FORMAT DELIMITED FIELDS TERMINA TED BY ':' STORED AS TEXTFILE;
jdbc:hive2://>> LOAD DATA INPATH '/tmp/passwd' OVERWRITE INTO TABLE userinfo;


4. select 명령문을 통해 생성된 userinfo 테이블의 내용을 읽어온다. 

jdbc:hive2://>> SELECT uname, fullname, hdir FROM userinfo ORDER BY uname;
jdbc:hive2://>> !q


HUE에서의 Hive 확인

클라우데라의 HUE 인터페이스에서도 Hive를 확인할 수 있다. 

Query Editor > Hive를 선택하면 다음과 같은 화면이 나타나고, 위에서 생성한 userinfo 테이블을 확인할 수 있다. 


왼쪽 테이블의 가장 우측 아이콘을 클릭하면 해당 테이블의 내용을 바로 볼 수 있다. 


마지막으로 beeline에서 입력한 select와 동일한 쿼리를 입력해서 실행하면 똑같이 맵리듀스 잡이 활성화되고 결과가 나온다. 


신고



Trackback 0 And Comment 0

Pig 첫번째 예제 VM에서 실행하기~

|



클라우데라의 QuickStartVM에서 피그 스크립트를 실행하는 것을 살펴보기로 한다. 

피그(Pig)와 관련된 내용은 다음 글을 참고하기 바란다. 


하둡(Hadoop) 관련 기술 - 피그, 주키퍼, HBase에 대한 간략한 정리!

Hive & Pig - 하둡(Hadoop)의 맵리듀스를 보다 편하게~


오늘 살펴볼 예제는 VM의 passwd 파일을 HDFS에 업로드하고, 

해당 파일에서 사용자 아이디, 사용자 이름, 그리고 홈디렉토를 가져와서 결과를 저장하는 것이다. 

다음 순서대로 따라해 보자. 


1. /etc/passwd 파일을 HDFS의 /user/cloudera로 업로드한다. 

> hdfs dfs -put /etc/passwd /user/cloudera
> hdfs dfs -ls /user/cloudera/passwd


2. 피그 스크립트를 작성하고 동작 시킬 수 있는 grunt shell을 실행한다. 

> pig -x mapreduce


3. grunt shell에서 passwd 파일을 불러오고 아이디, 사용자 이름, 홈 디렉토리를 가져오는 스크립트를 작성한다. 

passwd 파일의 한 라인이 ':'으로 구분되어 있으므로 using PigStorage(':')로 구분자를 지정했다. 

그리고 foreach문으로 각 라인을 돌면서 첫 번째, 다섯 번째, 여섯 번째의 값을 B에 저장한다. 

마지막으로 B를 덤프해서 원하는 값이 제대로 처리되었는지 확인한다. 

> A = load '/user/cloudera/passwd' using PigStorage(':');
> B = foreach A generate $0, $4, $5;
> dump B;


4. dump 결과는 다음과 같다. 


5. store 명령어를 통해서 결과값을 하둡 파일 시스템으로 저장할 수 있다. 

저장 후 quit 명령어로 grunt shell을 빠져나온다. 

> store B into 'userinfo.out';
> quit


6. userinfo.out 폴더가 생성된 것을 확인하고 결과 값이 제대로 저장되어 있는지 확인한다.  

> hdfs dfs -ls /user/cloudera/userinfo.out
> hdfs dfs -cat /user/cloudera/userinfo.out/part-m-00000


신고

'Cloud&BigData > 하둡(Hadoop)' 카테고리의 다른 글

HBase 예제 살펴보기~  (0) 2016.01.08
Hive 예제 살펴보기~  (0) 2016.01.07
Pig 첫번째 예제 VM에서 실행하기~  (0) 2016.01.06
Hadoop 2.0 - HDFS2와 YARN  (0) 2016.01.05
[QuickStartVM] 하둡 word counting 테스트  (0) 2016.01.04
HDFS 간단히 살펴보기~  (0) 2015.12.31



Trackback 0 And Comment 0

Hadoop 2.0 - HDFS2와 YARN

|



HDFS vs HDFS2

기존의 하둡 파일 시스템의 가장 큰 취약점은 바로 네임노드였다. 

여러 개의 데이터 노드를 연결해서 데이터 노드에서 발생할 수 있는 하드웨어 오류에 대응할 수 있었지만, 

네임 노드는 하나로 구성함으로써 위험에 노출되어 있던 것이 사실이다. 


HDFS2로 넘어가면서 네임노드에도 확장성을 위해 여러 개의 네임노드를 구성할 수 있도록 변경하였다. 

그래서 네임 서버들을 구분하기 위한 여러 개의 네임스페이스를 도입하게 되었고, 네임 서버에 대한 고가용성도 확보할 수 있었다. 

또한 여러 개의 네임 서버에서 데이터 노드를 관리하기 위해서 Block Pools 개념도 등장한다. 



마찬가지로 하둡 1.0의 맵리듀스에서도 마스터 노드에 하나의 잡트래커를 사용했다. 

잡트래커에서 스케쥴링, 모니터링, 실패한 태스크의 재실행 등 다양한 역할을 수행했었다. 



YARN - NexGen MapReduce

하둡 2.0에서 잡 트래커커의 역할을 리소스 관리와 잡 스케쥴링/모니터링으로 분리해서 효율성을 높인 것이 바로 Yarn이다. 

마스터 노드에서는 리소스 관리를 진행하고, NodeManager는 각 노드에서 실행하고, ApplicatonMaster는 각 어플리케이션 단위로 실행하는 것으로 구분하였다. 

또한, 하둡 1.0은 맵리듀스만을 기반으로 Hive, Pig 정도의 어플리케이션을 활용할 수 있었지만, 

YARN 기반으로 업그레이드하면서 다양한 어플리케이션들을 하둡 파일 시스템 기반으로 활용할 수 있게 된다. 



그러면 YARN 아키텍처의 흐름을 살펴보기로 하자. 



1. 클라이언트에서 응용프로그램을 요청한다. 

2. Resource Manager는 Container 할당을 책임지는 Applicatoin Master를 실행한다. 

3. Application Master가 Resource Manager에 등록된다. 

4. Application Master가 resource-request 프로토콜을 통해 적절한 리소스의 Container를 요청한다. 

5. Container가 성공적으로 할당되면, Application Master는 Container 실행 스펙을 Node Manager에게 제공하여 Container를 실행시킨다.

6. 응용프로그램 코드는 Container에서 실행되고, 진행률/상태 등의 정보를 Application Master에 제공한다. 

7. 응용프로그램 실행 중 클라이언트는 진행률/상태 등을 얻기 위해 Application Master와 직접 통신한다. 

8. 응용프로그램이 완료되고 필요한 작업이 종료되면, Application Manager는 Resource Manager에 등록을 해제하고, 자신의 Container를 다른 용도로 사용할 수 있도록 종료한다. 


신고



Trackback 0 And Comment 0

[QuickStartVM] 하둡 word counting 테스트

|



클라우데라의 QuickStart VM을 활용해서 하둡 맵리듀스를 처리하는 예제를 살펴보기로 하자. 

만약 VM이 설치되어 있지 않다면, QuickStart VM 설치하기 글을 참고하기 바란다. 


테스트할 예제는 가장 기본적인 WordCount 예제이다. 

해당 소스에 대한 설명은 WordCount 맵리듀스 테스트 글을 살펴보기 바란다. 


Word Count 테스트 

이제 QuickStart VM을 통해서 Word Count를 해보기로 하자. 

1. VM에서 터미널을 열고 다음 명령어로 hadoop-mapreduce-examples.jar 파일이 있는 곳으로 이동하고 해당 파일을 확인한다. 

> cd /usr/lib/hadoop-mapreduce/
> ls *examples.jar


2. hadoop jar 명령어로 wordcount 예제를 실행해 보자. 

> hadoop jar hadoop-mapreduce-examples.jar wordcount


Word Count를 실행하기 위해 입력 파일(<in>), 출력 파일(<out>)을 포함시켜야한다고 나온다. 

그래서 다음 단계로 입력 파일을 만들어 보도록 하자. 


3. testfile1과 testfile2를 다음과 같이 생성한다. 

> echo "Hello world in HDFS" > /home/cloudera/testfile1
> echo "Hadoop word count example in HDFS" > /home/cloudera/testfile2
> ls /home/cloudera/testfile*


4. 하둡 파일 시스템에 /user/cloudera/input 폴더를 생성하고 위에서 만든 testfile1, testfile2를 하둡 파일시스템에 올린다. 

> hdfs dfs -mkdir /user/cloudera/input
> hdfs dfs -put /home/cloudera/testfile1 /user/cloudera/input
> hdfs dfs -put /home/cloudera/testfile2 /user/cloudera/input


5. 이제 word count 예제에 입력, 출력을 지정해서 맵리듀스 잡을 실행시켜 보자. 

> hadoop jar hadoop-mapreduce-examples.jar wordcount /user/cloudera/input /user/cloudera/output


6. 하둡 파일 시스템의 결과값을 다음 명령어로 확인해 본다. 

> hdfs dfs -ls /user/cloudera/output


7. 단어 갯수와 순서가 저장되어 있는 파일 part-r-00000의 내용을 확인해 보면 다음과 같다. 

> hdfs dfs -cat /user/cloudera/output/part-r-00000


8. 마지막으로 결과 파일을 get 명령어로 로컬 파일(/home/cloudera/wordcount.txt)로 가져온다. 

> hdfs dfs -get /user/cloudera/output/part-r-00000 /home/cloudera/wordcount.txt


이상으로 VM에서 하둡 맵리듀스 잡을 실행해보았다. 

본 강의 내용은 University of California, San Diego의 나타샤 발락(Natasha Balac) 교수의 자료를 참고했다. 


신고



Trackback 0 And Comment 0
prev | 1 | 2 | 3 | next