분야 컨설팅과 교육, 그리고 분야별 전문가 모임을 통해 지속적인 상호 발 오늘날 빅데이 물결은 2004년 Google 논문이 발단이 된 Hadoop 프로젝트로부 시작되었 그러나 이러한 빅데이 술이 갑자 생겨난 것은 아니 전을 꾀하고 있습니 야 책을 지속적로 출간하고 있습 한편로 분산컴퓨팅과 NoSQL 데이베이 등이 모태가 되었고, 다른 한편에서 데이 마이닝 술과 R 등 분석도 구가 뿌리가 되었 OpenWithNet 총서 이처럼 새로운 컴퓨팅 패러다임로서 빅데이를 제대로 가상화술과 토리지 네트워크 이해하려면 Hadoop과 분석술 2가지 요소를 동시에 살펴 (2006년) 보아야 한 빅 데이: Hadoop과 데이분석 법 (2013년) 업무에 적합한 분석 알고리즘을 선택하고 이를 MapReduce 모델로 구현할 때 빅데이 분석이 완성되 것이 세만틱 웹과 차세대 인넷 (근간) NoSQL 데이베이 일반이론 과 MongoDB (근간) 이 책은 이런 관점에서 빅데이 술을 총체적로 설명하고 Hadoop과 분석법(Analytics) 니 필자 소개 빅 또한 이러한 노력 일환로 관련 분 데이 개방형 표준술을 추구합니 관련 빅 오픈위드넷 (www.openwith.net) 은 데이 윤형 임팩트라인 대표 윤형 대표 한국외대와 동 대학원(MIS) 을 졸업한 후 쌍정보통신, 삼보컴퓨, 한 국 썬마이크로시템즈(상무, SunSoft 지사 장), 하이트론 (부사장) 등을 거쳐 현재 임팩트라인 대표와 SGI Korea 술고문 을 맡고 있 2006년에 가상화 토리지네트워크 (홍릉 과학출판사)를 쓴 바 있 Hadoop과 분석법(Analytics) 자 노력하였 이론적 배경과 함께 관련 예제와 사례를 덧붙여 서 분석가와 프로그래머 물론 관심있 이들이 빅데이를 제 윤형 지은이 Designed by Ester 윤형 지은이 대로 이해하고 활할 수 있도록 하였 빅데이-표지_3차수정.indd 1 2013-10-04 오후 3:19:28
빅 데이 Hadoop과 분석법(Analytics) 지은이 윤형
: Hadoop 출간 은 출판 분 2013 년 10 월 3 윤 퍼플 주 울 종 종 1 1번 www.kyobobook.co.kr 윤 2013 본 전부 반 부를 재 권 동를 셔 면 OpenWithNet 총 상 술 워크 (2006 년) : Hadoop 세만 NoSQL 웹 분 (2013 년) 세대 인넷 (근간) 반 2 론 MongoDB (근간)
목차 차... 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 3
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 4
(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) 예측분 (5) 2. (Predictive Analytics)... 129 종 Analytics 활... 131 델링과 데이 전 리... 134 (1) 데이 전 리 문 (2)... 134 델링 ( 델개발)... 142 (3) 계 습... 144 3. 주요 분... 145 5
(1) OLAP 분 (DW/OLAP)... 145 (2) 개념 술과 데이 이산화 및 개념계층 생성... 150 (3) 데이 상호관련성 분... 154 (4) 분류 (Classification)... 172 (5) 군집 이론... 211 (6) 예측이론... 241 (7) 사결정 리(Decision Tree)... 246 (8) 림 데이 (data stream) 분 (9) 계열 및 순차데이에 대한 분 (10) 이상치 분 4. Analytics 도... 249... 253 (Outlier Analysis)... 257... 262 (1) 상 분 도... 262 (2) 오픈소... 262 IV. 데이 분 실 예... 268 1. Mahout를 이한 군집 분... 268 (1) 개요... 268 (2) Mahout에 군집화 능... 271 6
2. 병렬형 빈발패턴 알고리즘... 281 (1) FP-Growth 알고리즘... 281 (2) 병렬형 FP-Growth 알고리즘... 283 3. R을 MapReduce에 적한 계열 데이분 4. Social CRM과 Social 네 워크 분... 289... 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 능만 (2) R 을 Map과 Reduce 현... 320 두에 적 경우... 324 7
V. 데이 적 방 론... 328 데이 성 1. 델... 328 데이 분 (1) IDB 성 델... 328 (2) Sprenger 데이 성 (3). 실 간 예측분 2. 프 3. 델... 331 프레임워크... 334 방 론... 336 (1) 데이 주요 프 세... 336 (2) 데이 프 데이 방 론... 336 맵... 338 (2) 보완관계 Hadoop과 DW... 338 (3) Hadoop을ETL/전 리 능 (4) Hadoop을 ETL 능 (5) Cloud 이... 338 이... 339 데이 분... 339 4. Hadoop과 데이웨어 우... 341 (1) 문... 341 (2) 양자 교... 341 (3) 공존 전략 최소한 Hadoop DW... 346 8
(4) Hadoop DW 적 패턴... 349 (5) Hadoop DW개발동향 SQL on Hadoop... 351 (6) 결론 - 보충논... 352 5. 클라우 컴퓨팅과 데이... 354 (1) 개요... 354 (2) Cloud (3) VI. 데이 플랫폼 데이 분... 354 클라우... 355 데이 결론에 대신 여... 357 부 : r 사... 362 1. 개요... 362 (1) 징... 362 (2) 설치와 작업환경... 363 2. 본능 실습... 365 (1) 첫 걸음... 365 (2) R에 데이... 370 (3) r에 그래프 이... 374 9
(4) r 주요 명령어... 375 3. r 프 그래밍... 378 (1) Loop과 vectorization... 378 (2) R 에 프 그램 작성... 381 (3) R에 작성... 383 필자 소개... 387 10
I. 배경 데이 물결 1 (1) 생되 2012 년 생 되 증 2011 년을 준 양 8TB (Terabyte)를 넘 Facebook 대략 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 11 1대 단위를 통 할 Twitter 만 100TB 를 넘 끝 현상 대 관련된 끝을 알 한
1000 Zettabytes = 1 Yottabyte 1000 Yottabyte = 1 Brontobyte 1000 Brontobyte = 1 Geobyte 한 2012 년 준 최 한 대 한 Volume Velocity Variety,실 간분 된 중 까? 표현 대한 와 증 께 증대되 대표 닝 동 상, 예 전 상을 등 Complexity 위 3V와 전반 예상된 증 빨! (unstructured) 턴인 만 따져도 되 양만 문 현상을 흔히 다음 V3C 존 문(全文)검, 파 을 것 단순히 양 메 징 문 쌓 증 오늘날 순 (2) 만 카카오 8 천만 건 1 40GB 면 께 실 간 증 12 공 게 되 커 면
날 갈 던 클 한 현상은 살 든, 존, 분 되 세상 되 웹 (sensor web) (GB) ~ 되 께 든, CCTV, 대중교통 되 표현되 센 버 름(data stream) 분 한 현상은 앞 편 및 간 통신 될 것 (Big Data) 페 (TB) 중 되거 온 인 공간 오늘날 길거 (Internet of Things) 등 한 1 동안 재탄생 동상 존 항은 및 센 움 되 (Peta Bytes) ~ 중 (Exa Bytes) 분산 (Semi-Structured 및 (Structured) Unstructured) 안 인 (주 관계 Flat Schema No Schema 델) 체계 1 델 된 Interrupt 체계 Sensor web, 교환, 란 다단한 상 종 센 를 인넷 을 말한 프 워크를 interface 와 통신 프 콜을 규 통신을 케 을통 히 OGC (Open Geospatial Consortium: http://www.opengeospatial.org/) Enablement) 관계 써 13 SWE (Sensor Web 련 웹 다른 센 워크 간
선되 장큰 다 징은 걸쳐 된 것인 것 론 전 체계 근본 변 를 상인 결 분 올것 몇 히 신 단 거 실현되 간~ 면 게 운 세상을 예 한다 신상품 을 통한 를 통 던것 던것 온변 을통 오늘날 두 언 통한 방 떤 것은 30 년 전 월 운 인별 안상 종 프 세 단 은 춤 진단은 료 험 실 간 를 술 변 컨대, 를 통한 간 단 분 실현 등은 단순히 산술 원을 넘 존 전산 된것 다 거 을 꾸 생 못 침, 14 선 상대 던 것들을 생활양,, 게 까 향주게
2. 슈퍼컴퓨팅 술과 분산컴퓨팅 술 (1) 슈퍼컴퓨팅 (HPC )술. HPC와 분산컴퓨팅 흔히 쉽 만실 면 것 동안 을것 전, 중 탄생한 것 생, HPC (High CDC Seymour Cray 한 슈퍼컴퓨 전을 거듭 20 세 슈퍼컴퓨 (MPP: massively parallel supercomputer) 되 MPP 란 병렬컴퓨를 말 것들 며 PC 슈퍼컴퓨 되 천~ 거 컴퓨 클 프 세 를장 분 할 거듭 게 한 대규 두를 많은 분 와 같은 전 못 던 뮬 션등 대 컴퓨를 밀결 : 을 (loosely-coupled) 컴퓨팅 (Grid Computing): 연결한 대규 대표 인 HPC 두 (tightly- 컴퓨를 느 MPP (Massively Parallel Processing)술: 슨 게결 병렬 클 를 coupled) 들 만 슈퍼컴퓨팅은 다음 된 술 재탄생 슈퍼컴퓨 Performance Computing) 1960 년대 운 술 분산 컴퓨팅 현방 술 다음 2 전 인 대 원 를들 향을 주 병렬 분산 컴퓨팅 (Distributed Computing) 술 (Parallel Computing) 술 15 대 컴퓨를
한편 슈퍼컴퓨 위 프 싸 만 을 밍 상 부, 슈퍼컴퓨 필 프 램 같은 오픈 같은 솔 을 분할 진 켜 뒤 체 션을 들상 간 때문 듯 한되 브 한 클 대중 다른 만큼 병렬 습 며 를 술 되 한 16 인 것은 다음 (Data Aggregation) 인 분산파 한 대표 장 거 볼 술 응 커 면 한대 컴퓨 대 Beowulf 와 방 술 HDFS 할 분산 프 세싱을 를전 되 다음 슈퍼컴퓨. 슈퍼컴퓨 을간 코딩 거 존 HPC 슈퍼컴퓨 PVM(Parallel Virtual 메 활 던 슈퍼컴퓨 를 다 을위 위한 MPI(Message Passing Interface) Machine) 등 대 관 같 규 힘들 므 대표 인 Hadoop 템을 본 되 Lustre파
템 할 같은 존 병렬 파 템 손쉽게 게 설계되 (Data Analytics) 슈퍼컴퓨 분 분 델링 델 분 결 전문 표현 히동 들 론 분 델 대량 되 (Data Visualization) 분 되 연산 중 외 한 분 힘들 따 표현(Dynamic visualization)을 통 체와 대한 쉽게 한 연산 다 원 결 를 인간 한 대 되 (2) 분산컴퓨팅 분산파 템. 분산컴퓨팅 분산 컴퓨팅(Distributed Computing) 연결 상 말 넓은 템 안 협 게 밀결 효율을 컴퓨팅 연결한 병렬컴퓨팅까 인 은 을 대 scalability) 2 원을 키 한 키 위한 방 대(Vertical scalability)와 것을 대(scalability)와 다 (High Availability) 선 컴퓨 대 컴퓨를 써 컴퓨팅 분산컴퓨팅 분산컴퓨팅 본 란 평 대 (Horizontal 대 대 다음 방 컴퓨 17 을 히 것을 말한
연산 메 다 디크, 설 거 것 통신연결을 I/O 한 CPU 디크 컨 롤 (HDC) 등을 증 교체 은 대 통신 선 면 Non-blocking I/O와 병렬 프 밍 동 I/O를 델 재설계 (예: 메 전 방 선 (MPI: Message Passing Interface), blocking/buffering 등) 선을 위한 Event 대 Scale-up 프 램 되만 할 장 방 후부 컴퓨 (Node) 상 Peer-to-Peer 델 대를 Scale-out 인 선을 필 결 템 변 양 질 대 대 다음 방 진 단 HPC 게 된다 단 평 평 2 표현되며 반면 컴퓨 평 반면 면 반 면 것 컴퓨팅 을 델 등 Master-Slave 표현 할 인 다 존 투 를 다 장 예컨대 컴퓨를 몇 대 동. 장 분산컴퓨팅을 통한 장 주 다음 을 위한 2중 와 Failover 본을 통한 예방 18 같은 방 을 동원한 및 밸런싱
. 분산 파 파 템 만들 진 란 프 체 한파 운 통블 체 효율 통파 장, 관 단위 관 부 운 환 전 연장선 상 대 컴퓨 을 할 때 않 념 (transparency) 및 동 편을 느끼 한 (반면 체 템은 분산환 할 위 장 및 전송한 ) (block)단위 템은 컴퓨 분산 파 파 체 웨 며 오늘날 원 를 틸 위 께 템 되 파 전 템을,다 위한 종 투명 ( 등) 및 캐싱 (caching) 술을 통 안 선을 한편 파 템 장방 념 까 분산컴퓨팅 존재 전 최근 분산파 것 찬 템 프 디 콜 Lustre 병렬 주 분산파 되 브를 방 템 대규 클 컴퓨팅 며 GPL v2 센 따른 오픈 다) Linux와 cluster를 중 SMB를 반 재 한 분산파 인 분산파 대 템 (오픈 살펴본 한 님). 술 반 19 크 템 GFS (Google File System) GFS Google GFS 킨 프 DFS (Distributed File System) 크 프 컴퓨 명칭 며 오늘날 대부분 슈퍼컴퓨 같 된 최 워크 mount 및 상 템 대표 인 것은 다음 Luster( 평 NFS (Network File System) 1980년대 분산 파 와 되 때문
GFS Google 은 당 연결 부 검 필연 scale-out 방 히 별 컴퓨 장 같은 항 설 털 을 한벤 을 때문 예 되 컴퓨 대량 파 된것 체 장 대 를 원할 것. 실 원 파 등 대량 대규 streaming 항을 템 선 및 대한 효율 결 위 파 (Append) ( 히 streaming read 다음 설계상 원 ) 되 3 길 파 단위 (64MB) 파 본(replicate) 센 Google 않며 한 NAS 를 거 3 클 할 것. GPU 장 되 다 장 당 부 다음 히 웹페 2 웨 따 Write-once, read-many 및 PC 를 2 들 컴퓨 된 대규 와 같은 관 대규 한 Google 은 만대 컴퓨 므 활 버 대부분 CPU 당 4 core 버당메 않 버들은 크 크 반 Ethernet 위 만 않다 한 연결되 한 대 Stream 뒷부분 (III. 분 세히 살펴 봄. 20 3.주 분 (9)
Master-Slave 방 을 통 한대 컴퓨 전체 메 를 관 한 caching 은 파 템 관련한 않 class 상 snapshot, append 등 custom API 뒤 되 듯 체계를 을 손쉽게 한 GFS 술은 상당부분 Hadoop 파 술 근간 되 21 써 템
3. BI와 데이베이 (1) BI (Business Intelligence). BI 출현 전 결 및최 후 BI 전략 원 중 한 할을 원을 념 을 같 설명 BSC Balanced Scorecard. 균 부프 단 표 VBM 습 (재, 장) 관 표 를 결 벗 준을 평 중 준 Gartner H. Dresner 를 계상 관련 안. 22, 표를 와 장 것. Value-based Management. "business intelligence" 4 재 들 간 관. 표 실현을 위 세, 출 던 것 분류할 솔 션 전략 름 주 결 다4. BI 를 다음 전 전 1989 년 BI 연 전략 BI 4 원 DSS (Decision Support System) 컴퓨 중간관 것 전. 출, 본 중 률(ROIC)을 관 을 말한 념을 괄
솔 션 설명 ABC Activity Based Costing. 활동준 원 간 를 투 원 준 품 히 원 분 원 ERP, 변환되 써 을 를분 을 말한다 ERP, CRM, SCM (Supply Chain Management) 등 솔 CRM 공 BI 운 을 계산 방. 대 BI 장 전환 On-line Analytical Processing. 다양한 OLAP 존 템 계산. 션 신 을 장 BI 을 것 Extraction-Translation-Loading. ETL 위한 인프 전산 템 웨 를 출 재 것. 변환한 후 를통 한 종 /변환 후 Data Warehouse. 다양한 운 DW 템 출, 장 (repository)를 말한다 전 털. 인넷 Portal BI 종 BI 다양한 위 와 관련 념을 주 필. DW/OLAP 다양한 를 은곳 넓은 할 것은 웹 념 만 OLTP 상 OLAP 은 외부 를 대상 (,반 히 웨 와 OLAP 분 (Analytics) OLAP (Online Analytical Processing)은 OLTP 념 대응되 되) 거 종분 23 대한 것 을 원 면 을
것 분 종, 것 을 OLTP 대표 OLAP 간 (Operational) 템 원천 중 거 Data Warehouse 와 다양한 원 프 징 전 부문별 Data Mart 거 를 다양한 템 출, 변환 결 세 상 면 종 된다 세부 항 (snapshot) (Multi-dimensional) 최종 상대 신 한 짧 한 단순한 질 델링 (Query) 상대 되 batch 표준 및 갱신 질 통상 선을 위 간 주 크 교 되 한 질 빠른 응 교 간 반되 상대 및 크 긴 원 음( 거 필 등을 위 를 다 월~.( 준 통계 많은 준 ) 많은 양 대부분 archive) DB 설계 많은 DB 블을 다 원 델링 통한 cube 설계 규 원 실 간 를위 필 재. 24 대신 당 재를 실
5 분 웨 것 때 된 (OLAP OLTP 다 DB 듯 후 전 히 한 현상은 원분 규 당 BI 와 밀 를 한 험 대 반면 한) 되 한 관련을 두 대 블+ 뒤 V. 한 교 장 semi- structure Bulk (key, value) 단순 대상 히 들 진 블 Dimension 만 게 되 되 면 와 DW 를 Cube 설계 = Fact 게 관련 반 히밀 DW 을 후 분 단계 항 5 은 (atomic, structured) 징 델 템 Data Warehouse 것 를 주된 검 DW/OLAP 를 한 곳 을 위한 Cube 설계를 및 주된 활 징을 든 OLTP 블 뒤 을위 을 존 DW 방 론 Hadoop DW 현상을 세히 살펴본 25 장
(2) 대규. 대규 본 와 NoSQL DB 주 (Large Database) 면 오늘날 Small database 와 big database 않 대 존 존재 것은 증 만운 한대 버 것을 따 대 1~2 명 DBA 10 만 record 10 만 ~1000 만 대 방 체 1000 만 코 최 대규 한 Partitioning 분할 를 은 다음 설명 DB 같 버 다양 6 분할 분할 분산 징 블별 분할 운 ~ > 40GB Vertical Partitioning 버 10GB ~ 40GB 샤딩 (Sharding)은 람 DBA 코 6 한 운 No Partitions 별 실 DBA <10 GB? 다 훨씬 큰 규 를 대상 메인 메 존재 버를 방 현 큰변 거대 26 간단 필 면, 전체 템 샤딩 필
대규 대규 관 분산 클 술 환 동원한 간 consistency 을 별한 관계 한 최근 장 크며 index 체를 써앞 된대 를위 언 한 평 장 관 을 같 HBase Cassandra Vertica CloudTran Key 반 Key 반 SQL 반 OLTP NoSQL NoSQL 다, 다, Tool 부 Tool 부 술 귀 오픈 오픈 상(HP) 상 단 께 델을 훨씬 완 슈 할 것은 다음 장 다 HyperTable 빠름 체 체 술 오픈 항 한 NoSQL (Range)반 Partitioning 운 류를 총괄 Table 크 때 커질 버를 분 - 를 분할 방 선 중 예 방 Key Hash Hash 반 Partitioning 따 계산 버를 선 27 Hash 념은
. NoSQL DBMS 를 중 (atomic) 않은 많 NoSQL pair 중을 한 존 관계 대 대안 대부분 Key 와 큰 징을 된 중 NoSQL 대응되 Value 한다 되 큰 반향을 를 관 때문, (Key, Value) 진 key-value pair란? 연관 key-value pair (KVP)란 때 key 별된 름(name) 한 변 면 value 현되 다음 같 름 value country 대한민 별 value key 인것 다 표 (lookup table), 넓게 면프 진 을 말한 예컨대 key 당되 술된 상황을 key 진2 종 key-value pair 예를 들 쉬 램 상 할 블 (hash 든변 와 을것. 울 city 2013 년 year 체 을 대한 주 Key-value pair 흔히 참 table) 등을 통 을 표 방 다음 같 은솔 션 따 다르 만 MongoDB 및 Python 표현한 { "country" : "대한민 ", "city" : " 울", "year" : 2013 } 28
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 선 만들 쉬 진 Hash 블 싱 key 를 대 장한 은 최대한 장 관 위 만들 며 때 bucket 당될 value 를 므 key-value pair 를 분 29 key 를 란 key value pair 당 key-value pair 를 bucket 블을 당 bucket 을 뒤 쉬 현되 때문 key key 설계 원 위 블 동 원 표(lookup table) 위 hash bucket 부동 를 쉬 란 key 를 효율 종 참 블은 한 원 할때 게 된 hash 것 블
NoSQL DBMS 대량 히 며프 외 방 밍 를 한 체 현방 따 다음 같 월 장 SQL 름붙 진 게되 종류 분류할 델: key/value lookup 방 대표 Amazon Dynamo 를 관 Column Families: Google BigTable 논문 key를 종 HBase, Cassandra 문 대표 프 표준 따 되 체를 (serializing) 를 술 인를 장 (예 CouchDB, 한 : 반 다른 장 거 것 된 : semi-structured 프 론 거 며 Neo4j 등 람 할 JSON (JavaScript Object Notation)은 장 게 예 JSON ) 문 설계된 연결 킴 써 row/column을 7 MongoDB 7 hybrid (Document) 중 를 들 된 것 attribute (column) column은 SQL 까 4 key-value store NoSQL (Query)한다 Not Only SQL 장되면 NoSQL 은 최근 존 관계 념 및 컴퓨 두 교환 표준 JavaScript 언 떤 컴퓨 언 워크 상 문 간략 30 전송 변 XML 을 대체
대표 인 Hadoop Google BigTable 을 상당부분 HBase 장근 솔 할 뒤 션 설명할 예 품별 장단 방 BigTable 한 것 HBase 며 한 Cassandra Dynamo 혼 (HBase 등 NoSQL 대 ) 징을 다음 표 HBase Cassandra Vertica MongoDB HyperTable 장 Key 반 Key 반 Closed- Document- HBase NoSQL, NoSQL, source, oriented. 대, Amazon SQL 표준, Cloudera 원 원,, 질 31 full-index 공 상 다 든. 오픈 빠름,
장단 HBase Cassandra Vertica MongoDB HyperTable 단 다, tool 다, tool 부, 단순한 부,단순한 queries queries 벤 존 솔 션 면 은 까다 됨 움. HDFS 와 SQL 반 검 appl.을 것을 권장 주 별 뜻 relational 것 게 ACID8 준을 들상 면 간 관계를 relation 란 한 규 한 블 상 간 관계를 ) 한 DB 종 Table 을 만들 (RDB 교 SQL 관계 않음 대안 장 템 완벽 존, 완전 분산 대한 질 SQL 문을 한 SQL 란 선언문 (high-level declarative language) 대 질 9 다음 몇 된 단계를 거쳐 된 8 Atomicity (All or Nothing), Consistency (referential integrity 문 ), Isolation 및 Durability 를 9 위 SQL Hadoop 은 장 듈 며 transaction 상 완 면 되 때문 32. 검증 설 주 한 신규 후 Arbitrary 침 된 SQL 을 Hadoop
질사항 수동입력 Query parsing Query 분 Query 최적화 Query 실행 결과출력 런 규 RDB (normalization) 규 반면 XML, JSON 같은 반면 다른 방 체 방 인위 를 을프 표현 프 한 결 설 ( 게 concurrency 런 중 때문 편, 관계 DB 와 때 를 순 질 것 ) 실 한 SQL 훨씬 다양 33 던 을통 램 <key, value> 램 변 을철 히준 실 계 ( 게 까 NoSQL)은 를 표현할 선되 며
4. Google과 Apache 프 (1) Google BC (원 전) 빗대 술 AD (원 후) 전단계별 인넷 분 컴퓨 (BC: Before Computer) 거 대 대 분 Google 등장 할 10 인넷 설. 론을 깊, 컴퓨 전 후 (AC: After Computer) 전 (BI: Before Internet) Internet) 것 후 (PI: Post 설명 중 히검 인 Google 은 웹을 대상 든 방대한 프 워크를 11 Google 대한 연 않 GFS 10 통 계 술및 1994 년)를 점 11 한편 론을 글 되 프 론을 Google 든 품 방대한 프 방 만 부 MapReduce 워크를 되던 인넷 상 본 ( 통. 히검 뿐만 Maps 은단 PageRank 알 광 등 Game 을 즘 론을 활 할을 한다 34 선 대 Google 컨 은
듈 (stack) 대략 GFS: MapReduce: MyDQL gateway: BigTable: Sawzall: 인 은 다음 같 장 대규 (ingest) 공 메인 언 (DSL: domain specific language) Evenflow (왼 ): Evenflow ( 운 ): 케쥴링 Dremel (오른 ): Columnar storage + 메 Dremel (왼 ): End user Chubby: 템 한 Google 다 등재되 은 관련 프 질(query) 워크를 종 참 름 란히 오픈 전세계 한 인넷 들결 프 한 workloads 연결 35 을 며 상당 인참 를 델 Apache
Sqoop 종 SQL to Hadoop 를 Hadoop import 을 Pig Dataflow 향 Hive SQL반 Oozie Hadoop job 프 웨 JDBC 진 Cloudera 언 인 Pig Latin 컴파 웨 Facebook 대한 워크플 Yahoo 36 /coordination..
상을 한 든 Apache 프 결 프 대한 거대한 프 거 참 를중 연결되 인 Hadoop 및 진 될예 12 며 와 관련된 주 Hadoop 프 중 위 근 예컨대 다음 Hadoop Fatigue 를 거 줄 운프 13 따 를 Apache 념할 것은 관련 프 20 다 전 후 논 주 다만 한 순간 되 면 진 워크를 은 Hadoop 12 관 안되거 공통 을 게된것 Hadoop MapReduce, HDFS, HBase 등 만 전체 만 프 프 프 웨 할 다양한 대표 주 프 (2) Apache 현재 은 를 효율 등재한 오픈 반인 Apache 오픈 웨 전체 것 중 인 전체 균 을 논를 살펴 볼 것. http://www.bytemining.com/2011/08/hadoop-fatigue-alternativesto-hadoop/ 한편 다른 대표 ECL 체언 프 반 프 HPCC Systems 를 들 밍 델을 통 ( http://hpccsystems.com 참 13 Apache 프 절 를 거쳐 본 프 프 근거한 선 된 등재된 최근 프 를 ) 후 Incubation 프 웨 되 후 중 인 tajo incubation (http://tajo.incubator.apache.org/ ) 37 한 된
Hadoop 을 중 MapReduce 를 밀 게 연결되 살펴 면 (core) 므 다음 장 HDFS 와 HBase, Pig, Hive 등 들 38 와같 을 한
IV. 데이분 실 예 1. Mahout 83 를이한군집분 (1). Mahout 프 Mahout Apache 프 한분 진 되 계 습 Java 브 다. 계 습 란 84 컨대 ' 대상 대 컴퓨 알 분 할 을 것 ' 을말 간 런 닝솔 션들 현되 활 히 되 다. 다 최근 Hadoop MapReduce 프 워크활을전 한계 습프 램 Mahout 되 인를끌 다. Mahout Lucene 프 되 되 다. 검 및 프 인 Lucene 닝관련된프 램 꾸준히 되 2008 년 를 Mahout 프 키게된것 다. 별 프 한 Mahout Taste 별 계 습프 램 흡 짧은 간 계를 다. Mahout 와관련된 종프 표현되 다. 83 Mahout 흔히 ' ' 음한다. 84 앞 계 습을 인공 한 람 닌컴퓨 습할 알 즘을연 및분, 술 한 다. 268
다중 한것은 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 등을 인취향 따 선. 269
다. 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 270
(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 해당부분을인및 정 다. 271
(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 들 를 다음순 군 을 한다. 272
Vectorizatoin 입력데이를 vector 형태 변환 Vector 를해당위치에 입력데이 군집화 (clustering) 업을반복수행 출력디렉토리 업결과를획득 중심부초화 목표군집 (grouping) 중심위치를지정 을 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); 273
} } 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 274
}} = 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 룹 군 되 음을알 다. 275
앞 듯 88 거 념 상황 따 선 게되 Mahout 브 EucliideanDistanceMeasure 외 다음다양한거 공되 다. SquredEucliideanDistanceMeasure ManhattanDistanceMeasure CosineDistanceMeasure TanimotoDistanceMeasure WeightedDistanceMeasure 들 은 름 쉽게눈 챌 거 대한설명 앞부분 므 주 거 을 표현한것을 것 대신한다. 위 중왼 Euclid 거 와 Manhattan 거 계산을 교 다. 오른 cosine 한거 계산방 을 주 다. 88 III. 분 3. 주 분 (5) 군 론 ( ) 간 276
한편 살펴본 9 대한 표 위 다른 거 를 한결 다음 같다. 거 반 0 번군 1 번군 vector 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 다. 277
들중 떤클 를 분 대상 되 체 를 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 생 프 램은다음 같다. 278
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()) { 279
}} } 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 대 앞 표 을분류 와 같 알 즘을선 면분류 완 되게된다. 280