• 하둡 인 프랙티스
  • 85가지 고급 예제로 배우는 실전 해법서

  • ​알렉스 홈즈 지음
  • 유윤선 옮김

  • 위키북스 오픈소스 & 웹 시리즈 _ 053, 데이터 & 데이터베이스 시리즈 _ 006
  • ISBN: 9788998139339
  • 40,000원 | 2013년 09월 16일 발행 | 652쪽



《하둡 인 프랙티스》는 현존하는 책 중 하둡과 관련해 가장 방대한 주제를 다루는 책이다. 이 책에서는 하둡에 대한 기본적인 소개부터 데이터 이동 및 직렬화를 다루는 데이터 로지스틱스, 효과적인 데이터 처리 패턴, 데이터 사이언스, 고수준 추상화 언어를 통한 맵리듀스 활용까지 하둡과 관련한 다양한 궁금증에 대한 답을 85개의 기법을 통해 찾는다. 이 책은 문제/해결책 접근법을 통해 누구든 원하는 궁금증을 빠르게 찾을 수 있는 형태로 돼 있으며, 각 주제에 들어가기에 앞서 다양한 그림과 설명으로 독자가 충분히 관련 주제를 익힐 수 있게 구성돼 있다.

이 책에서 소개하는 85개의 기법은 모두 실전 기법을 다루며, 현업에서 저자를 비롯한 수많은 개발자가 부딪힌 다양한 문제를 토대로 한다. 일례로 이 책에서는 데이터 불균형(data skew)을 효과적으로 해결하는 실전 기법, 캐싱을 활용한 최적화된 조인 방법, LZOP을 활용한 압축 방법, 샘플링을 활용한 효과적인 맵리듀스 파이프라인 최적화 등 실전에서 꼭 필요한 주제이지만 기존 책에서는 다루지 않는 주제를 엄선해 최고의 모범 기법과 해결책을 제시한다.

이 책을 통해 독자들은 하둡을 가장 효과적으로 활용하는 최고의 모범 기법은 물론, 다양한 상황에서 적합한 데이터 입출력 형식 및 압축 형식, 효과적인 코드 최적화 기법 및 디버깅 방법을 익힐 수 있고, 머하웃, 하이브, 피그, 크런치처럼 하둡 생태계를 구성하는 다른 프로젝트와의 연동 기법도 익힐 수 있다. 또 부록에서는 HDFS 내부에서 데이터 읽기/쓰기가 어떻게 진행되는지도 볼 수 있고, 데이터 사이언스 측면에서 빅 데이터를 분석하는 접근법에 대한 혜안도 얻을 수 있다.

-- 책 속으로

 

하둡의 창시자인 더그 커팅은 하둡을 빅 데이터를 위한 커널이라고 부르기를 좋아하는데, 필자도 이에 동의하는 편이다. 분산 저장소와 연산 능력을 갖춘 하둡은 대용량 데이터셋을 얼마든지 처리할 수 있는 기술이다. 필자에게 있어 하둡은 구조적 데이터(RDBMS)와 비구조적 데이터(로그 파일, XML, 텍스트)를 서로 연결해주고, 이들 데이터를 쉽게 조인할 수 있게 해주는 기술이다. 이는 OLTP와 로그 파일을 결합하는 전통적인 사용 사례에서 페이스북에서 볼 수 있듯 데이터 웨어하우싱에 하둡을 사용하는 사례 및 데이터에 대한 새로운 사실을 찾아내고 연구하는 데이터 사이언스 분야로의 발전을 의미한다.

이 책에서는 다양한 중급 및 고급 수준의 하둡 예제를 살펴보고 이를 문제/해결책 형식으로 제시한다. 85개의 기법은 모두 개별 과제(플룸을 활용해 로그 파일을 하둡으로 옮기는 법, 머하웃을 활용한 예측적 분석 등)를 소개한다. 이처럼 제시된 각 문제를 단계별로 살펴보고, 독자들은 이 과정을 통해 하둡과 빅 데이터 세계에 점점 더 친숙해질 수 있다.

이 책은 하둡을 사용해본 경험이 있고, 맵리듀스와 HDFS를 기본적으로 이해하는 사용자를 대상으로 한다. 척 램이 저술한 매닝 출판사의 하둡 인 액션에는 이 책에서 다루는 기법들을 이해하고 적용하는 데 필요한 사전 지식이 모두 들어 있다.

★ 로드맵 ★

이 책에는 총 13개의 장이 있으며, 5부로 구성된다.

1부에는 이 책의 소개에 해당하는 하나의 장만 들어 있다. 이 장에서는 하둡에 대한 기본적인 사항을 설명하고, 단일 호스트에서 하둡을 실행하는 법을 설명한다. 1장은 맵리듀스 잡을 작성하고 실행하는 과정을 살펴보는 것으로 마친다.

2부 ‘데이터 로지스틱스’에서는 하둡에서 데이터를 가져오고, 데이터를 집어넣는 법, 다양한 데이터 형식을 처리하는 법 등 데이터와 관련한 기본적인 처리에 필요한 기법과 툴을 다룬다. 하둡을 사용할 때 하둡에 데이터를 집어넣는 과정은 가장 먼저 부딪치는 난관 중 하나인데, 2장에서는 자주 사용하는 엔터프라이즈 데이터 소스를 대상으로 다양한 툴을 활용해 데이터를 집어넣는 법을 살펴본다. 3장에서는 XML과 JSON 같은 데이터 형식을 맵리듀스에서 활용하는 법을 다루고, 이어서 빅 데이터 처리에 좀 더 적합한 데이터 형식을 살펴본다.

3부 ‘빅데이터 패턴’에서는 대용량 데이터를 효과적으로 처리하는 데 도움되는 기법을 살펴본다. 4장에서는 맵리듀스 조인과 정렬 작업을 최적화하는 법을 살펴보고, 5장에서는 수많은 작은 파일을 처리하는 법과 압축을 활용하는 법을 다룬다. 6장에서는 맵리듀스 성능 이슈를 디버깅하는 법을 살펴보고, 잡이 빠르게 실행될 수 있게 도와주는 다양한 기법을 소개한다.

4부는 ‘데이터 사이언스’에 할애하며, 데이터의 의미를 파악하는 데 도움되는 툴과 방법론을 자세히 다룬다. 7장에서는 맵리듀스에서 데이터를 그래프와 같은 형태로 표현하는 법을 다루고, 그래프 데이터를 처리할 수 있는 알고리즘도 몇 개 살펴본다. 8장에서는 인기 있는 통계 및 데이터 마이닝 플랫폼인 R을 하둡과 연동하는 법을 다룬다. 9장에서는 맵리듀스와 머하웃을 연계해 확장 가능한 데이터셋을 예측적으로 분석하는 법을 살펴본다.

5부 ‘코끼리 길들이기’에서는 맵리듀스를 활용하기 쉽게 도와주는 여러 기술을 살펴본다. 10장과 11장에서는 고수준 추상화를 제공하기 위한 맵리듀스 도메인 특화 언어(DSL; Domain-Specific Language)인 하이브와 피그를 다룬다. 12장에서는 자체 맵리듀스 추상화를 제공하는 자바 라이브러리인 크런치와 캐스케이딩을 살펴보고, 13장에서는 단위 테스트를 작성하고 맵리듀스 문제를 디버깅하는 기법을 소개한다.

부록은 부록 A부터 시작한다. 부록 A에서는 이 책에서 다루는 하둡 및 관련 기술을 설치하는 내용을 설명한다. 부록 B에서는 2장에서 다루는 저수준 하둡 인그레스/이그레스 메커니즘을 다룬다. 부록 C에서는 HDFS가 읽기 및 쓰기를 어떻게 지원하는지 살펴보고, 부록 D에서는 필자가 작성하고 4장에서 활용하고 있는 맵리듀스 조인 프레임워크에 대해 설명한다.

-- 서문 중에서

하둡은 대규모 클러스터로 분산된 데이터를 조회하고 분석할 수 있게 설계된 오픈소스 맵리듀스 플랫폼이다. 특히 빅 데이터 시스템에 효과적인 하둡은 애플, 이베이, 링크드인, 야후, 페이스북 같은 기업에서 핵심적인 소프트웨어를 처리하고 있다. 하둡을 통해 개발자는 데이터를 편리하게 저장, 관리, 분석할 수 있다.

《하둡 인 프랙티스》에서는 85개의 실전 예제를 수집해 이를 문제/해결책 형태로 보여준다. 이 책에서는 데이터 인그레스/이그레스, 직렬화, LZO 압축 같은 중요한 문제에 대한 개념적 토대를 쌓을 수 있게 하는 동시에 현실적인 레시피를 제공한다. 이 책에서는 각 기법을 단계별로 살펴보고, 이를 통해 구체적인 해결책과 더불어 이 해결책에 적용된 사고 방법을 배운다. 아울러 책에서 제공하는 예제는 이해하기 쉽고, 잘 구조화돼 있는 만큼 조금만 수정해 얼마든지 필요한 곳에 바로 활용할 수도 있다.

★ 이 책에서 다루는 내용 ★

  • 하둡 및 맵리듀스에 대한 개념적 설명
  • 85개의 검증된 실전 기법
  • 현실적인 문제와 현실적인 해결책
  • 맵리듀스와 R의 연동 방법

이 책에서는 독자들이 하둡에 대해 기본적으로 알고 있다고 가정한다.

알렉스 홈즈(Alex Holmes)

알렉스 홈즈는 15년 이상의 대용량 분산 자바 시스템 개발 경험을 갖춘 수석 엔지니어다. 지난 4년간 알렉스는 하둡을 활용해 다양한 프로젝트에서 빅 데이터 관련 문제를 해결했고 이를 통해 전문성을 쌓았다. 알렉스는 자바원과 Jazoon에서 발표한 바 있으며 현재 베리사인(VeriSign)의 기술 리더다. 알렉스는 http://grepalex.com에서 하둡 관련 프로젝트를 운영하고 있으며, 트위터 주소는 https://twitter.com/grep_alex다.

유윤선

인디 개발자이자 프리랜서 번역가로 활동 중이다. 이따금 http://joshy21.com/weblog에 번역과 상관없는 글을 올리고 있다. 역서로는 《시작하세요! iOS 6 프로그래밍》《프로페셔널 Node.js 프로그래밍 (위키북스)》《NoSQL 프로그래밍》《프로 스프링 3》《라이프해커》《시작하세요! 아이폰 5 프로그래밍》《안드로이드 레시피》《시작하세요! Unity 3D 게임 프로그래밍》《시작하세요! 안드로이드 게임 프로그래밍》《시작하세요! 아이폰 4 프로그래밍》《플래시 빌더 4 & 플렉스 4 바이블》《쉽고 빠르게 익히는 CSS3》《스프링 시큐리티 3》《시작하세요! 아이패드 프로그래밍》, 《오브젝티브 C 개발 레시피 (길벗)》《프로 제이쿼리 완벽 마스터》《5일 만에 아이폰 앱 개발하기》《WebGL 개발 입문》, 《플래시 게임 마스터(에이콘출판사)》, 《Adobe AIR 인 액션(위키북스, 공역)》, 《스프링 3 레시피(위키북스, 공역)》, 《액션스크립트 3.0 완벽가이드(인사이트, 공역)》 등이 있다.

  • [1부] 배경과 기초
    • ▣ 01장: 하둡 살펴보기
      • 1.1 하둡이란?
      • 1.2 하둡 실행
      • 1.3 정리
    •  
  • [2부] 데이터 로지스틱스
    • ▣ 02장: 하둡 데이터 이동
      • 2.1 주요 인그레스 및 이그레스 고려 요소
      • 2.2 하둡으로 데이터 옮기기
        • 기법 1. 플룸을 활용한 HDFS로의 시스템 로그 발행
        • 기법 2. HDFS로의 파일 자동 복사 메커니즘
        • 기법 3. 우지를 활용한 정기적인 인그레스 활동 예약
        • 기법 4 맵리듀스를 활용한 데이터베이스 인그레스
        • 기법 5. 스쿱을 활용해 MySQL 데이터 불러오기
        • 기법 6. HDFS로의 HBase 인그레스
        • 기법 7. HBase를 데이터 소스로 활용하는 맵리듀
      • 2.3 하둡 밖으로 데이터 옮기기
        • 기법 8. HDFS 외부로의 파일 복사 자동화
        • 기법 9. 스쿱을 활용한 MySQL로의 데이터 내보내기
        • 기법 10. HBase로의 HDFS 이그레스
        • 기법 11. 맵리듀스에서의 HBase 데이터 싱크 활용
      • 2.4 장 정리
    •  
    • ▣ 03장: 데이터 직렬화 텍스트 및 고급 데이터 형식
      • 3.1 맵리듀스에서의 입출력 이해
      • 3.2 자주 사용하는 직렬화 형식의 처리
        • 기법 12. 맵리듀스와 XML
        • 기법 13. 맵리듀스와 JSON
      • 3.3 빅 데이터 직렬화 형식
        • 기법 14. 시퀀스 파일의 활용
        • 기법 15. 맵리듀스에서의 프로토콜 버퍼 연동
        • 기법 16. 쓰리프트 활용
        • 기법 17. 맵리듀스의 차세대 데이터 직렬화 방식
      • 3.4 커스텀 파일 형식
      • 기법 18. CSV용 입력 및 출력 형식 쓰기
      • 3.5 장 정리
    •  
  • [3부] 빅 데이터 패턴
    • ▣ 04장: 빅 데이터에 맵리듀스 패턴 적용하기
      • 4.1 조인
        • 기법 19. 리파티션 조인 최적화
        • 기법 20. 세미조인의 구현
      • 4.2 정렬
        • 기법 21. 2차 정렬의 구현
        • 기법 22. 여러 리듀서를 이용한 키 정렬
      • 4.3 샘플링
        • 기법 23. 저장소 샘플링
      • 4.4 장 정리
    •  
    • ▣ 05장: 빅 데이터를 위한 HDFS 스트리밍
      • 5.1 작은 파일의 처리
        • 기법 24. 애브로를 활용한 여러 개의 작은 파일 저장
      • 5.2 압축을 활용한 효과적인 저장
        • 기법 25. 데이터에 적합한 압축 코덱의 선택
        • 기법 26. HDFS, 맵리듀스, 피그, 하이브에서의 압축 활용
        • 기법 27. 맵리듀스, 하이브, 피그에서의 분할 가능한 LZOP 활용
      • 5.3 장 정리
    •  
    • ▣ 06장: 성능 문제 진단 및 튜닝
      • 6.1 맵리듀스 및 환경의 측정
      • 6.2 성능을 저해하는 원인의 파악
        • 기법 28. 입력값의 갑작스러운 증가 여부 조사
        • 기법 29. 맵사이드 데이터 불균형 문제 진단
        • 기법 30. 맵 태스크 쓰루풋이 전반적으로 낮은지 여부 판단
        • 기법 31. 작은 파일
        • 기법 32. 분할 불가능한 파일
        • 기법 33. 지나치게 적거나 많은 리듀서 개수
        • 기법 35. 리듀스사이드 데이터 불균형 문제 판단
        • 기법 35. 리듀스 태스크의 낮은 쓰루풋 여부 판단
        • 기법 36. 느린 셔플 및 정렬
        • 기법 37. 경쟁 잡과 스케줄러 병목
        • 기법 38. 스택 덤프를 활용한 최적화되지 않은 사용자 코드 진단
        • 기법 39. 하드웨어 장애 감지
        • 기법 40. CPU 경쟁
        • 기법 41. 메모리 스와핑
        • 기법 42. 디스크 건강
        • 기법 43. 네트워킹
      • 6.3 시각화
        • 기법 44. 태스크 실행 시간의 추출 및 시각화
      • 6.4 튜닝
        • 기법 45. 맵 및 리듀스 태스크의 프로파일링
        • 기법 46. 리듀서 제거
        • 기법 47. 필터 및 투영
        • 기법 48. 컴바이너의 활용
        • 기법 49. 비교기를 활용한 고속 정렬
        • 기법 50. 불균형적 데이터 수집
        • 기법 51. 리듀스 데이터 불균형 문제 최소화
      • 6.5 장 정리
    •  
  • [4부] 데이터 사이언스
    • ▣ 07장: 데이터 구조 및 알고리즘의 활용
      • 7.1 그래프를 활용한 데이터 모델링 및 문제 해결
        • 기법 52. 두 사용자 사이의 최단 거리 찾기
        • 기법 53. 친구의 친구 계산
        • 기법 54. 웹 그래프에서의 페이지랭크 계산
      • 7.2 블룸필터
        • 기법 55. 맵리듀스에서의 병렬적 블룸필터 생성
        • 기법 56. 블룸필터를 활용한 맵리듀스 세미조인
      • 7.3 장 정리
    •  
    • ▣ 08장: 통계 및 그 이상을 위한 R과 하둡의 연동
      • 8.1 R과 맵리듀스 연동 기술의 비교
      • 8.2 R 기본
      • 8.3 R과 스트리밍
        • 기법 57. 주가의 일 평균 가격 계산
        • 기법 58. 주식의 누적 이동 평균 주가 계산
      • 8.4 Rhipe—클라이언트사이드 R 및 하둡 연동 툴
        • 기법 59. Rhipe를 활용한 이동 평균 주가 계산
      • 8.5 RHadoop—R과 하둡의 경량 클라이언트사이드 연동 툴
        • 기법 60. RHadoop을 활용한 이동 평균 주가 계산
      • 8.6 장 정리
    •  
    • ▣ 09장: 머하웃을 활용한 예측적 분석
      • 9.1 추천인을 활용한 제품 추천
        • 기법 61. 영화 평점을 활용한 항목 기반 추천인
      • 9.2 분류기
        • 기법 62. 머하웃을 활용한 스팸 분류기 훈련 및 테스트
      • 9.3 K-평균을 활용한 클러스터링
        • 기법 63. 합성 2D 데이터셋의 K –평균
      • 9.4 장 정리
    •  
  • [5부] 코끼리 길들이기
    • ▣ 10장: 하이브 공략하기
      • 10.1 하이브의 기본
      • 10.2 하이브를 활용한 데이터 분석
        • 기법 64. 로그 파일 로딩
        • 기법 65. UDF 및 압축 파티션 테이블 쓰기
        • 기법 66. 하이브 조인 튜닝
      • 10.3 장 정리
    •  
    • ▣ 11장: 피그 프로그래밍 파이프라인
      • 11.1 피그의 기본
      • 11.2 피그를 활용한 로그 데이터 분석 및 악의적인 사용자 찾기
        • 기법 67. 풍부한 스키마를 갖춘 아파치 로그 로딩
        • 기법 68. 필터 및 투영을 활용한 데이터 줄이기
        • 기법 69. IP 주소 그루핑 및 개수 계산
        • 기법 70. 분산 캐시를 활용한 IP 위치 판단
        • 기법 71. 피그와 스크립트의 결합
        • 기법 72. 피그에서의 데이터 결합
        • 기법 73. 튜플 정렬
        • 기법 74. 시퀀스파일로의 데이터 저장
      • 11.3 피그에서의 사용자 작업 흐름 최적화
        • 기법 75. 빠르게 빅 데이터를 처리하기 위한 4단계 프로세스
      • 11.4 성능
        • 기법 76. 피그 최적화
      • 11.5 장 정리
    •  
    • ▣ 12장: 크런치 및 그 외 기술
      • 12.1 크런치란?
      • 12.2 로그에서 가장 인기 있는 URL 찾기
        • 기법 77. 크런치 로그 파싱 및 기본적인 분석
      • 12.3 조인
        • 기법 78. 크런치의 리파티션 조인
      • 12.4 캐스케이딩
      • 12.5 장 정리
    •  
    • ▣ 13장: 테스트 및 디버깅
      • 13.1 테스트
        • 기법 79. 맵리듀스 함수, 잡, 파이프라인의 단위 테스트
        • 기법 80. LocalJobRunner를 활용한 잡 테스트
      • 13.2 사용자 공간 문제 디버깅
        • 기법 81. 태스크 로그 살펴보기
        • 기법 81. 입력 값 분할에서의 문제 진단
        • 기법 83. 태스크의 JVM 시작 인자 판단
        • 기법 84. 디버깅 및 에러 처리
      • 13.3 맵리듀스 주의 사항
        • 기법 85. 맵리듀스 안티패턴
      • 13.4 장 정리
    •  
  • ▣ 부록 A: 관련 기술
    • A.1 하둡 1.0.x 및 0.20.x
    • A.2 플룸
    • A.3 우지
    • A.4 스쿱
    • A.5 HBase
    • A.6 애브로
    • A.7 프로토콜 버퍼
    • A.8 아파치 쓰리프트
    • A.9 스내피
    • A.10 LZOP
    • A.11 엘리펀트 버드
    • A.12 후프
    • A.13 MySQL
    • A.14 하이브
    • A.15 피그
    • A.16 크런치
    • A.17 R
    • A.18 RHIPE
    • A.19 RHadoop
    • A.20 머하웃
  •  
  • ▣ 부록 B: 하둡 내장 인그레스 및 이그레스 툴
    • B.1 명령행
    • B.2 자바 API
    • B.3 파이썬/펄/루비에서의 쓰리프트 활용
    • B.4 하둡 퓨즈
    • B.5 네임노드 임베디드 HTTP
    • B.6 HDFS 프록시
    • B.7 후프
    • B.8 WebHDFS
    • B.9 분산 복사
    • B.10 WebDAV
    • B.11 맵리듀스
  •  
  • ▣ 부록 C: HDFS 해부
    • C.1 HDFS란?
    • C.2 HDFS가 파일을 쓰는 방식
    • C.3 HDFS가 파일을 읽는 방식
  •  
  • ▣ 부록 D: 최적화된 맵리듀스 조인 프레임워크
    • D.1 최적화된 리파티션 조인 프레임워크
    • D.2 복제 조인 프레임워크

예제코드 관련 GitHub 페이지

관련 글