책 소개
하둡(Hadoop)과 하둡 에코시스템은 데이터 라이프사이클을 책임진다고 해도 과언이 아니다. 분명 하둡은 배우기가 수월하지 않은 학습 곡선이 존재하지만, 데이터 환경에 둘러 싸여 있다면 꼭 익혀야 할 가치가 있는 기술이다. 이 책은 하둡의 높은 학습 곡선을 조금이라도 해소하고, 실제 실무에서 접할 수 있는 간이 형태의 프로젝트 가이드를 보여준다. 따라하며 배울 수 있는 하둡을 활용한 빅데이터 분석 실무에 대한 좋은 참고서다.
이 책에서 다루는 내용
- 데이터 ETL과 압축, 직렬화, 가져오기와 내보내기
- 기본 및 고급 집계 분석
- 그래프 분석
- 기계 학습
- 트러블슈팅과 디버깅
- 확장성 있는 퍼시스턴스 사용
- 클러스터 관리와 구성
이 책의 대상 독자
이 책에서는 하둡으로 해결할 수 있는 여러 형태의 실제 문제를 강조하기 위해 구체적인 코드 예제를 사용한다. 따라서 하둡과 관련 도구를사용해 개발자에게 친숙하도록 설계되었다. 하둡 초보자는 책의 설명을 통해 쉽게 배워볼 수 있으며 하둡 애플리케이션의 실제 사례를 경험할 수 있다. 경험이 있는 하둡 개발자는 많은 도구와 기술로 다양한 사고 전환의 기회를 접할 수 있으며, 익숙했던 하둡 프레임워크이지만 다시 명확하게 이해하는 계기가 될 것이다.
이 책의 구성
1장, 하둡 분산 파일 시스템: 데이터 가져오기와 내보내기에서는 피그와 플룸(Flume), 스쿱(Sqoop) 같은 도구의 도움으로 MySQL과 몽고디비(MongoDB), 그린플럼(Greenplum), MS-SQL 서버 같은 대중적인 데이터베이스 간의 데이터를 적재하거나 업로드하는 여러 접근법을 보여준다.
2장, HDFS는 HDFS에서 읽고 쓰는 것을 다룬다. 에이브로(Avro)와 쓰리프트(Thrift), 프로토콜 버퍼(Protocol Buffers)의 직렬화 라이브러리를 사용해서 보여준다. 또 블록 크기와 복제, LZO 압축을 설정하는 방법을 다룬다.
3장, 데이터 추출과 변환에서는 여러 형태의 데이터 소스로 기초적인 하둡 ETL을 다룬다. 하이브와 피그, 자바 맵리듀스 API 등의 다양한 도구는 데이터 샘플과 하나 이상의 출력을 다루는 배치 프로세스에서 사용된다.
4장, 하이브와 피그, 맵리듀스를 사용한 공통 태스크 수행에서는 문제의 여러 가지 클래스를 다루는 도구를 활용하는 방법에 중점을 둔다. 문자열 연결과 외부 테이블 매핑, 간단한 테이블 조인, 사용자 정의 함수, 클러스터 간의 의존성 배포를 다룬다.
5장, 고급 조인에서는 맵리듀스와 하이브, 피그상에서 좀 더 복잡하고 유용한 조인 테크닉을 다룬다. 해당 절에서는 피그로 병합과 복제, 편향 조인을 보여주고, 하이브 맵 사이드와 완전 외부 조인도 다룬다. 또 외부의 데이터 저장소에서 데이터를 조인하는 레디스의 사용법을 보여준다.
6장, 빅 데이터 분석에서는 데이터에 대한 다양한 질문에 대답하기 위해 하둡 사용 방법을 설명한다. 하이브 예제 중 일부는 다른 분석에서 재사용하기 위한 사용자 정의 함수(UDF)를 적절히 구현하고 사용하는 방법을 보여준다. 두 가지 피그 절에서는 Audioscrobbler 데이터셋을 이용한 각기 다른 분석을 보여주고, 맵리듀스 자바 API 절에서는 컴바이너를 다루는 분석을 보여준다.
7장, 고급 빅 데이터 분석에서는 다양한 그래프 분석과 기계 학습 과제를 다루는 아파치 지라프와 머하웃을 살펴본다.
8장, 디버깅은 트러블슈팅과 맵리듀스 잡의 테스트를 다룬다. 테스트를 쉽게 하기 위해 MRUnit과 로컬 모드를 사용하는 방법을 예제로 보여준다. 또한 맵리듀스 잡 모니터링을 위한 태스크 업데이트 상태와 카운터(Counter) 사용의 중요성을 강조한다.
9장, 시스템 관리에서는 하둡에서 사용 가능한 다양한 설정으로 성능 튜닝과 최적화 방법을 주로 살펴본다. 기초적인 설정과 XML 구성 튜닝, 나쁜 데이터노드의 트러블슈팅, 네임노드 실패, 갱글리아를 사용한 성능 모니터링 등 여러 가지 주제를 다룬다.
10장, 아파치 어큐뮬로를 사용한 퍼시스턴스화에서는 NoSQL 데이터 저장소인 아파치 어큐뮬로를 사용해 특별하고 다양한 기능을 보여준다. 이터레이터와 컴바이너, 스캔 인증 권한, 제약 조건을 포함한 많은 특별한 기능을 다룬다. 또 효율적인 지리공간의 로우 키를 구축하고 맵리듀스 배치를 이용한 분석도 수행한다.
목차
목차
- 1장 하둡 분산 파일 시스템: 데이터 가져오기와 내보내기
- 개요
- 하둡 셸 명령어를 사용해 데이터를 내보내고 HDFS로 데이터 가져오기
- 분산 복사를 사용한 클러스터 간의 효율적인 데이터 이동
- 스쿱을 사용해 데이터를 MySQL에서 HDFS로 가져오기
- 스쿱을 사용해 데이터를 HDFS에서 MySQL로 내보내기
- MS-SQL 서버를 위한 스쿱 구성
- 데이터를 HDFS에서 몽고DB로 내보내기
- 데이터를 몽고DB에서 HDFS로 가져오기
- 피그를 사용해 데이터를 HDFS에서 몽고DB로 내보내기
- 그린플럼 외부 테이블에서의 HDFS 사용
- 데이터를 HDFS로 적재하기 위한 플룸 사용
- 2장 HDFS
- 개요
- HDFS에서 데이터 읽고 쓰기
- LZO를 사용한 데이터 압축
- 시퀀스파일로 데이터 읽고 쓰기
- 데이터 직렬화를 위한 아파치 에이브로 사용
- 데이터 직렬화를 위한 아파치 스리프트 사용
- 데이터 직렬화를 위한 프로토콜 버퍼 사용
- HDFS 복제 계수 설정
- HDFS 블록 크기 설정
- 3장 데이터 추출과 변환
- 개요
- 맵리듀스를 사용해 아파치 로그를 TSV 포맷으로 변환
- 웹 서버 로그에서 봇 트래픽을 필터링하기 위한 아파치 피그 사용
- 웹 서버 로그 데이터를 타임스탬프로 정렬하기 위한 아파치 피그 사용
- 웹 서버 로그 데이터를 세션화하기 위한 아파치 피그 사용
- 아파치 피그 기능 확장을 위한 파이썬 사용
- 페이지 뷰를 계산하기 위한 맵리듀스와 보조 정렬 사용
- 지리 이벤트 데이터를 정리하고 변환하기 위한 하이브와 파이썬 사용
- 시계열 분석을 수행하기 위한 파이썬과 하둡 스트리밍 사용
- 출력 파일 이름을 지정하기 위한 맵리듀스의 MultipleOutputs 사용
- 지리 이벤트 데이터를 읽기 위한 사용자 정의 하둡 Writable과 InputFormat 생성
- 4장 하이브와 피그, 맵리듀스를 사용한 공통 태스크 수행
- 개요
- HDFS에서 웹로그 데이터와 외부 테이블을 매핑하기 위한 하이브 사용
- 웹로그 쿼리 결과로부터 동적으로 테이블을 생성하기 위한 하이브 사용
- 웹로그 데이터에서 필드를 연결하기 위한 하이브의 문자열 UDF 사용
- 웹로그의 IP를 조인해서 해당 IP에 맞는 국가를 찾기 위한 하이브 사용
- 맵리듀스를 사용한 뉴스 아카이브에서의 n-그램 생성
- 뉴스 아카이브에서 특정 키워드를 포함하는 라인을 찾기 위한 맵리듀스 분산 캐시 사용
- 데이터를 테이블에 적재하고 GROUP BY 절을 갖는 SELECT 문의 연산을 수행하기 위한 피그 사용
- 5장 고급 조인
- 개요
- 매퍼에서 맵리듀스를 사용한 데이터 조인
- 아파치 피그의 복제 조인을 사용한 데이터 조인
- 아파치 피그의 병합 조인을 사용한 정렬 데이터 조인
- 아파치 피그의 편향 조인을 사용한 편향 데이터 조인
- 지리 이벤트를 분석하기 위한 아파치 하이브 맵 사이드 조인 사용
- 지리 이벤트를 분석하기 위한 아파치 하이브 완전 외부 조인 최적화
- 외부 키/값 저장소(레디스)를 사용한 데이터 조인
- 6장 빅 데이터 분석
- 개요
- 맵리듀스와 컴바이너를 사용해 웹로그 데이터에서 개별 IP 주소 카운트
- 지리 이벤트 데이터에서 이벤트 날짜를 변환하고 정렬하기 위한 하이브 날짜 UDF 사용
- 지리 이벤트 데이터를 통해 월별 사망 보고서를 작성하기 위한 하이브 사용
- 지리 이벤트 데이터의 소스 신뢰성을 검증하기 위한 하이브의 사용자 정의 UDF 구현
- 하이브의 맵/리듀스 연산과 파이썬을 사용해 비폭력의 최장 기간 표시
- 피그를 사용해 Audioscrobbler 데이터셋에서 가수들의 코사인 유사도 연산
- 피그와 datafu 라이브러리를 사용해 Audioscrobbler 데이터셋에서 아웃라이어 제거
- 7장 고급 빅 데이터 분석
- 개요
- 아파치 지라프를 이용한 페이지랭크
- 아파치 지라프를 이용한 단일 소스 최단 경로 구하기
- 분산된 너비 우선 탐색을 수행하기 위한 아파치 지라프 사용
- 아파치 머하웃을 이용한 협업 필터링
- 아파치 머하웃을 이용한 클러스터링
- 아파치 머하웃을 이용한 감성 분류
- 8장 디버깅
- 개요
- 리듀스 잡에서 잘못된 레코드 추적을 위한 카운터 사용
- MRUnit을 이용한 맵리듀스 잡의 개발과 테스트
- 로컬 모드에서 실행되는 맵리듀스 잡의 개발과 테스트
- 잘못된 레코드를 스킵하기 위한 맵리듀스 잡 활성화
- 스트리밍 잡에서의 카운터 사용
- 디버깅 정보를 표시하기 위한 태스크 상태 메시지 업데이트
- 피그 잡을 디버깅하기 위한 illustrate 명령어 사용
- 9장 시스템 관리
- 개요
- 의사 분산 모드에서 하둡 시작하기
- 분산 모드에서 하둡 시작하기
- 기존 클러스터에 새 노드 추가
- 안전한 노드 해제
- 네임노드 장애 복구
- 갱글리아를 사용한 클러스터 상태 모니터링
- 맵리듀스 잡 매개변수 튜닝
- 10장 아파치 어큐뮬로를 사용한 퍼시스턴스화
- 어큐뮬로에서 지리 이벤트 저장을 위한 로우 키 설계
- 지리 이벤트 데이터를 어큐뮬로로 대량으로 가져오기 위한 맵리듀스 사용
- 어큐뮬로에서 지리 이벤트 데이터를 입력하기 위한 사용자 정의 필드 제한 설정
- 정규식 필터링 이터레이터를 사용한 쿼리 결과 제한
- SumCombiner를 사용해 동일 키의 다른 버전을 위한 사망자 카운트
- 어큐뮬로를 사용한 스캔에서의 셀 수준 보안 강화