designed by ester - knowledge base 전문기업 · pdf file필자 소개 윤형기...
TRANSCRIPT
필자 소개
윤형기 임팩트라인 대표
윤형기 대표는 한국외대와 동 대학원(MIS)
을 졸업한 후 쌍용정보통신, 삼보컴퓨터, 한
국 썬마이크로시스템즈(상무, SunSoft 지사
장), 하이트론 (부사장) 등을 거쳐 현재 ㈜
임팩트라인 대표와 SGI Korea의 기술고문
을 맡고 있다.
2006년에 ‘가상화 스토리지네트워크’(홍릉
과학출판사)를 쓴 바 있다.
Hadoop과 분석기법(Analytics)빅데이터
지은이·
윤형
기
지은이·윤형기
오늘날의 빅데이터 물결은 2004년 Google의 논문이 발단이
된 Hadoop 프로젝트로부터 시작되었다.
그러나 이러한 빅데이터 기술이 갑자기 생겨난 것은 아니다.
한편으로는 분산컴퓨팅과 NoSQL 데이터베이스 등이 모태가
되었고, 다른 한편에서는 데이터 마이닝 기술과 R 등의 분석도
구가 뿌리가 되었다.
이처럼 새로운 컴퓨팅 패러다임으로서의 빅데이터를 제대로
이해하려면 Hadoop과 분석기술의 2가지 요소를 동시에 살펴
보아야 한다.
업무에 적합한 분석 알고리즘을 선택하고 이를 MapReduce
모델로 구현할 때 빅데이터 분석이 완성되는 것이다.
이 책은 이런 관점에서 빅데이터 기술을 총체적으로 설명하고
자 노력하였다. 이론적 배경과 함께 관련 예제와 사례를 덧붙여
서 분석가와 프로그래머는 물론 관심있는 이들이 빅데이터를 제
대로 이해하고 활용할 수 있도록 하였다.
Hadoop과
분석
기법(Analytics)
빅데
이터
오픈위드넷 (www.openwith.net) 은
개방형 표준기술을 추구합니다. 관련
분야의 컨설팅과 교육, 그리고 분야별
전문가 모임을 통해 지속적인 상호 발
전을 꾀하고 있습니다.
또한 이러한 노력의 일환으로 관련 분
야의 책을 지속적으로 출간하고 있습
니다.
OpenWithNet 총서
▶ 가상화기술과 스토리지 네트워크
(2006년)
▶ 빅 데이터: Hadoop과 데이터분석
기법 (2013년)
▶ 세만틱 웹과 차세대 인터넷 (근간)
▶ NoSQL 데이터베이스 – 일반이론
과 MongoDB – (근간)
Des
igne
d by
Est
er
빅데이터-표지_3차수정.indd 1 2013-10-04 오후 3:19:28
Hadoop과 분석기법(Analytics)빅데이터
지은이·윤형기
빅데이터-속표지.indd 2 2013-10-04 오후 2:37:06
2
터: Hadoop 터 분
출간 2013년 10월 3
은 윤 기
출판 퍼플
주 울 종 종 1 1번
www.kyobobook.co.kr
ⓒ 윤 기 2013
본 용의 전부 는 부를 재 용 면
반 권 의 동의를 으셔 다.
OpenWithNet 총
상 기술 스 워크 (2006년)
터: Hadoop 터분 기 (2013년)
세만 웹 세대 인터넷 (근간)
NoSQL 터 스 – 반 론 MongoDB – (근간)
3
목 차
차 .......................................................................................................... 3
I. 배경 ..................................................................................................... 11
1 데이터의 물결 .............................................................................. 11
(1) 데이터 대의 도래 .......................................................... 11
(2) 데이터의 징 ................................................................... 12
2. 슈퍼컴퓨팅 기술과 분산컴퓨팅 기술 ............................................ 15
(1) 슈퍼컴퓨팅 (HPC )기술 ......................................................... 15
(2) 분산컴퓨팅과 분산파일 스템 ............................................. 17
3. BI와 데이터베이스 ........................................................................... 22
(1) BI (Business Intelligence).................................................... 22
(2) 대규 데이터베이스와 NoSQL DB .................................... 26
4. Google과 Apache 프 .......................................................... 34
(1) Google 데이터 ................................................................... 34
(2) Apache 데이터 프 .................................................. 37
II. Hadoop ............................................................................................ 39
4
1. Hadoop 요 ................................................................................... 39
(1) Hadoop의 배경 ..................................................................... 39
(2) Hadoop의 version ................................................................ 41
(3) 징 ......................................................................................... 44
2. Hadoop의 아키텍 ........................................................................ 49
(1) 개요 ......................................................................................... 49
(2) Hadoop의 리 흐름도 ........................................................ 55
3. Hadoop의 기능요소 – HDFS와 MapReduce .............................. 57
(1) HDFS (Hadoop Distributed File System) ......................... 57
(2) MapReduce ............................................................................ 68
4. Hadoop 설 운 과 프 그래밍 ................................................... 93
(1) Hadoop의 설 와 운용 ........................................................ 93
(2) Hadoop 프 그래밍 .............................................................. 97
(3) 결론 ......................................................................................... 99
5. Hadoop과 관련된 프 (Hadoop 생태계) ......................... 102
(1) Pig ......................................................................................... 103
(2) Hive ....................................................................................... 105
5
(3) Hbase .................................................................................... 109
(4) ZooKeeper ........................................................................... 112
(5) Sqoop ................................................................................... 115
(6) Flume .................................................................................... 117
(7) 기능별 주요 Hadoop 관련 프 ................................ 118
III. 분 이론 ........................................................................................ 120
1. 개요 ................................................................................................. 120
(1) Analytics의 개념 .................................................................. 120
(2) 예측분 , BI, 데이터마이닝의 교 ................................... 122
(3) 데이터 분 을 위한 통계이론 기초 ................................... 126
(4) 예측분 (Predictive Analytics) ........................................ 129
(5) 종의 Analytics 활용 ........................................................ 131
2. 델링과 데이터의 전 리 ........................................................... 134
(1) 데이터의 전 리 문 ......................................................... 134
(2) 델링 ( 델개발) ................................................................ 142
(3) 기계 습 ............................................................................... 144
3. 주요 분 기 ............................................................................... 145
6
(1) OLAP 분 (DW/OLAP) ...................................................... 145
(2) 개념 술과 데이터 이산화 및 개념계층 생성 .................. 150
(3) 데이터 상호관련성의 분 ................................................ 154
(4) 분류 (Classification) ........................................................... 172
(5) 군집 이론 .............................................................................. 211
(6) 예측이론 ............................................................................... 241
(7) 의사결정 리(Decision Tree) ........................................... 246
(8) 스 림 데이터 (data stream)의 분 ............................... 249
(9) 계열 및 순차데이터에 대한 분 ................................... 253
(10) 이상 분 (Outlier Analysis) ....................................... 257
4. Analytics 도 ............................................................................... 262
(1) 상용 분 도 ...................................................................... 262
(2) 오픈소스 ............................................................................... 262
IV. 데이터 분 의 실 예 .......................................................... 268
1. Mahout를 이용한 군집 분 ....................................................... 268
(1) 개요 ....................................................................................... 268
(2) Mahout에 의 군집화 기능 ............................................... 271
7
2. 병렬형 빈발패턴 알고리즘 ........................................................... 281
(1) FP-Growth 알고리즘 ........................................................... 281
(2) 병렬형 FP-Growth 알고리즘 .............................................. 283
3. R을 MapReduce에 적용한 계열 데이터분 ......................... 289
4. Social CRM과 Social 네 워크 분 .......................................... 292
(1) 배경 – 전통적 (분 ) CRM ................................................. 292
(2) Social CRM .......................................................................... 295
(3) 소셜 네 워크 분 ............................................................. 298
5. 얼굴인 (보안)과 Hadoop ........................................................... 302
(1) 사례: 미 보스톤 마라톤 폭발 사건 ................................ 302
(2) 얼굴인 (face recognition) .............................................. 302
(3) HIPI ........................................................................................ 305
(4) 덧붙이는 말 – Minority Report? ...................................... 308
5. 부정 탐지와 MapReduce ............................................................. 313
6. 스 리밍을 이용한 R과 Hadoop의 혼용 .................................... 320
(1) R을 이용한 map 기능만의 현 ........................................ 320
(2) R 을 Map과 Reduce 두에 적용 는 경우 .................... 324
8
V. 데이터 적용 방 론 .................................................................. 328
1. 데이터 성 델 ....................................................................... 328
(1) IDB의 데이터 분 성 델 .......................................... 328
(2) Sprenger의 데이터 성 델............................................. 331
(3). 실 간 예측분 프레임워크............................................. 334
2. 프 방 론 ............................................................................ 336
(1) 데이터 주요 프 세스 ..................................................... 336
(2) 데이터 프 방 론 ................................................. 336
3. 데이터 맵 ............................................................................ 338
(2) 보완관계 의 Hadoop과 DW ........................................ 338
(3) Hadoop을ETL/전 리 기능으 이용 ............................... 338
(4) Hadoop을 ETL 기능으 이용 ........................................... 339
(5) Cloud 스 의 데이터 분 ................................... 339
4. Hadoop과 데이터웨어 우스 ...................................................... 341
(1) 문 의 ............................................................................... 341
(2) 양 의 교 .......................................................................... 341
(3) 공존 전략 – 최소한의 Hadoop DW .................................. 346
9
(4) Hadoop의 DW 적용 패턴 .................................................. 349
(5) Hadoop DW개발동향 – SQL on Hadoop ....................... 351
(6) 결론 - 보충논의 ................................................................... 352
5. 클라우 컴퓨팅과 데이터 ....................................................... 354
(1) 개요 ....................................................................................... 354
(2) Cloud 스 의 데이터 분 ................................... 354
(3) 데이터 플랫폼으 의 클라우 스 ..................... 355
VI. 데이터 – 결론에 대신 여 ..................................................... 357
부 : r 사용 ..................................................................................... 362
1. 개요 ................................................................................................. 362
(1) 징 ......................................................................................... 362
(2) 설 와 업환경 .................................................................. 363
2. 기본기능 실습 ................................................................................ 365
(1) 첫 걸음 .................................................................................. 365
(2) R에 의 데이터 .................................................................... 370
(3) r에 의 그래프 이용 ............................................................ 374
10
(4) r의 주요 명령어 ................................................................... 375
3. r 프 그래밍 ................................................................................... 378
(1) Loop과 vectorization ......................................................... 378
(2) R 에 의 프 그램 성 ..................................................... 381
(3) R에 의 성 .............................................................. 383
필 소개............................................................................................. 387
11
I. 배경
1 데이터의 물결
(1) 터 대의
터 으 증 다. 2011년을 기준으 Twitter
생되는 터의 양 8TB (Terabyte)를 넘 는
2012년 는 Facebook 만 100TB를 넘는 터
생 되 다. 기 인 는 기 1대 관련된
터 대략 640TB에 른다 현재 는 끝을 알 는
다. 끝 커 는 디 털 의 단위를 통 한
현상 을 할 다.
1 bit = binary digit
8 bits = 1 byte
1000 bytes = 1 Kilobyte
1000 Kilobytes = 1 Megabyte
1000 Megabytes = 1 Gigabyte
1000 Gigabytes = 1 Terabyte
1000 Terabytes = 1 Petabyte
1000 Petabytes = 1 Exabyte
1000 Exabytes = 1 Zettabyte
12
1000 Zettabytes = 1 Yottabyte
1000 Yottabyte = 1 Brontobyte
1000 Brontobyte = 1 Geobyte
의 한 는 만 카카오 의 문 메
2012년 기준 1 8천만 건 순 스 파 만 따져도
최 한 40GB의 터 쌓 을 것으 예상된다.
(2) 터의 징
면 한 터의 증 는 단순히 되는 양만의 문 까?
대 오늘날 터 의 현상을 흔히 다음 V3C 표현 다.
Volume – 터의 양 증
Velocity – “ 빨 !” , 실 간 분 대한 의 증
Variety – 기존의 된 터와 께
(unstructured) 터의 중 증대되 다. 대표 예 전
문(全文)검 , 스 닝 동 상, 상을
는 턴인 등 다.
Complexity – 위 3V와 께 실 간 공의 커 면
전반 으 터 증 게 되 다.
13
날 갈 한 현상은 되 다. 동안 되거 버
던 터는 살 움 는 재탄생 온 인 공간 의 든
클 , 든 항은 의 터 름(data stream)으 기 ,
존, 분 되는 세상 되 다. 오늘날 길거 의 CCTV, 대중교통 의
및 동상 한 기 되 분 되는 한 현상은 앞으
센 웹 (sensor web)1으 표현되는 센 의 편 및 간의 통신
(Internet of Things) 등 께 될 것 다.
기존의 터 터 (Big Data)
기 (GB)
~ (TB)
페 (Peta Bytes)
~ (Exa Bytes)
중 중 분산
(Structured)
(Semi-Structured 및
Unstructured)
안 인 터 델
(주 관계 터 델)
Flat Schema
는 No Schema
체계 으 된 Interrupt 체계 다단한 상 관계
1 Sensor web 란 종의 센 터를 인터넷 을 통 으
, 교환, 용 는 을 말한다. 히 OGC (Open Geospatial
Consortium: http://www.opengeospatial.org/) 는 SWE (Sensor Web
Enablement) 는 프 워크를 는 기 는 련의 웹 스용
interface와 통신 프 콜을 규 으 써 다른 센 워크 간의
통신을 케 다.
14
터의 장 큰 징은 운 방 을 통 으
선되 다는 다. 떤 의 오늘날 터를 통 는
것은 30년 전 두 던 것 다. 단 거 는
월 걸쳐 던 것 몇 간 ~ 면 게
된 것인 것 온 변 는 히 운 세상을 예 한다
언 다. 기 의 결 의 신 신상품 프 세스의 단 은
론 으 는 전 분 을 통한 인별 춤 진단은 의료 험
체계의 근본 변 를 올 것 다. 안상으 실 간 를
통한 상인 실현되 종 기술의 변 는
다.
컨대, 터를 통한 간의 단 , 용의 ,
터 분 의 실현 등은 단순히 터 의 선 는 상대 ,
산술 원을 넘 거 생 못 던 것들을 게
기존 전산의 다 을 꾸 침 생활양 까 향주게
된 것 다.
15
2. 슈퍼컴퓨팅 기술과 분산컴퓨팅 기술
(1) 슈퍼컴퓨팅 (HPC )기술
. HPC와 분산컴퓨팅
흔히 터 면 기 운 기술 탄생한 것 생 기
쉽 만 실 는 동안 으 전, 된 기술의 재탄생으
는 것 을 것 다. 중 슈퍼컴퓨터 , HPC (High
Performance Computing) 다. CDC 의 Seymour Cray
1960년대 한 슈퍼컴퓨터는 전을 거듭 20세기 는 병렬
슈퍼컴퓨터 (MPP: massively parallel supercomputer) 거듭 게
되 다. 기 MPP란 천~ 만 의 프 세 를 장 한 대규
병렬컴퓨터를 말 며 PC 는 거 분 할 두를 못 던
것들 슈퍼컴퓨터 는 많은 분 와 뮬 션 등
용되 다. 슈퍼컴퓨팅은 다음 같은 전 다.
컴퓨터 클 스터의 : 대의 컴퓨터를 밀결 (tightly-
coupled) 의 클 스터를
MPP (Massively Parallel Processing)기술: 컴퓨터를 느
슨 게 결 (loosely-coupled) 을 대
컴퓨팅 (Grid Computing): 대의 원 컴퓨터를
연결한 대규 분산 컴퓨팅
대표 인 HPC 현방 으 다음의 2 를 들 는
들 두 터 기술의 전 인 향을 주 다.
병렬 (Parallel Computing) 기술
분산 컴퓨팅 (Distributed Computing) 기술
16
한편 슈퍼컴퓨터 싸 만 을 대 활용 기
위 는 프 밍 상의 부 필 다는 을 간 할
다. , 슈퍼컴퓨터 의 프 램 을 위 는 분산 프 세싱을
위한 MPI(Message Passing Interface) PVM(Parallel Virtual
Machine) 등 같은 브 를 용 코딩 거 Beowulf와
같은 오픈 스 솔 션을 용 한다. 클 스터 의 만큼
을 분할 들 상 간 메 를 전 는 방 으 병렬 를
진 켜 기 때문 다.
뒤 듯 터는 기존의 HPC의 다른 습 며 용
한되 던 슈퍼컴퓨터 대중 되 는 으 볼 다.
체 으 다음의 슈퍼컴퓨터 기술 터 용되 다.
. 슈퍼컴퓨터 기술의 응용 터
슈퍼컴퓨터 터 기술 기 한 대표 인 것은 다음 같다.
터의 (Data Aggregation) – 터의 규
커 면 한대의 컴퓨터 장 거 관 기 힘들 므
대 용한다. 터의 대표 인 Hadoop 는
HDFS 는 인 분산파 스템을 기본으 되 Lustre파
17
스템 같은 기존의 병렬 파 스템 손쉽게 용
할 게 설계되 다.
터 분 (Data Analytics) – 슈퍼컴퓨터 연산 중
의 분 델링 기 용되 는 들 론 분
델 터 분 의 되 다.
터 (Data Visualization) – 한 분 델 대량
의 분 결 는 전문 외 기 힘들 다. 따
표현 히 동 표현(Dynamic visualization)을 통 한
터 체와 대한 연산의 다 원 결 를 인간
기 쉽게 는 한 터 대
용되 다.
(2) 분산컴퓨팅 분산파 스템
. 분산컴퓨팅
분산 컴퓨팅(Distributed Computing) 란 대의 컴퓨터를
연결 상 협 게 으 써 컴퓨팅의 효율을 는 것을
말 는 넓은 의 의 분산컴퓨팅 는 의 컴퓨팅 원을 의
스템 안 밀결 연결한 병렬컴퓨팅까 키기 한다.
분산컴퓨팅의 기본 인 은 대(scalability)와
용 (High Availability) 다 다.
선 컴퓨터의 을 대 키기 위한 방 는
대(Vertical scalability)와 평 대 (Horizontal
scalability)의 2 다.
대
대는 다음 방 으 컴퓨터의 을 히는 것을 말한다.
18
연산 다 한 CPU
메 , 디스크 는 디스크 컨 롤 (HDC) 등을 증
설 거 의 것으 교체
통신연결을 은 대 의 통신 선으
I/O 면 Non-blocking I/O와 동기 I/O를
병렬 프 밍 델의 재설계 (예: 메 전 방 의 선
(MPI: Message Passing Interface), blocking/buffering 등)
Event 선을 위한 반
대는 Scale-up으 표현되며 단 HPC
프 램 되기만 면 후부터는 스템 변
용할 는 장 다. 반면 컴퓨터의 양 질
용 기 으 게 된다는 단 다.
평 대
반면 평 대는 다음 방 으 컴퓨팅 을 인다.
컴퓨터 (Node)의
기 상 Peer-to-Peer 델 Master-Slave 델 등의 용.
평 대를 Scale-out으 표현 는 다 기존 투 를
진 인 선을 할 다는 장 다. 예컨대
2 의 필 면 기 동 컴퓨터를 몇 대 장 는
방 으 결 는 것 다.
용 의
분산컴퓨팅을 통한 용 의 는 다음 같은 방 을 동원한다.
장 을 위한 2중 와 Failover 기 및 밸런싱
주 터의 본을 통한 예방
19
. 분산 파 스템
파 스템 란 터를 체 효율 으 장, 관 기 위
만들 진 틸 프 웨 통 파 단위 관 한다. (반면
위의 체 는 통 블 (block)단위 장 및 전송한다. )
한 파 스템은 컴퓨터 기부터 운 체 의 환으 전
으며 오늘날 운 체 의 연장선 상 으 전 다.
분산 파 스템은 분산환 대의 컴퓨터 파 스템을
께 용할 는 다. , 다 용
원 의 파 을 용할 때 편을 느끼 않 기 위한 종 투명
(transparency)의 념 되 기 ( 터의
및 동기 등) 및 캐싱 (caching) 기술을 통 안 선을
다.
한편 파 스템 분산컴퓨팅 와 찬 평 및
장 방 존재 는 최근 는 것 상 스
념으 까 전 다. 분산파 스템의 대표 인 것은 다음 같다.
NFS (Network File System) – 1980년대 된 최 의
분산 파 스템 프 콜 워크 브를 컴퓨터
의 디 mount 용 는 방 다.
Lustre – 병렬 분산파 스템으 대규 클 스터 컴퓨팅
주 용되 으며 GPL v2 센스 따른 오픈 스
다. Luster(‘ 스터’ 는다)는 Linux와 cluster를 킨
명칭 며 오늘날 대부분의 슈퍼컴퓨터 용 중 다.
크 프 의 DFS (Distributed File System) – 크
프 SMB를 기반으 재 한 분산파 스템 다.
GFS (Google File System) – GFS는 Google 한
인 분산파 스템 다. (오픈 스 님). 는
GFS 대 살펴본다. 터 기술의 기반 되기 때문 다.
20
GFS
Google은 당 부터 검 털 을 으므 대규
터 필연 다. 한 벤 한 Google은 PC를
연결 는 scale-out 방 을 기 때문 컴퓨터의 웨 장
다. 히 만대의 컴퓨터 된 대규 클 스터 는
별 컴퓨터의 장 는 예 된 것 따 당 부터 다음
같은 항 설 되 다.2
컴퓨터 체의 장 대 를 원 는 파 스템의 선
대용량 파 의 원할 것. 히 웹페 등의 스 및
터와 같은 대량의 터 대한 효율
관 용 할 것.
Write-once, read-many 및 파 (Append) 기
대규 의 streaming 기 ( 히 streaming read )3
들 항을 결 기 위 다음의 설계상의 원 되 다.
길 의 파 단위 (64MB)
파 본(replicate)의 활용
2 실 Google 터센터의 버는 대부분 CPU당 4 core 만
GPU는 장 되 않으며 버 당 메 크기 크 않다 한다.
한 NAS를 거의 용 않 버들은 반 Ethernet 스위 연결되
다 한다.
3 Stream 대 는 뒷부분 (III. 분 기 ▶ 3.주 분 기 ▶ (9)
스 터 세히 살펴 봄.
21
Master-Slave 방 을 통 한대의 스터 컴퓨터 전체의 메
터를 관 한다.
터 caching기 은 용 않는다.
파 스템 관련한 class의 상 체계를 으 써
snapshot, append 등의 custom API 을 손쉽게 다.
뒤 듯 한 GFS의 기술은 상당부분 Hadoop 파 스템
용되 터 기술의 근간 되 다.
22
3. BI와 데이터베이스
(1) BI (Business Intelligence)
.
BI 터 전 중 한 할을 다. 원 BI 는 념
출현 기 전 DSS (Decision Support System) 는 름으
의 결 컴퓨터의 원을 는 연 다. 주
중간관 및 최 의 전략의 결 을 던 것으
것 후 BI 전 다4. BI를 다음 같 분류할 다.
솔 션 설명
전략 원의
BI
BSC Balanced Scorecard. 균 관 . 의
전 전략 표 실현을 위 4 (재 , ,
부프 세스, 습 장) 관 의 표를
출 단기 의 재 표 와 장기
표 들 간의 를 는 것.
VBM Value-based Management. .
의 결 의 기준을 계상 출, 중
벗 기 중 으 본 률(ROIC)을
평 의 기준으 는 관 기 을 말한다.
4 1989년 Gartner의 H. Dresner 관련 념을 괄 는 용
"business intelligence" 는 용 를 안 .
23
솔 션 설명
ABC Activity Based Costing. 활동기준 원 계산.
간 를 기준 전환 으 써
투 원 품 는 스 변환되는 을
히는 원 계산 방 .
분 원의
BI
OLAP On-line Analytical Processing. 다양한
대 으 를 분 는 을 말한다
기존 스템의
장
ERP,
CRM
ERP, CRM, SCM (Supply Chain Management)
등의 솔 션 신의 기 을 장 BI기 을
공 는 것
BI 운 을
위한 인프
ETL Extraction-Translation-Loading. 기 의 종
전산 스템 터를 출 /변환 후
터웨 스 재 는 것.
DW Data Warehouse. 다양한 운 스템 출,
변환한 후 를 통 한 터 장
(repository)를 말한다
전 용
BI
Portal 털. 인터넷 는 웹 는
의 용 필 는 다양한 스를
종 으 은 곳
BI는 다양한 위 념을 는 넓은 념 만 기 히
터와 관련 주 할 것은 터웨 스와 OLAP 다.
. DW/OLAP 터 분 (Analytics)
OLAP (Online Analytical Processing)은 OLTP 대응되는
념으 OLTP 상 ( , 반 되는) 거 의 대한 것 면
OLAP은 외부의 터를 대상으 종 분 을 원 는 을
24
는 것 다. , 종 기 을 용 를 다양한
분 는 것 다.
OLTP OLAP
대표 기 기간 (Operational)
스템
전 Data Warehouse와
부문별 Data Mart
터 원천 거 터 중 다양한 스템 출, 변환
거 원 의 결
터의
징
프 세스 상의
세부 항 (snapshot)
면 종 된 다 원
(Multi-dimensional)
터의
최종 용 의한 짧
신 한 및 갱신
상대 으 긴 간 되는
batch
질의
(Query)
표준 되 상대 으
단순한 질의
델링 반되는 상대 으
한 질의
통상 빠른 응 선을 위 는 많은 준
및 간 . ( 월 ~
주 의 준 필 )
터 크기 교 터 크기
교 음 ( 거
터는 archive)
통계 등을 위 많은 양의
터를 다 는 대부분
DB 설계 많은 DB 블을
규
다 원 델링 통한 cube 설계
원 실 간 터 를 위
필
기 대신 당 터
스의 재 재를 실 기
.
25
터웨 스5는 분 을 위 든 터를 한 곳 은
것으 때의 터 스는 OLTP의 것 는 을 게
된다. (OLAP 는 다 원 분 을 위한 Cube 설계를 는 반면
OLTP 는 DB 블의 규 를 주된 으 한다.)
뒤 듯 터 당 는 검 스템 관련 되 만
후의 전 및 주된 활용 는 BI와 밀 한 관련을 게 되 다.
히 한 현상은 터를 한 후의 분 단계 두 진다.
터 DW/OLAP의 험 대 반 되 으면 한
징을 는 터와 DW를 교 다.
Data Warehouse 터
터의
징
(atomic, structured)
터
터 는 semi-
structure Bulk 터
터
델
Cube 설계 = Fact 블 +
Dimension 블
(key, value) 단순
대상 터 을 장
기 항 터의 히 장 기존 DW의 으
히 밀 들 는 현상을
5 DW 대 는 뒤의 V. 터 용방 론 ▶Hadoop DW
세히 살펴본다.
26
(2) 대규 터 스와 NoSQL DB
. 대규 터 스 (Large Database)
본 의 주 터 면 터 스 존재 는 ?
오늘날 Small database 와 big database 는 것을 따 별 는
않는다. 기존 터 스 다 훨씬 큰 규 를 대상으 한
대 의 터 스 존재 는 것은 실 다.
터 스 증 터 스 대 터 스
메인 메 만 운 한대의 버 운 대 버 운
DBA 용 1~2명의 DBA 람의 DBA
10만 의 record 10만 ~1000만 의
코
1000만 ~ 의
코
터 <10 GB 10GB ~ 40GB > 40GB
No Partitions 최 한의 Partitioning 대규 의 분할 6
6 샤딩 (Sharding)은 터 스를 의 DB 버 분할 분산
는 기 다. 체 분할기 은 다음 같 다양 다.
방 설명 징
Vertical
Partitioning
블 별 버를
분할 는 방
현 간단 , 전체 스템
큰 변 필 으 터
거대 면 샤딩 필
27
대규 터 스 는 다 슈 장 크며 를 위
대규 의 분산 클 스터 환 의 께 별한 의 index
관 기술 동원한다. 할 는 관계 체를 기 터
간의 consistency 델을 훨씬 완 으 써 앞 언 한 평 장
용 을 기 한다. 최근 된 대 터 스 관 을
으 는 것은 다음 같다.
HBase Cassandra Vertica CloudTran HyperTable
장 Key기반
NoSQL
Key기반
NoSQL
SQL 기반 OLTP
빠름
단 다,
Tool부
다,
Tool부
체
기술
체
귀 기술
기
기
항
오픈 스 오픈 스 상용(HP) 상용 오픈 스
한 터 스의 운 기류를 총괄 으 는 념은
NoSQL 터 스 다.
(Range)기반
Partitioning
Table 크기 커질
때 버를 분 는
방
- 터를 분할 는 방
예
Key 는 Hash
기반의 Partitioning
Hash 의 계산
따 버를
선
Hash 의 선 중
28
. NoSQL DBMS
터 는 터 큰 중을 기 때문 된
(atomic) 터를 중 으 한 기존의 관계 터 스는
않은 많다. 대 대안 되 중
NoSQL 터 스 큰 반향을 다. NoSQL 터 스는
대부분 Key와 대응되는 Value – , (Key, Value) 의
pair – 터를 관 한다는 징을 진다.
key-value pair란?
key-value pair (KVP)란 연관 을 진 2 터 진
으 때 key는 한 을 는 별 value는 key
의 별된 터 는 대한 주 을 말한다. 예컨대 key
름(name) 면 value는 름 당되는 용 인 것 다
Key-value pair는 흔히 참 표 (lookup table), 쉬 블 (hash
table) 등을 통 현되는 넓게 면 프 램 상의 든 변 와
변 의 종의 key-value pair 할 을 것 다.
예를 들 다음 같 기술된 상황을 .
key value
country 대한민
city 울
year 2013년
체 표기 방 은 솔 션 따 다르 만 MongoDB 및 Python의
다음 같 표현한다.
{ "country" : "대한민 ", "city" : " 울", "year" : 2013 }
29
Java의 방 으 대표 인 것은 Map을 용 는
것 다. , Map을 실 킨 HashMap ( 동기 ) HashTable
(동기 )를 용 면 된다. 예컨대 다음 같 면 된다.
Map map = new HashMap();
map.put("country", "대한민 ");
map.put("city", " 울");
map.put("year", 2013);
쉬 블 (hash table)
한편 (Key, Value) pair의 동 원 를 기 위 쉬 블을
는 것 중 다. 한 쉬 블의 동 원 터의
(key, value) pair의 부동 원 대 현되기 때문 다.
선 쉬 블 란 key를 효율 으 장 관 기 위
만들 진 종의 참 표(lookup table) 다.
Hash 블은 싱 의 만들 며 의 key를
위 hash bucket 장한다. 때 bucket 란 key value pair의
다. 용 key 당 는 value를 으 할 때
key를 bucket을 뒤 당 key-value pair를 게 된다.
의 key 의 bucket 당될 으므 hash 블
설계의 은 최대한 key-value pair를 분 는 것 다.
30
NoSQL DBMS는 대용량의 터 및 의 터 스
히 며 프 밍 용 한 월 다. SQL
외의 방 으 터를 (Query)한다는 의 름 붙 진
NoSQL은 최근 기존의 관계 터 스의 SQL까 는
념으 장되면 “Not Only SQL” 장 게 되 다.
NoSQL 터 스의 4 종류
체 현방 따 다음 같 분류할 다.
key-value store 델: key/value lookup 방 으 터를 관
는 Amazon의 Dynamo 대표 다.
Column Families: Google BigTable 논문 된 것으
의 key를 의 attribute (column) 연결 킴으 써
column은 종의 hybrid row/column을 장 게 된다.
HBase, Cassandra 대표 예 다.
문 (Document) 중 터 스: semi-structured (예
를 들 JSON 7 )의 문 터를 장 는 CouchDB,
MongoDB 한다.
프 터 스: 프 론 의거 며 Neo4j 등 다.
7 JSON (JavaScript Object Notation)은 람 컴퓨터 두 할
설계된 스 기반의 터 교환의 표준 다. JavaScript 언 의
표준 따 되 으 다른 떤 컴퓨터 언 용 다.
체를 스 장 거 워크 상으 전송 변
(serializing) 는 것 용 문 간략 XML을 대체 는
기술 인기를 다.
31
터의 대표 인 Hadoop 의 터 스는 HBase 며
Google의 BigTable을 상당부분 방 다. 한 Cassandra는
HBase 장 근 한 것으 “BigTable Dynamo의 혼
솔 션” 할 다. (HBase 등의 NoSQL 터 스 대
뒤 설명할 예 )
품별 징을 다음 표 다.
장단 HBase Cassandra Vertica MongoDB Hyper-
Table
장 Key 기반
NoSQL,
Cloudera 원
Key 기반
NoSQL,
Amazon
원
Closed-
source,
SQL표준,
용 용 ,
상
,
질의
다 .
Document-
oriented.
든
full-index
공
HBase
대용,
오픈 스,
빠름
32
장단 HBase Cassandra Vertica MongoDB Hyper-
Table
단 다, tool
부 , 단순한
queries
다, tool
부 ,단순한
queries
벤 의존 Arbitrary
터
는
한 용
후 주 .
검증
완벽
않음
신규
용 면 은
솔 션 됨
설
까다 움.
HDFS와
, 완전
분산 스템
기존
SQL기반
appl.을
장 는
용
대안으
검 는
것을 권장
SQL 교
관계 터 스 는 터 게 ACID8 기준을 면
주 별 Table을 만들 들 상 간의 관계를 relation으 규 한다.
(RDB 의 relational 란 한 블 상 간의 관계를
뜻 는 것 다.)
한 DB 대한 질의 SQL문을 용한다. SQL 란
종의 선언문 (high-level declarative language)으 된
터 대 용 는 질의 9 다음 몇 단계를 거쳐
된다.
8 Atomicity (All or Nothing), Consistency (referential integrity 문 ),
Isolation 및 Durability를 의 며 transaction 의 침 된다.
9 SQL Hadoop은 기 상 완 면 다. SQL을 Hadoop
위 용 는 장 듈 되 기 때문 다.
33
질의사항수동입력
Query parsing
Query 분
Query 최적화
Query 실행
결과출력
런 RDB 규 (normalization) 규 을 철 히 준 던
반면 XML, JSON 같은 는 인위 변 을 통 다.
반면 터 는 터의 중 관계 DB와는
다른 방 으 터를 다. , 터 는 터의
체 방 을 프 램으 실 한다. 때 터를
<key, value> 표현 터의 의 순 용
프 램 한다. 결 SQL 의 질의 실 계 까
용 ( ) 는 것 다. 터 ( NoSQL)은
설 게 런 때문 훨씬 다양 게 터를 표현할 으며
concurrency 편 기 으 선되 다.
34
4. Google과 Apache 프
(1) Google 터
BC (기원 전) AD (기원 후) 대 분 는 것
빗대 기술 전단계별 대 분 다. , 컴퓨터 전
(BC: Before Computer) 컴퓨터 후 (AC: After Computer)
거 인터넷 전 (BI: Before Internet) 인터넷 후 (PI: Post
Internet)으 기 는 .10 설 는 설명 중
Google의 등장 할 다. 히 검 인 Google은 든
론을 깊 웹을 대상으 방대한 프 워크를
다.11
터 는 Google 다. 스 기부터
터 대한 연 는 은 단 MapReduce
GFS 않 계 되 방대한 프 워크를 다.
10 통 술 및 방용으 만 용되던 인터넷 본 의 상용 ( 통
1994년)를 기점으 .
11 한편 글 는 히 검 의 PageRank 알 즘 선 대
론을 용 다. 뿐만 광 의 Game 론을 Google
Maps 프 론을 용 는 등 을 활용 다. 컨 은
Google의 든 품 스 할을 한다 다.
35
듈 (stack)의 대략 인 용은 다음 같다.
GFS: 터 장
MapReduce: 터
MyDQL gateway: 터 (ingest)
BigTable: 대규 터 공
Sawzall: 메인 언 (DSL: domain specific
language)
Evenflow (왼 ): 한 workloads의 연결
Evenflow ( 운 ): 스케쥴링
Dremel (오른 ): Columnar storage + 메 터
Dremel (왼 ): End user의 터 질의(query)
Chubby: 스템 의
한 Google의 터 관련 프 워크를 종의 참 델
다 의 한 인터넷 름의 을 다.
들 결 은 스란히 오픈 스 으며 상당 는 Apache
프 등재되 전세계 의 인 참 를 다.
36
Sqoop는 종의 SQL to Hadoop 으 JDBC 터
스를 Hadoop으 import 는 기 을 진다. Cloudera .
Pig는 Dataflow 향의 언 인 Pig Latin의 컴파 다.
Hive는 SQL기반의 터웨 스 Facebook .
Oozie는 Hadoop의 job 대한 워크플 /coordination
스 프 웨 Yahoo 다.
37
상을 한 든 프 웨 의 은 주 만
Apache 프 등재한 오픈 스 프 웨 는 공통 을 진다.
결 으 반인으 는 터 대한 거대한 프 워크를
Apache 오픈 스 용 거 참 할 게 된 것 다.
(2) Apache 터 프
터를 효율 으 는 은 Hadoop 전
현재 다양한 다. 12 후 논의는 주
대표 터 프 인 Hadoop및 와 관련된 주 Apache
프 를 중 으 진 될 예 다. 다만 한 념할 것은
Hadoop의 MapReduce, HDFS, HBase 등 중 위 를 기는
만 전체 관 는 20 의 관련 프 거 줄
연결되 으며 순간 으 운 프
안되거 되 다는 다.13 따 전체 인 전체 균 을
면 Hadoop 프 를 근 는 것 중 다.
12 예컨대 다음의 Hadoop Fatigue 는 논의를 살펴 볼 것.
http://www.bytemining.com/2011/08/hadoop-fatigue-alternatives-
to-hadoop/
한편 다른 대표 터 프 HPCC Systems 를 들 는
ECL 는 체 언 기반의 프 밍 델을 통 터 를
다. ( http://hpccsystems.com 참 )
13 Apache 프 는 후 Incubation 프 되 후 한
절 를 거쳐 본 프 등재된다. 최근 중 된
터 근거한 터웨 스 프 인 tajo incubation
프 선 된 다. (http://tajo.incubator.apache.org/ )
38
Hadoop을 중 으 살펴 면 는 와 같 HDFS와
MapReduce를 (core)으 기 HBase, Pig, Hive 등
밀 게 연결되 으므 다음 장 들 을 기 한다.
268
IV. 데이터 분 의 실 예
1. Mahout83를 이용한 군집 분
(1)
. Mahout 프 의
Mahout는 Apache프 의 한 분 진 되 는 기계 습용
Java 브 다. 기계 습 란84 컨대 '대상 터 대
컴퓨터 알 분 할 을 는 것'을 말 는 간
런 기 터 닝 솔 션들 현되 활 히 용되
다. 다 최근 Hadoop의 MapReduce 프 워크 활용을
전 한 기계 습 프 램으 Mahout 되 인기를 끌 다.
Mahout는 Lucene프 되 되 다. 스 검
및 스 프 인 Lucene 스 닝 관련된
프 램 꾸준히 되 2008년 를 Mahout 프
키게 된 것 다. 별 프 한 기
Mahout는 Taste 는 별 의 기계 습용 프 램 흡 짧은
간 의 계기를 다. Mahout와 관련된
종 프 으 표현되 다.
83 Mahout는 흔히 ' ' 음한다.
84 앞 기계 습을 “인공 의 한 으 람 닌 컴퓨터
습할 알 즘을 연 및 분 , 는 기술” 의한 다.
269
다 중 한 것은 Mahout 터 닝 알 즘 몇 를
현 다는 것 외 들을 현 Hadoop의 MapReduce
프 워크와 결 을 다는 것 다. 계산 많은 닝은
컴퓨터의 큰 메 와 연산기 을 만 Mahout는 최대한
MapReduce기 을 활용 터 분 다 용 졌다.
. Mahout의 설
Mahout 다른 Java 응용프 램 설 와 찬 JVM 위
동 므 대한 환 선 한다. 위
Maven 의 설 필 다. 는 Mahout 현재 활 히
진 중 update와 upgrade 빈번 므 들 관 를
동 기 위한 것 다. , 브 의존관계 및 컴파 관 를
Maven 는 build 및 release관 프 램을 통 실 한다.
다른 건으 는 Mahout는 히 Hadoop의 MapReduce
분산 기 의 활용을 전 므 Mahout의 운 을 위 는
Hadoop을 설 한다. 울 프 램의 및 을 위한
환 85을 선 한다. , 선 한 IDE Mahout 프 를
생 는 방 으 Mahout를 설 한다.
85 Eclipse, NetBeans 등을 인의 취향 따 선 .
270
다. Mahout 공 는 기
Mahout는 떤 프 못 않게 활 히 진 중 며
운 기 들 되 으므 당 프 현황을 홈페 를
통 인할 필 다. 2013년 7월 현재86 Mahout는 다음 같은
기 을 공한다.
Collaborative Filtering
천 스 – 예: Amazon의 분 따른 천.
군 (clustering)
K-Means,
Fuzzy K-Means
Mean Shift clustering
Dirichlet process clustering
LDA (Latent Dirichlet Allocation)
빈 턴 닝
분류 (Classification)
Naive Bayes 분류기
Random forest 의 결 분류기
기 는 Mahout의 군 대 만 살펴 본다. 외의 기
대 는 Mahout 프 (mahout.apache.org)를 참 .
86 version 0.7
271
(2) Mahout 의 군 기 87
. 첫 : 단순 표 터의 군 례
군 현 중 한 것은 다 항 간의 질 을
떻게 판단 를 떻게 프 램 표현할 것인 의 문 다.
한편, 앞 는 군 관련 근 을 살펴 본
는 Mahout 용 는 체 알 즘 중 기 는 히
대표 인 알 즘의 인 k-means를 용 기 한다.
k-means
fuzzy k-means
canopy
기
단순한 예를 통 Mahout 용방 을 살펴 본다. 다음 같 x-y
표계 상의 으 표현되는 9 의 (point) 주 졌다 .
다음 페 의 표 당 9 터 되 오른편
를 x-y 표면 표 다.
들 9 을 Mahout를 용 2 룹으 군 는
것 기 의 용 다. 선 들 터를 프 램
기 위 는 진의 터 맷을 SequenceFile 표현한다.
87 Mahout를 이용한 군집화 사례에 대한 설명은 Sean Owen (외), Mahout
In Action, 2012의 해당부분을 인용 및 정 다.
272
(x 표, y 표)
(1,1)
(2,1)
(1,2)
(2,2)
(3,3)
(8,8)
(8,9)
(9,8)
(9,9)
흔히 터(vector)란 '크기와 방향을 동 는 량'을
뜻 만 Mahout 는 터의 를 ordered list의
표현한 것을 의 한다. 히 단순한 예 는 를 2 원 표상의
대한 터를 ordered list 표현한 것으 볼 다.
먼 k-means 알 즘 필 한 다음 파 터를 한다.
SequenceFile: 할 터 와, 군 별 중 대한 를
기 한다.
평 대한 . 평 의 다양한 거 념
대 앞 살펴본 다. EuclideanDistanceMeasure의
Euclide 거 를 용할 때 용된다.
convergenceThreshold : 기 된 를 출 으 군
반 으 진 되는 한 반 을 계 할 부
대한 판단기준을 낸다.
터 대한 Vector
들 를 다음의 순 군 을 한다.
273
입력 데이터
Vectorizatoin
· 입력데이터를
vector형태 변환· Vector를 해당
위치에 기
중심부 초기화
· 목표 군집
(grouping)의 중심위치를 지정
군집화 (clustering) 업을 반복수행
출력디렉토리 업결과를 획득
을 는 Java 프 램 다음 같 되 다.
public class MahoutClusterFirst {
public static final double[][] points
={{1,1},{2,1},{1,2},{2,2},{3,3},{8,8},{9,8},{8,9},{9,9}};
public static void writePointsToFile(List<Vector> points,
String fileName,
FileSystem fs,
Configuration conf) throws IOException {
Path path = new Path(fileName);
SequenceFile.Writer writer
= new SequenceFile.Writer(fs, conf,
path, LongWritable.class, VectorWritable.class);
long recNum = 0;
VectorWritable vec = new VectorWritable();
for (Vector point : points) {
vec.set(point);
writer.append(new LongWritable(recNum++), vec);
}
writer.close();
}
public static List<Vector> getPoints(double[][] raw) {
List<Vector> points = new ArrayList<Vector>();
for (int i = 0; i < raw.length; i++) {
double[] fr = raw[i];
Vector vec = new RandomAccessSparseVector(fr.length);
vec.assign(fr);
274
points.add(vec);
}
return points;
}
public static void main(String args[]) throws Exception {
int k = 2;
List<Vector> vectors = getPoints(points);
File testData = new File("testdata");
if (!testData.exists()) {
testData.mkdir();
}
testData = new File("testdata/points");
if (!testData.exists()) {
testData.mkdir();
}
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
writePointsToFile(vectors,"testdata/points/file1",fs,conf);
Path path = new Path("testdata/clusters/part-00000");
SequenceFile.Writer writer = new SequenceFile.Writer(
fs, conf, path, Text.class, Cluster.class);
for (int i = 0; i < k; i++) {
Vector vec = vectors.get(i);
Cluster cluster = new Cluster(
vec, i, new EuclideanDistanceMeasure());
writer.append(new Text(cluster.getIdentifier()),
cluster);
}
writer.close();
KMeansDriver.run(conf, new Path("testdata/points"),
new Path("testdata/clusters"),
new Path("output"),
new EuclideanDistanceMeasure(),
0.001, 10, true, false);
SequenceFile.Reader reader = new SequenceFile.Reader(fs,
new Path("output/" + Cluster.CLUSTERED_POINTS_DIR
+ "/part-m-00000"), conf);
IntWritable key = new IntWritable();
WeightedVectorWritable value
275
= new WeightedVectorWritable();
while (reader.next(key, value)) {
System.out.println(
value.toString() + " belongs to cluster "
+ key.toString());
}
reader.close();
}}
위 프 램 는 주 진 터를 2 의 룹으 기 위한
군 의 출 으 (1,1) (2,1)의 2 을 는
따른 산출 다음 표 되 다.
1.0: [1.000, 1.000] belongs to cluster 0
1.0: [2.000, 1.000] belongs to cluster 0
1.0: [1.000, 2.000] belongs to cluster 0
1.0: [2.000, 2.000] belongs to cluster 0
1.0: [3.000, 3.000] belongs to cluster 0
1.0: [8.000, 8.000] belongs to cluster 1
1.0: [9.000, 8.000] belongs to cluster 1
1.0: [8.000, 9.000] belongs to cluster 1
, 맨 음 되 던 9 의 들 표 터 따 cluster-0와
cluster-1의 2 룹으 군 되 음을 알 다.
276
앞 듯88 거 념 는 상황 따 선 게
되는 Mahout 브 EucliideanDistanceMeasure 외
다음의 다양한 거 공되 다.
SquredEucliideanDistanceMeasure
ManhattanDistanceMeasure
CosineDistanceMeasure
TanimotoDistanceMeasure
WeightedDistanceMeasure
들 의 용은 름으 쉽게 눈 챌 거
대한 설명 앞 부분 으므 주 거 용을 으
표현한 것을 는 것으 대신한다.
위 중 왼 Euclid 거 와 Manhattan거 계산을 교
다. 오른 는 cosine 의한 거 계산방 을 주 다.
88 III.분 기 ▶ 3. 주 분 기 ▶ (5) 군 론 ▶ ( ) 간
277
한편 살펴본 9 의 대한 표 터 위의 다른
거 를 용한 결 다음 같다.
거 반
0번 군
는 vector
1번 군
는 vector
EucliideanDistanceMeasure 3 0,1,2,3,4 5,6,7,8
SquredEucliideanDistanceMeasure 5 0,1,2,3,4 5,6,7,8
ManhattanDistanceMeasure 3 0,1,2,3,4 5,6,7,8
CosineDistanceMeasure 1 1 0,2,3,4,
5,6,7,8
TanimotoDistanceMeasure 3 0,1,2,3,4 5,6,7,8
위 결 를 면 반 다르 결 한 음을 알
다. 는 거 의 절대 열 때문 기 다 용 분 따
한 을 는 것으 볼 을 것 다.
. 둘째 : 턴의 군 례
실 의 군 는 앞 표 터와 같 터
단순한 주 않으므 분 대상 되는 체의 터를
올 르게 vector 터 변환 는 선 되 한다.
Mahout 는 다음 3 class를 통 vector 터를 표현한다.
DenseVector: vector 터를 double 터 의 열의
표현 는 class 다.
RandomAccessSparseVector: HashMap으 현된
random access 용의 sparse vector 다.
SequentialAccessSparseVector: 순 용 vector 다.
278
들 중 떤 클 스를 용 분 대상 되는 체 터를
vector 표현할 것인 는 용 알 즘 따 진다.
Mahout 는 vector를 Java의 interface 공 는
히 관련 vector 터 중 빈 항 많은 - , sparse인 -
를 sparse vector 대부분의 vector 터 실 터
워진 를 dense vector 한다. Mahout 는
다양한 vector 연산을 할 class 되 다.
의 예 를 분류 는 예를 살펴본다. 를
분류할 때는 선 크기, 깔, 게 등의 떤 분류기준을 용할 것인
한다. 론 만 다면 떤 것 든 분류기준으 을
들 를 중 용 종 판단 다.
편의상 는 다음 같 표와 같 게 (Kg 단위), 깔 ( ,
빨 , ), 크기 (Small, Large, Medium) 다른 5 의
주 졌다 .
게 (Kg) 깔(RGB) 크기 Vector
분 대상 0 원 1 원 2 원 터 표현
Small,round, green 0.11 510 1 [0.11, 510,1]
Large, oval, red 0.23 650 3 [0.23, 650,3]
Small,elongated, red 0.09 630 1 [0.09,630,1]
Large, round, yellow 0.25 590 3 [0.25,590,3]
Medium, Oval, green 0.18 520 2 [0.18,520,2]
Mahout 들 터의 vector 표현은 들 터를
의 원으 표현 는 위 표의 열 표 되 다.
를 분류 기 위한 vector 생 프 램은 다음 같다.
279
public class MahoutClsterSecond {
public class MahoutClusterFirst {
public static final double[][] points
= {{1, 1}, {2, 1}, {1, 2},
{2, 2}, {3, 3}, {8, 8}, {9, 8}, {8, 9}, {9, 9}};
public static void writePointsToFile(List<Vector> points,
String fileName,
FileSystem fs,
Configuration conf) throws IOException {
Path path = new Path(fileName);
SequenceFile.Writer writer
=new SequenceFile.Writer(fs, conf, path,
LongWritable.class,
VectorWritable.class);
long recNum = 0;
VectorWritable vec = new VectorWritable();
for (Vector point : points) {
vec.set(point);
writer.append(new LongWritable(recNum++), vec);
}
writer.close();
}
public static List<Vector> getPoints(double[][] raw) {
List<Vector> points = new ArrayList<Vector>();
for (int i = 0; i < raw.length; i++) {
double[] fr = raw[i];
Vector vec=new RandomAccessSparseVector(fr.length);
vec.assign(fr);
points.add(vec);
}
return points;
}
public static void main(String args[]) throws Exception {
int k = 2;
List<Vector> vectors = getPoints(points);
File testData = new File("testdata");
if (!testData.exists()) {
testData.mkdir();
}
testData = new File("testdata/points");
if (!testData.exists()) {
280
testData.mkdir();
}
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
writePointsToFile(vectors,
"testdata/points/file1", fs, conf);
Path path = new Path("testdata/clusters/part-00000");
SequenceFile.Writer writer = new SequenceFile.Writer(
fs, conf, path, Text.class, Cluster.class);
for (int i = 0; i < k; i++) {
Vector vec = vectors.get(i);
Cluster cluster = new Cluster(
vec, i, new EuclideanDistanceMeasure());
writer.append(new Text(cluster.getIdentifier()),
cluster);
}
writer.close();
KMeansDriver.run(conf, new Path("testdata/points"),
new Path("testdata/clusters"),
new Path("output"),
new EuclideanDistanceMeasure(),
0.001, 10, true, false);
SequenceFile.Reader reader
= new SequenceFile.Reader(fs,new Path("output/"
+ Cluster.CLUSTERED_POINTS_DIR
+ "/part-m-00000"), conf);
IntWritable key = new IntWritable();
WeightedVectorWritable value
= new WeightedVectorWritable();
while (reader.next(key, value)) {
System.out.println(
value.toString() + " belongs to cluster "
+ key.toString());
}
reader.close();
}
}}
게 표현된 vector 터 대 앞 표 을 분류 와
같 알 즘을 선 면 분류 완 되게 된다.