Hadoop 완벽 가이드 1장 2장

1장
하둡 vs 자발적컴퓨팅
자발적 컴퓨팅은 큰 데이터를 쪼갠 뒤 세계 여러 컴퓨터로 보내서 풀어달라고 한다.
신뢰할 수 없는 컴퓨터이기 때문에 3개의 지원자 중 2개 이상이 일치할 경우 승인하는 방식이다.
이는 대역폭을 늘리는 것이 아니라 cpu 사이클을 늘리는 방식이다.
하둡은 이와 다르게 단일 데이터 센터에서 실행되므로 신뢰할 수 있는 전용 하드웨어이다.

피그: 대규모 데이터 셋 탐색용 데이터 흐름 언어와 실행 환경. HDFS와 맵리듀스 클러스터에서 수행된다.
하이브: 분산 데이터웨어하우스. HDFS에 저장된 데이터를 관리하고 데이터 쿼리를 위해 SQL 기반 쿼리 언어를 제공한다.
HBase: 분산 컬럼 지향 데이터베이스. 스토리지로 HDFS를 사용한다. 맵리듀스를 이용한 일괄 처리 방식의 계산과 랜덤 읽기가 가능한 포인트 쿼리 방식 모두를 지원한다.
주키퍼: 다수 컴퓨터로 분산 처리되는 고가용성 저장 서비스. 분산 응용 프로그램을 구축하기 위해 사용될 수 있는 분산 락 같은 primitive를 제공한다.
스쿱: 관계형 데이터베이스와 HDFS 간 데이터를 효율적으로 이동시키기 위한 도구.
오지: 하둡 잡의 워크플로우를 실행하고 스케쥴링하기 위한 서비스.


2장 맵리듀스
맵 단계의 입력은 원본 데이터이다.
예를 들어 세계 각 기상청에서 만든 데이터들을 수집해서 각 해의 최고 기온을 뽑는다고 해보자.
맵 함수는 리듀스 함수의 준비 단계인데 잘못된 레코드를 제거하는 역할도 수행한다.
각 데이터는 키-값 쌍으로 맵에 전달된다. 이 때, 키는 파일 내에서 몇 번째 데이터인지 나타내는 오프셋이다. (1, 2020xxxx41xxxx)
맵에서 키는 무시하고 값 데이터에서 연도와 기온을 추출한 뒤 출력한다. [2020, 41], [2020, 25], ...
이 출력이 리듀스 함수로 전달 되기 전에 맵리듀스 프레임워크가 키를 중심으로 값의 리스트를 만들어서 리듀스 함수로 보낸다. (2020, [41, 25, 33, 31])
리듀스 함수는 각 키마다 있는 기온 리스트의 최댓값을 추출한다.

맵 자바 파일과 리듀스 자바 파일을 각각 만든 뒤 맵리듀스 자바파일을 메인으로 해서 jar 파일을 만든다.

하나의 잡트래커와 다수의 태스크트래커가 있는데 잡트래커는 시스템 전체에서 모든 잡이 수행되도록 태스크를 스케쥴링한다.
스플릿이 작아질수록 load balancing에 좋은 효과를 내지만 너무 작으면 관리와 맵 태스크 생성을 위한 오버헤드가 커질 수 있다.
잡을 위한 적합한 분할 크기는 기본적으로는 64MB의 HDFS 블록을 사용하는 추세이다.

data locality optimization: 노드에서 맵 태스크를 실행할 때 잘 작동한다.
클러스터의 중요한 공유 자원인 네트워크 대역폭을 사용하지 않기 때문이다.
네트워크를 쓰지 않고 로컬 데이터만을 사용하도록 한다.

리듀스 태스크는 일반적으로 모든 매퍼로부터 출력을 입력으로 받기 때문에 데이터 지역성의 장점이 없다.
정렬된 맵의 결과는 리듀스 태스크가 실행 중인 노드로 네트워크를 통해 전송된다.
리듀스의 츨력에 대한 각 HDFS 블록은 첫 복제본이 로컬 노드에 저장되고 그 이외의 복제본은 out-rack에 저장된다.

컴바이너 함수
맵과 리듀스 태스크 간 데이터 전송을 최소화하기 위해 필요하다.
예를 들어 어떤 해의 최고 기온을 구하는 작업이라고 할 때 맵1에서는 (2000, 0), (2000, 10)이 나왔고 맵2에서는 (2000,5), (2000, 15), (2000, 20)가 나왔다고 하자.
컴바이너가 없는 경우는 다 맵에 전달되어 (2000, [0, 10, 5, 15, 20])에서 최댓값을 찾게 된다.
하지만 컴바이너를 거치면 미리 최댓값을 뽑은 뒤 보내도록 해서 맵에 전달되는 데이터는 (2000, [10, 20])이 된다.
하지만 항상 가능한 것은 아니고 만약 평균값을 구해야 하는 경우라면 이런 식의 컴바이너는 사용할 수 없다.
리듀서는 하나의 매퍼에게만 데이터를 받는 것이 아니다.





댓글

이 블로그의 인기 게시물

논문 정리 - MapReduce: Simplified Data Processing on Large Clusters

논문 정리 - The Google File System

kazoo: Using zookeeper api with python