'Cloud&BigData'에 해당되는 글 92건

  1. 2016.12.05 TF-IDF와 유사도로 알아보는 벡터 모델 #2
  2. 2016.11.29 TF-IDF와 유사도로 알아보는 벡터 모델 #1
  3. 2016.10.31 데이터 모델링이란 무엇인가?
  4. 2016.10.12 빅데이터 가치 창출을 위한 데이터과학의 5단계 프로세스 #2
  5. 2016.10.06 빅데이터 가치 창출을 위한 데이터과학의 5단계 프로세스 #1
  6. 2016.01.20 하둡 맵리듀스 Join 활용 퀴즈!!
  7. 2016.01.18 하둡 맵리듀스 Join 활용 예제
  8. 2016.01.15 하둡 스트리밍을 활용한 파이썬 word counting 예제~
  9. 2016.01.13 HDFS 명령어 테스트~
  10. 2016.01.11 Pig 두번째 예제 살펴보기~

TF-IDF와 유사도로 알아보는 벡터 모델 #2

|



TF-IDF를 이용하여 문서의 크기를 구하는 방법을 앞 강의에서 살펴봤다. 

이번에는 이 문서들에서 대해 검색어를 처리하는 부분을 알아보기로 한다. 


다음과 같은 검색어가 주어졌다고 해보자. 


검색어 "new new york"에 대한 쿼리 벡터를 구하면 다음과 같다. 


0.584란 값이 값자기 어디에서 나왔는지 궁금할수도 있을 듯 하다. 

이전 강의에서 살펴본 각각의 단어의 IDF를 생각해보면 된다. 

new의 IDF값은 0.584이고, 전체 문서에서 2번 중 검색어도 2번 나왔으므로 2/2가 된다. 


문서의 크기와 마찬가지로 검색어의 크기도 제곱하고 더한 후, 루트를 구하면 0.652가 나온다. 


이제 유사도를 구하기위해서 문서와 검색어의 거리를 측정해보자. 

거리를 구할 때는 유클리드 거리나 코사인 거리를 주로 사용하는데, 여기에서는 코사인 거리를 적용해보기로 한다. 


A는 문서 벡터와 관련된 값이고, B는 검색어 벡터와 관련된 값들이다. 

위 그림들을 잘 조합해서 보면 식이 이해가 될 것이다. 


어쨌든 위 결과를 살펴보면 검색어는 0.776으로 d1문서와 가장 가까운 것으로 나타난다. 

그래서 검색어 결과를 d1으로 정해주면 된다. 


보통 가중치를 주어서 계산하는 경우도 종종 있다. 

이럴 경우, 가중치 값을 다음과 같이 처리해서 쿼리 벡터를 구할 때 추가로 곱해줘서 적용할 수도 있다. 


이러한 TF-IDF와 유사도 방식의 벡터 모델은 문서 뿐만 아니라 이미지를 처리하는데도 사용한다고 한다. 


신고



Trackback 0 And Comment 0

TF-IDF와 유사도로 알아보는 벡터 모델 #1

|



텍스트 문서를 기반으로 벡터 모델에 대해서 정리해 보려고 한다. 


문서의 텍스트를 처리할 때 특정 단어가 몇 번 나왔는지를 주로 세어본다. 

많이 나온 단어일수록 중요하기 때문이다. 

그러나 "그리고", "the", "a"와 같이 모든 문서에서 많이 나오는 단어들은 실제로 의미가 없다. 

그래서 TF-IDF라는 가중치를 사용하게 된다. 


TF(Term Frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지를 나타내고, 

DF(Document Frequency)는 단어가 문서내에서 흔하게 등장한다는 것을 나타낸다. 

그래서 DF의 역수인 IDF(Inverse Document Frequency) 구해서 

TF와 IDF를 곱한 값인 TF-IDF를 가중치로 사용한다. 


다음과 같은 텍스트로 구성된 3개의 문서가 있다고 해보자. 


이 문서와 텍스트의 빈도수를 벡터 모델로 나타내면 다음과 같다. 

단순하게 문서에서 각 단어의 빈도수를 0과 1로 처리해 행렬로 보여준 것이다. 


참고로 벡터와 스칼라에 대해서 정리하면 다음과 같다. 

물리학에서 스칼라는 크기만 있는 물리량을 나타내며

벡터는 크기와 방향을 가지고 있는 것을 의미한다. 

예를 들어, 온도가 100도 처럼 1개의 숫자로 크기를 나타내는 것을 스칼라라고 하고

동쪽으로 10걸음, 북쪽으로 5걸음과 같이 크기와 방향을 나타내면 벡터라고 한다. 

여기에서는 행렬(matrix) 형태로 문서와 단어 사이의 빈도수를 나타내므로 벡터라고 하는 듯 하다. 


이제 IDF를 구해보면 다음과 같다. 


문서 수를 단어의 빈도수로 나누고 log2를 취해준 것이 바로 IDF값이다. 

만약 단어의 빈도수가 0일 경우, 0으로 나누는 문제를 방지하기 위해서 분모에 1을 더해서 계산하기도 한다. 


이제 TF-IDF 값을 구해보자. 

TF와 IDF를 곱하면 TF-IDF 값을 구할 수 있다. 


다음 강의에서 유사도 검색을 하기 위해서는 문서의 크기를 알아야 한다. 

문서의 크기는 각 문서에 등장하는 모든 단어들의 TF-IDF값을 제곱해서 더한 후 제곱근으로 구할 수 있다. 

최종적인 문서의 크기(length)는 다음과 같다. 


다음 강의에서는 유사도를 통해 위 문서들에서 검색어를 처리하는 것을 간략하게 살펴보려고 한다. 

신고



Trackback 0 And Comment 0

데이터 모델링이란 무엇인가?

|



데이터 모델링이란 무엇일까? 

먼저 데이터를 기반으로 모델을 만드는 것을 생각해 볼 수 있다. 

그러나 처음부터 모델을 만드는 것에 집착하는 것은 바람직하지 않다. 

너무 추상적이기도 하고, 어떤 모델을 어떻게 만들어야 할지 막막하기만 하다. 


다른 측면에서 데이터 모델링을 정의해 보면, 

데이터 모델링은 데이터의 속성을 설명할 수 있고 이해하는 것이라 할 수 있다. 

흔히 데이터 분석을 이야기할 때, 먼저 데이터의 특성을 파악하라고 한다. 


데이터의 특성을 파악하기 위해서는 다음 세 가지 항목을 알아야 한다. 

데이터 구조, 데이터 연산, 그리고 데이터 제약조건이다. 

특히 데이터 제약조건은 데이터 의미를 파악하는데 유용하게 활용할 수 있다. 


데이터 구조 

데이터 구조는 정형(structued), 반정형(semi-structured), 비정형(unstructued)으로 나누어진다.   

정형 데이터는 데이터베이스와 같이 구조화된 형태로 제공되는 것을 의미한다. 

반정형 데이터는 고정된 필드로 저장되어 있지는 않지만, HTML이나 XML과 같이 메타 데이터나 스키마를 포함한 것을 말한다. 

비정형 데이터는 동영상, 이미지와 같이 구조화 되어 있지 않은 것을 의미한다. 


빅데이터 분석에서 기본적으로 정형, 반정형 데이터를 기반으로 하지만, 비정형 데이터도 처리할 수 있어야 한다


데이터 연산

다양한 데이터 연산이 있지만 간략하게 네 가지만 살펴보기로 한다. 

첫째, 데이터 부분집합(subsetting)으로 전체 데이터의 일부분을 가져오는 것을 의미한다. 

보통 특정 조건을 만족하는 데이터 셋을 가져오는데 사용한다. 


둘째, 데이터 추출(substructure extraction)로 데이터 일부분을 가져온다는 측면에서 부분집합과 유사하다. 

그러나 데이터 구조를 나타내는 필드 중 특정 조건에 적합한 일부 필드만을 가져온다는 차이점은 있다. 


셋째, 유니온(union)으로 데이터간 결합을 의미한다.

일반적으로 동일한 데이터 필드를 가진 두 개의 데이터 셋을 결합할 때 사용하며, 

중복을 제거하고 새로운 데이터 셋을 생성하게 된다. 


넷째, 조인(join)으로 데이터를 결합하는 연산이 있다. 

유니온과 달리 서로 다른 필드를 가진 데이터 셋 결합도 가능하며, 보통 두 데이터셋을 연결하는 키(key)를 가지고 있다. 


데이터 제약조건(constrains)

제약조건은 논리적으로 데이터의 특성을 나타내는 역할을 한다. 

예를 들어, "영화는 제목을 하나 가지고 있다."와 같은 부분이 제약조건이라고 할 수 있다. 


데이터 타입에 대한 제약조건으로 Value constraints, Uniqueness constraints, Cardinality constraints가 있다. 

Value constraints: 나이는 음수가 나올 수 없다. 

Uniqueness constraints: 영화는 제목이 하나만 나온다. 

Cardinality constraints: 혈액형은 O형, A형, B형, AB형으로 나눈다. 


또한 세부 데이터가 아닌 데이터 구조에 따른 제약조건도 있다. 

행렬을 구조적으로 표현하기 위해 다음과 같은 제약조건을 활용할 수 있다. 

신고



Trackback 0 And Comment 0

빅데이터 가치 창출을 위한 데이터과학의 5단계 프로세스 #2

|



이제 본격적으로 빅데이터 가치 창출을 위한 5단계의 프로세스를 살펴보기로 한다. 

이것은 일반적인 빅데이터 분석 과정인 "데이터 획득 - 데이터 준비 - 데이터 분석 - 시각화 - 활용"을 의미한다. 


데이터 획득 (Acquire)

데이터 획득은은 단순히 데이터를 수집하는 것만을 의미하지 않는다. 

먼저 데이터 셋을 명확하게 정의해야 한다. 

어떤 데이터들이 있고, 해당 데이터의 특성이 무엇인지를 명확하게 설정해야 한다. 

그리고 나서 데이터를 검색해보거나 쿼리를 할 수 있어야 한다. 


개인적으로는 이 단계에서 데이터 속성을 파악하는 것이 중요하다고 생각한다. 

데이터에 어떤 항목들이 포함되어 있고, 그것이 무엇을 의미하는 지를 알아야 올바른 가설 또는 문제를 정의할 수 있다. 


데이터 준비 (Prepare)

데이터 준비 단계는 "데이터 탐험"과 "전처리"의 두 가지로 구성된다. 

데이터 탐험은 데이터의 의미를 이해하는 과정이다. 

데이터 시각화를 통해 사전 분석을 해보기도 하면서 데이터 본질을 이해하려고 노력하는 것이다. 

획득 단계에서 파악한 속성들이 실제로 어떤 분포를 보이는지 준비 단계에서 다시 한번 확인하는 것이라 할 수 있다. 


전처리는 수집된 데이터를 분석할 수 있도록 재구성하는 과정이다. 

데이터를 명확하게 정리하고, 통합하고, 그룹화해서 실제 분석에 활용할 수 있는 형태로 구성한다. 

필요할 경우, 이 단계에서 개인정보 비식별 처리를 할 수도 있다. 


데이터 분석(Analyze) 

다양한 데이터 분석 기술들 중에서 앞서 파악한 데이터 특성에 적합한 것을 선택하고 분석 모델을 구성하는 단계이다.  

데이터 모델은 한번에 완성되는 것이 아니다. 

여기에서 정의하고 있는 5단계 프로세스는 계속 반복해서 이루어져야 하며, 

특히 이 단계에서 구성하는 데이터 모델을 발전시켜 나가는 과정이라고 봐야 한다. 


데이터 시각화(Report)

데이터 시각화 단계는 분석 모델의 결과를 서로 논의해보는 단계라 할 수 있다. 

다른 사람들과 공유할 수 있도록 시각화해서 제공하면서 

그 결과에 대한 해석을 해보는 것이다. 

데이터 과학은 주로 분석에 초점이 맞추어져 있지만, 실제로는 이 단계의 논의와 해석이 더 중요한 것 같다. 

통찰(insight)은 바로 이 단계에서 나오는 경우가 많기 때문이다. 


데이터 활용(Act)

활용 단계는 이전 단계에서 찾은 통찰을 실제로 적용해 보는 것이다. 

앞서 강의에서 행동하지 않는 분석은 무의미하다고 이야기했다. 

분석의 결과물을 적용할 수 있어야 진정한 데이터 과학이 완성되었다고 할 수 있다. 


신고



Trackback 0 And Comment 0

빅데이터 가치 창출을 위한 데이터과학의 5단계 프로세스 #1

|



빅데이터는 초기의 개념 정의, 그리고 기술 적용의 단계를 넘어 활용으로 나아가고 있다. 

가치 창출을 위한 빅데이터 활용 측면에서 빅데이터 모델링에 대해 살펴보고자 한다. 


알리스테어 크롤과 벤저민 요스코비치가 쓴 린 분석(Lean Analytics)에 보면, 

"행동을 변화시키지 않는다면 잘못된 지표이다" 라는 이야기가 나온다. 

빅데이터 분석만 하고 아무런 행동도 하지 않는다면 무의미하다는 것이다. 


즉, 빅데이터 분석의 최종 목표는 반드시 실행이어야 한다. 

다양하고 수많은 데이터에서 인사이트를 찾고 이를 실행에 옮기는 것이야말로 진정한 빅데이터의 활용이자 데이터 과학이라 할 수 있다. 


그러나 빅데이터에서 인사이트를 찾아내는 것 자체가 어려울 수 있다. 

인사이트를 찾기 위해서는 무엇을 해야 할까? 


당연히 분석을 잘 해야 한다. 그리고 더 중요한 것은 "왜?" 라는 질문을 하는 것이다. 

일반적으로 통찰은 우리가 예상하지 못한 질문과 답변이 나왔을 때 무릎을 치면서 "아하~" 하고 외치는 경우 발생한다. 


데이브 마컴의 "비즈니스 씽크"를 보면 제퍼슨 기념관의 벽 부식 문제를 "왜?"라는 질문으로 해결하는 것이 나온다. 

보통 5why 라고 이야기 하는데 인사이트는 끝없는 "왜?"라는 질문에서 발견할 수 있다. 

즉, 데이터를 모으고 계속적으로 질문하고 분석함으로써 인사이트를 얻을 수 있는 것이다. 


앞으로 UC San Diego의 "Big Data Modeling and Management System" 강의를 기반으로 

빅데이터 모델링에 대한 나름대로의 생각을 정리해 보려고 한다. 

신고



Trackback 0 And Comment 0

하둡 맵리듀스 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
prev | 1 | 2 | 3 | 4 | ··· | 10 | next