CHAPTER 1 소개
_1.1 하둡과 맵리듀스 개요
__1.1.1 맵리듀스
_1.2 하둡 생태계에서의 하이브
__1.2.1 피그
__1.2.2 HBase
__1.2.3 캐스케이딩, 크런치, 그 외 도구
_1.3 자바 vs. 하이브: 단어 세기 알고리즘
CHAPTER 2 시작하기
_2.1 하둡과 하이브가 미리 설정된 가상 머신 설치하기
_2.2 자세한 설치 방법 알아보기
__2.2.1 자바 설치하기
__2.2.2 하둡 설치하기
__2.2.3 로컬 모드, 의사 분산 모드, 분산 모드
__2.2.4 하둡 테스트하기
__2.2.5 하이브 설치하기
_2.3 하이브는 어떻게 구성되어 있는가?
_2.4 하이브 시작하기
_2.5 하둡 환경 설정하기
__2.5.1 로컬 모드 설정
__2.5.2 분산과 의사 분산 모드 설정
__2.5.3 JDBC를 사용하는 메타스토어
_2.6 하이브 명령
__2.6.1 명령 옵션
_2.7 명령행 인터페이스
__2.7.1 CLI 옵션
__2.7.2 변수와 속성
__2.7.3 하이브 원 샷 명령
__2.7.4 파일로 하이브 쿼리 실행하기
__2.7.5 .hiverc 파일
__2.7.6 CLI의 다른 기능들
__2.7.7 명령 히스토리
__2.7.8 셸 실행
__2.7.9 하이브에서 하둡 dfs 명령 수행하기
__2.7.10 하이브 스크립트에서 주석 달기
__2.7.11 쿼리 컬럼 헤더
CHAPTER 3 데이터형과 파일 포맷
_3.1 원시 데이터형
_3.2 컬렉션 데이터형
_3.3 데이터값의 텍스트 파일 인코딩
_3.4 Schema on Read
CHAPTER 4 HiveQL: 데이터 정의
_4.1 하이브에서의 데이터베이스
_4.2 데이터베이스 변경
_4.3 테이블 생성
__4.3.1 매니지드 테이블
__4.3.2 외부 테이블
_4.4 파티션닝된 매니지드 테이블
__4.4.1 파티셔닝된 외부 테이블
__4.4.2 테이블 저장 포맷 사용자화
_4.5 테이블 삭제
_4.6 테이블 변경
__4.6.1 테이블명 변경
__4.6.2 테이블 파티션 추가, 변경, 삭제
__4.6.3 컬럼 변경
__4.6.4 컬럼 추가
__4.6.5 컬럼 삭제 및 교체
__4.6.6 테이블 속성 변경
__4.6.7 저장소 속성 변경
__4.6.8 기타 테이블 변경 문
CHAPTER 5 HiveQL: 데이터 조작
_5.1 매니지드 테이블에 데이터 로딩하기
_5.2 쿼리 결과를 테이블에 넣기
__5.2.1 동적 파티션 삽입
_5.3 쿼리 하나로 테이블을 생성하고 데이터 로딩하기
_5.4 데이터 꺼내기
CHAPTER 6 HiveQL: 쿼리
_6.1 SELECT ... FROM 절
__6.1.1 정규표현식으로 컬럼 선택하기
__6.1.2 컬럼값으로 계산하기
__6.1.3 산술 연산자
__6.1.4 함수 사용하기
__6.1.5 LIMIT 절
__6.1.6 컬럼 별칭
__6.1.7 중첩 SELECT 문
__6.1.8 CASE ... WHEN ... THEN 문
__6.1.9 하이브가 맵리듀스를 사용하지 않을 때
_6.2 WHERE 절
__6.2.1 술어 연산자
__6.2.2 부동소수점수 비교의 잠재적 문제
__6.2.3 LIKE와 RLIKE
_6.3 GROUP BY 절
__6.3.1 HAVING 절
_6.4 조인 문
__6.4.1 내부 조인
__6.4.2 조인 최적화
__6.4.3 왼쪽 외부 조인
__6.4.4 외부 조인의 잠재적 문제
__6.4.5 오른쪽 외부 조인
__6.4.6 완전 외부 조인
__6.4.7 왼쪽 세미 조인
__6.4.8 카타시안 프로덕트 조인
__6.4.9 맵 사이드 조인
_6.5 ORDER BY와 SORT BY
_6.6 SORT BY와 함께 사용하는 DISTRIBUTE BY
_6.7 CLUSTER BY
_6.8 형변환
__6.8.1 BINARY값 형변환
_6.9 데이터 표본을 만드는 쿼리
__6.9.1 블록으로 표본 만들기
__6.9.2 버킷 테이블들에 대한 입력 푸루닝
_6.10 UNION ALL
CHAPTER 7 HiveQL: 뷰
_7.1 쿼리의 복잡함을 줄여주는 뷰
_7.2 조건을 기반으로 데이터를 제한하는 뷰
_7.3 동적 테이블을 위한 뷰와 MAP 데이터형
_7.4 기타
CHAPTER 8 HiveQL: 색인
_8.1 색인 생성
__8.1.1 비트맵 색인
_8.2 색인 재구축
_8.3 색인 보기
_8.4 색인 삭제
_8.5 사용자 정의 색인 핸들러 구현
CHAPTER 9 스키마 설계
_9.1 날짜별 테이블
_9.2 파티션 설계 시 고려사항
_9.3 고유 키와 정규화
_9.4 동일 데이터에 대한 다중 패스 만들기
_9.5 임시 테이블 파티셔닝하기
_9.6 테이블 저장소 버킷팅하기
_9.7 테이블에 컬럼 추가하기
_9.8 컬럼 기반 테이블 사용하기
__9.8.1 반복 데이터
__9.8.2 다수의 컬럼
__9.9 압축하기
CHAPTER 10 튜닝
_10.1 EXPLAIN 사용하기
_10.2 EXPLAIN EXTENDED
_10.3 LIMIT 튜닝
_10.4 최적화된 조인
_10.5 로컬 모드
_10.6 병렬 수행
_10.7 strict 모드
_10.8 맵퍼와 리듀서 수의 최적화
_10.9 자바 가상 머신 재사용
_10.10 색인
_10.11 동적 파티셔닝 튜닝
_10.12 투기적 실행
_10.13 다수의 GROUP BY 연산 결합하기
_10.14 가상 컬럼
CHAPTER 11 기타 파일 포맷과 압축
_11.1 설치된 코덱 확인
_11.2 압축 코덱 선택
_11.3 중간 과정 압축
_11.4 최종 출력 압축
_11.5 시퀀스파일
_11.6 압축하기
_11.7 파티션 아카이빙하기
_11.8 정리하기
CHAPTER 12 개발
_12.1 Log4J 속성 변경
_12.2 하이브 디버깅하기
_12.3 소스로부터 하이브 빌드하기
_12.3.1 다양한 하이브 테스트 케이스 실행하기
_12.3.2 후크 실행
_12.4 이클립스와 하이브 설정
_12.5 메이븐 프로젝트에서 하이브
_12.6 hive_test와 함께하는 하이브 테스트
_12.7 새로운 플러그인 개발 킷
CHAPTER 13 함수
_13.1 함수 탐색 및 설명
_13.2 함수 호출
_13.3 표준 함수
_13.4 집계 함수
_13.5 테이블 생성 함수
_13.6 생일로 별자리를 찾는 UDF
_13.7 UDF vs. GenericUDF
_13.8 영구적 사용을 위한 함수 등록
_13.9 사용자 정의 집계 함수
__13.9.1 GROUP_CONCAT을 따라 하는 COLLECT UDAF 함수 생성
_13.10 사용자 정의 테이블 생성 함수
__13.10.1 다중 로우 생성 UDTF
__13.10.2 다중 컬럼을 이용한 단일 로우 생성 UDTF
__13.10.3 복합 데이터형 효과를 내는 UDTF
_13.11 UDF에서 분산 캐시 접근
_13.12 함수 어노테이션
__13.12.1 결정성
__13.12.2 상태 유지
__13.12.3 distinctLike
_13.13 매크로
CHAPTER 14 스트리밍
_14.1 항등 변환
_14.2 데이터형 변환
_14.3 투사 변환
_14.4 조작 변환
_14.5 분산 캐시 사용
_14.6 로우 하나를 여러 로우로 변환하기
_14.7 스트리밍을 이용한 집계 계산
_14.8 CLUSTER BY, DISTRIBUTE BY, SORT BY
_14.9 자바 스트리밍을 위한 GenericMR 도구들
_14.10 그룹 간 계산
CHAPTER 15 하이브 파일과 레코드 포맷 사용자화
_15.1 파일 vs. 레코드 포맷
_15.2 CREATE TABLE 문 파헤치기
_15.3 파일 포맷
__15.3.1 시퀀스파일
__15.3.2 RCFile
__15.3.3 사용자 정의 입력 포맷 예제: DualInputFormat
_15.4 레코드 포맷: SerDe
_15.5 CSV와 TSV SerDe
_15.6 ObjectInspector
_15.7 Think Big 하이브 리플렉션 ObjectInspector
_15.8 XML UDF
_15.9 XPath 관련 함수
_15.10 JSON SerDe
__15.11 에이브로 하이브 SerDe
__15.11.1 테이블 속성을 이용한 에이브로 스키마 정의
__15.11.2 URI로 스키마 정의
__15.11.3 스키마 진화
__15.12 바이너리 출력
CHAPTER 16 하이브 쓰리프트 서비스
_16.1 쓰리프트 서버 구동하기
_16.2 그루비로 연결하기
_16.3 하이브 서버에 연결하기
_16.4 클러스터 상태 얻기
_16.5 결과 집합 스키마
_16.6 결과 가져오기
_16.7 쿼리 플랜 반환
_16.8 메타스토어 메소드
_16.8.1 예제 테이블 검사기
_16.9 하이브 서버 관리
__16.9.1 하둡 서비스 운영
__16.9.2 디렉터리 비우기
_16.10 하이브 쓰리프트 메타스토어
__16.10.1 쓰리프트 메타스토어 설정
__16.10.2 클라이언트 설정
CHAPTER 17 스토리지 핸들러와 NoSQL
_17.1 스토리지 핸들러 배경 지식
_17.2 하이브 스토리지 핸들러
_17.3 HBase
_17.4 카산드라
__17.4.1 정적 컬럼 매핑
__17.4.2 동적 컬럼 맵핑
__17.4.3 카산드라 SerDe 속성
_17.5 다이나모디비
CHAPTER 18 보안
_18.1 하둡 보안과 통합
_18.2 하이브 인증
_18.3 하이브 권한
__18.3.1 사용자, 그룹, 역할
__18.3.2 특권 부여와 회수
__18.3.3 파티션 레벨 특권
__18.3.4 자동 권한 부여
CHAPTER 19 잠금
_19.1 주키퍼를 이용한 하이브 잠금 제공
_19.2 명시적 배타적 잠금
CHAPTER 20 우지와 하이브 통합
_20.1 우지 액션
__20.1.1 하이브 쓰리프트 서비스 액션
_20.2 두 개의 쿼리를 실행하는 워크플로우
_20.3 우지 웹 콘솔
_20.4 워크플로우 내의 변수
_20.5 출력 캡처
_20.6 변수로 출력 캡처
CHAPTER 21 하이브와 아마존 웹 서비스
_21.1 왜 EMR인가?
_21.2 인스턴스
_21.3 시작하기 앞서
_21.4 EMR 하이브 클러스터 관리하기
_21.5 EMR 하이브에서 쓰리프트 서버
_21.6 EMR에서 인스턴스 그룹
_21.7 EMR 클러스터 설정하기
__21.7.1 hive-site.xml 배치
__21.7.2 .hiverc 스크립트 배치
__21.7.3 메모리 집약적인 설정
_21.8 EMR에서의 지속성과 메타스토어
_21.9 EMR 클러스터 상의 HDFS와 S3
_21.10 S3에 리소스, 설정, 부트스트랩 스크립트 올리기
_21.11 S3에 로그 남기기
_21.12 스팟 인스턴스
_21.13 보안 그룹
_21.14 EMR vs. EC2, 그리고 아파치 하이브
_21.15 정리하기
CHAPTER 22 HCatalog
_22.1 소개
_22.2 맵리듀스
__22.2.1 데이터 읽기
__22.2.2 데이터 쓰기
_22.3 명령행
_22.4 보안 모델
_22.5 아키텍처
CHAPTER 23 사례 연구
_23.1 m6d.com (Media6Degrees)
__23.1.1 하이브와 R을 활용한 M6D의 데이터 분석
__23.1.2 M6D Pseudorank 사용자 정의 함수
__23.1.3 다수의 맵리듀스 클러스터에서 하이브 데이터 관리
_23.2 아웃브레인
__23.2.1 사이트 내 유입 경로 식별
__23.2.2 고유 값 세기
__23.2.3 사용자 활동 분석
_23.3 NASA 제트 추진 연구소
__23.3.1 지역 기후 모델 분석 시스템
__23.3.2 하이브를 선택한 이유
__23.3.3 도전과 극복
_23.4 포토버킷
__23.4.1 포토버킷의 빅데이터
__23.4.2 하이브를 위하여 어떤 하드웨어를 사용했나?
__23.4.3 하이브로 이관할 데이터
__23.4.4 누가 사용하나?
_23.5 심플리치
_23.6 카르마스피어 관점에서 고객사의 경험과 요구사항
__23.6.1 소개
__23.6.2 사례
[부록A] 오라클 마이그레이션
[부록B] 오픈소스 R하이브
[부록C] 용어
[부록D] 참고 문헌