그 어느 배포판보다 가장 빠르게 빅데이터 분석에 대한 체험을 할수 있는 Sandbox에 대해 알아본다.
Hortonworks Sandbox(이하 샌드박스)는 Hortonworks Data Platform (HDP)의 단일 노드에서 구현 한 것이다. HDP를 쉽게 사용해 볼수 있도록 가상 머신으로 패키징되어 있다. 샌드박스에 있는 자습서를 활용하면 HDP가 빅데이터의 문제를 어떻게 해결해 나가는지를 방법을 모색하는데 도움이 될것이다. 샌드박스 튜토리얼은 HDP에서 몇 가지 샘플을 통해 HDP에 내장 된 도구를 사용할수 있다. 다시 말해 튜토리얼에서 HDP를 시작하는 방법과 작업수행 방법을 보여준다.
Hadoop 의 Hadiio Distributd File System(HDFS)나 MapReduce 얘기는 이미 여러 곳에서 설명하고 있으므로 지나간다. 간단히 설명하면 많은 데이터를 분산하여 여러대의 서버에 저장하고 관리여 분산처리할 수 있고 장애에 강하므로 기존보다 빠르게 처리할수 있다 정도이다.
처음 접속화면은 아니지만 샌드박스에 설치된 패키지들의 버전은 그림과 같다.
그 외에 Hive를 위해 Beeswax와 Oozie, Hue 가 설치되어 있다. 그럼 대략적으로 몇 가지를 살펴보겠다.
Apache Hive
아파치 하이브 프로젝트는 HDFS에있는 데이터의 데이터웨어 하우스 뷰를 제공한다. SQL과 같은 하이브를 사용하면, 데이터 summarization을 만들 쿼리를 수행하고, 하둡 클러스터에서 대규모 데이터 셋을 분석 할 수 있다. 하이브로 전체 접근 방식은 데이터 셋에 테이블 구조를 투영하고 HiveQL로 처리(DML )하는 것이다. HDFS를 사용함으로써 데이터노드를 얼마든지 확장할 수 있고, 사용자가 빅 데이터 셋을 처리 할 수 있습니다.
Apache Pig
피그는 데이터 분석 및 인프라 프로세스를 표현하기위한 언어이다. 피그는 Hadoop 클러스터에서 실행되는 MapReduce 작업의 시리즈로 트랜스레이트된다. 피그는 자바와 다른 언어로 작성된 사용자 정의 함수를 통해 확장된다. 피그 스크립트는 Hadoop 클러스터의 데이터를 처리하는 데 필요한 MapReduce 작업을 생성 할 수있는 높은 수준의 언어를 제공한다.
Apache HCatalog
HCatalog은 Hadoop 클러스터에 있는 데이터에 대한 위치와 메타 데이터를 보유한다. 이 스크립트와 MapReduce 작업이 스키마 등의 데이터 위치와 메타 데이터에서 분리 될 수 있다. HCatalog 가 하이브와 피그 같은 많은 툴들을 지원하기 때문에, 데이터 위치와 메타 데이터가 툴를 사이에 공유 될 수 있다. 또한 Teradata Aster 같은 HCatalog의 오픈 API를 사용해서 HCatalog의 위치와 메타 데이터를 사용할 수 있다. 기회가 되면 데이터 위치와 메타 데이터를 살펴 볼 수있는 방법을 살펴보겠다.
간단한 소개를 했으니 실제 데이터를 넣어보도록 하겠다.
File Browser
샘플파일은 2000-2001년의 New York Stock Exchange 를 넣도록 하겠다.
https://s3.amazonaws.com/hw-sandbox/tutorial1/NYSE-2000-2001.tsv.gz
크지는 않지만 약 40메가 정도로 테스트하기에는 무난할 것이다.
파일 브라우저의 인터페이스는 일반 파일업로드와 유사하다. 기본 경로가 /user/sandbox로 되어 있고 Upload 를 눌러 파일을 올릴 수 있다.
용량도 작고 가상머신이므로 빨리 끝난다. NYSE-2000-2001.tsv 를 누르면 내용을 볼 수 있다.
HCatalog로 샘플 데이터 로딩
HDFS에 파일을 올렸으니 피그나 하이브로 접근하기 위해 HCatalog로 데이터 셋을 등록해보겠다.
(제가 글쓰는 것에 대해 그다지 친철하지 않기 때문에 따라해보시는 분들은 버턴은 스스로 찾아야 합니다.)
좌측의 ‘Create a new table from file’ 을 누르고 나머지는 적당히 채운다. 당연한 거지만 Input File 에서 조금전 업로드한 파일을 선택한다.
혹시나 해서 추가로 말하자만 hadoop 이나 기타 관련 툴에서 명명 규칙에 대해 제약조건이 있다 예를들면 ‘-‘ 도 흔히 쓰지만 사용할수 있다. 향후 여러 툴에서 사용을 위해서는 이러한 명명 규칙을 알아두는 것이 좋다. 그리고 간혹 느린 컴퓨터라면 임포트를 하는데 조금 시간(내 노트북이 5초정도 걸리니 길면 10여초)이 걸릴 수 있으니 참고 기다린다.
다음 화면에서 DB를 사용하면 많이 보던 import 설정 같은 것인데 구분자와 헤더여부와 미리보기가 제공된다. 샘플에서는 파일의 첫 번째 '헤더'행은 필드 이름을 정의하고, 파일은 구분 기호로 탭을 사용한다. 화면 하단의 'Next'을 클릭한다.
기본적으로 입력되는 컬럼의 데이터 타입이 string으로 되어 있다. 데이터를 보고 적당한 타입으로 변경해준다.
Apache Hive 활용
이때까지 HDFS에 데이터 파일을 업로드하고 테이블을 만들기 위해 아파치 HCatalog를 사용했다.
아파치 하이브은 Hadoop 클러스터에 대한 데이터웨어하우스 기능을 제공한다. HiveQL의 사용해서 테이블의 데이터를 확인하고 다른 DBMS에서와 같이 쿼리를 만들 수 있다. 하이브 사용을 쉽게 하기 위해 Beeswax 가 제공된다. Beeswax는 하이브로 대화형 인터페이스를 제공한다. 사용자가 검색어에 입력하면 하이브가 MapReduce를 사용하여 사용자에게 결과를 보여준다.
오른쪽에 있는 쿼리 에디터 창에서 쿼리 입력하고 Execute를 클릭하면 쿼리가 수행된다. Sqlplus와 비슷한데 이 창에서는 하나의 쿼리만 수행할 수 있다.
HCatalog 통해서 테이블을 생성했기 때문에 하이브가 자동으로 인식한다.
서브 메뉴에서 Tables를 누르면 로드된 테이블이 보인다. 나머지는 샘플로 들어있는 테이블들이다. 내용이 궁금하면 ‘Browse Data’를 눌러 본다.
이렇게 출력된 데이터는 사실상 아래의 쿼리가 수행되어 나온 결과이다.
테이블 스키마를 확인하기 위해 describe nyse_stocks 혹은 desc nyse_stocks 를 입력하고 Execute(이하 실행)을 눌러 내용을 본다.
(뒤늦은 후회지만 stock_volume의 컬럼타입을 bigint로 할걸 그랬나보다)
수행된 시간이나 내부 수행과정이 궁금하다면 Log를 눌러 확인할 수 있다. 길다고 해서 에러가 아니다.
Pig 활용
이번에는 피그 스크립트를 작성하고 실행한다. 왼쪽에 우리가 만든 스크립트의 목록이 보이는데 아직 만든게 없으니 안 보인다. 오른쪽 중간에 영역에 스크립트를 작성한다. HCatalog에 저장 한 테이블에서 데이터를 로드하고 필터링하고 종가 주가의 평균을 계산해볼 것이다.
피그에서는 헬퍼를 통해 statements, functions, I/O statements, HCatLoader(), user defined function 에 대한 템플릿을 제공함으로써 조~금더 쉽게 사용할수 있도록 도와준다.
1 단계 : 스크립트 명 입력
2 단계 : 데이터 로드
스크립트의 첫 번째 줄은 테이블을 로드한다. Hadoop 환경에서 HCatalog를 통해 다른 툴들과 스키마를 공유 할 수 있다. HCatalog은 쿼리 및 스크립트에서 스키마와 데이터 위치 정보를 고려하여 공통의 저장소에서 데이터들을 집중화 할 수 있다. HCatalog가 지원가능함으로 HCatLoader () 함수를 사용할 수 있다. 피그는 테이블명이나 알리아싱을 쉽게 할 수 있게 해주고 구조나 스페이스 할당 같은 것에 대해 신경 안 쓰도록 해준다. 즉 테이블 처리 방법에 대해서만 고민하면 된다.
a = LOAD 'nyse_stocks' using org.apache.hcatalog.pig.HCatLoader();
HCatLoader() 함수는 헬퍼에서도 제공해주는데 PIG Helper > HCatalog > load template 를 차례대로 누르면 입력했던 내용이 비슷하게 나온다. %TABLE% 은 테이블명이다. 로드하게 되면 어딘가에 넣어야 하니 앞에 변수(a) 잊지 말도록 한다.
3 단계 : IBM로 시작하는 모든 레코드를 조회
이번에는 로드한 레코드 중에 IBM에 대한 레코드만을 선택할 것이다. 피그에서 이 작업을 하기 위해 필터 연산을 사용할 것이다.
b = filter a by stock_symbol == 'IBM';
Pig helper > Data processing functions > FILTER template
참고로 대부분의 개발 툴이 그렇듯이 탭을 누르면 다음 항목으로 이동한다.
c = group b all;
Pig helper -> Data processing functions->GROUP BY template
여기에서 기본 템플릿에 by 가 있는데 이건 지운다;;
4 단계 : 반복과 평균 계산
모든 레코드들을 반복 연산을 하기 위해 그룹화된 데이터에 대해 ‘foreach’ 연산자를 사용한다. AVG () 함수는 stock_volume 필드의 평균을 구한다. 전체에 대한 평균이다 보니 한 개 값이 나올 것이고 나중에 확인을 위해 별도로 저장할 수 있다.
d = foreach c generate AVG(b.stock_volume);
Pig helper ->Data Processing functions->FOREACH template
dump d;
Pig helper->I/O->DUMP template
혹시나 블록이 이상하게 잡히거나 하는 것은 뒤에 세미콜론(;)을 안 찍었기 때문이다.
5 단계 : 스크립트를 저장하고 실행
하단에 있는 Save(저장) 버튼을 사용하여 스크립트를 저장하거나 Execute로 실행할 수 있습니다. 이 MapReduce 작업을 생성하고 실행 한 후 결과를 얻을 수 있습니다. 하단에는 작업 상태를 보여주는 진행바(progress bar)가 있다.
저장 버튼을 클릭하면 좌측에 My scripts에 나타난다. 실행을 눌러 작성된 스크립트를 실행해 본다. 시간이 좀 걸린다. 아니 많이 걸린다. (내 노트북도 힘들어 하고 있다)
작업이 완료되면 결과가 표시됩니다. 만약 결과가 나타나지 않아 스크립트가 실행될 때 발생된 로그를 확인 할려면 Logs 를 클릭한다. 그럼 어떤 에러 메시지인지 보여준다.
실제 에러가 났다;; 밑부분이 짤렸는데 내용은 b.stock_volum 이라는 것이 없다는 것이다. 위에 내용을 작성하면서 ‘e’ 를 빠뜨렸던 것으로 b.stock_volume 로 수정하면 정상적으로 수행된다.
결과는 결과 영역 위에 있는 녹색 버턴을 클릭해서 받을 수 있다. 작업 내역에 대해서는 Job Browser에서 확인 가능하다. 나의 경우에는 오타 때문에 여러 번 수행했던터라 마지막 한번만 Reduces까지 진행되었다.
일단 1부틑 여기까지 한다. 생각보다 시간이 많이 걸렸다.
'Biz > Data' 카테고리의 다른 글
Apache NiFi 시작하기 (0) | 2016.03.26 |
---|---|
Stream Processing: NiFi and Spark (0) | 2016.03.26 |
SAP Data Service Script (0) | 2014.09.23 |
SAP Data Service - Unable to locate BOE platform components (0) | 2014.09.16 |
Hortonworks Sandbox - Pig(피그)를 활용한 데이터 처리 - 2부 (0) | 2013.03.26 |
댓글