Hadoop & 관련 기술 훑어
보기
최범균 (2013-12-02)
목표
● 하둡 및 관련 기술들 개요 수준으로 알아보기
○ 깊게 파기 위한 사전 준비 (이런 게 있다…)
■ 용어/이름 정도는 알고 가자
○ 각 기술들의 정확한 동작 원리 등은 앞으로 파야 함

● 훑어볼 것들
○
○
○
○
○

Hadoop (HDFS, MR)
Pig / Hive
Flume / Sqoop
Oozie
HBASE
시작은 Hadoop 부터
● 두 가지 목적
○ 정말 매우 큰 데이터를 저장할 수 있어야 하고
○ 그 데이터를 이용해서 연산을 수행할 수 있어야 함

● 이를 위한 두 가지
○ HDFS(Hadoop Distributed File System)
○ MapReduce (2버전에는 YARN)
HDFS: 분산 파일 시스템
접근할
데이터 노드 문의

네임노드

Heart Beat, 블록 정보 전송

하둡 클라이언트

파일 읽기/쓰기

파일(블록)-데이터노드 메타 정보
SPOF

데이터
노드

데이터
노드

데이터
노드

파일 쓰기 시에 데이터 노드 간 블록 복사
MapReduce 1: 병렬 연산 수행
잡(Job)
실행 요청
잡 클라이언트

복사
- 잡 파일
- 잡 스플릿 정보

잡트래커

잡 정보 조회

잡 파일 조회
HDFS

잡을 태스크로 분리
작은 규모는 네임노드 프로세
스와 동일 노드 위치

주기적 상태 보고
태스크 할당 받음

태스크
트래커
프로세스
생성

맵: 파일 읽기
리듀스: 결과 저장

태스크JVM

데이터노드 프로세스와
동일 노드
MapReduce 1 흐름

태스크JVM
맵 실행

맵 결과

맵 결과
태스크JVM
맵 실행

맵 결과

맵 결과
맵 결과

태스크JVM
맵 실행

맵 결과

맵 결과
병합

태스크JVM
리듀스 실행
HDFS/MR과 관련된 난관
● 맵리듀스 프로그램을 직접 하려면 머리 빠짐
● 외부 데이터를 하둡에 밀어넣기 위해 코드 만
들기 귀찮다.
● 데이터 처리 흐름을 직접 만들자니, 귀찮다.
● 서비스 어플리케이션의 데이터 보관소로 사
용하고 싶다.
HDFS/MR 관련 기술들
상황

기술

MR을 쉽게

Pig: 전용 스크립트로 데이터 처리
Hive: SQL을 이용한 데이터 처리

데이터 이동을 쉽게

Flume: 로그를 HDFS에 복사
Sqoop: RDB와 HDFS간의 데이터 복
사

데이터 처리 흐름을 쉽
게

Oozie

NoSQL처럼

HBASE
Pig
● 분석 위한 고수준 언어 지원 (Pig Latin)
○
○
○
○
○

HDFS 파일을 PigStorage()로 추상화해서 접근
AVG, COUNT, MAX, SUM, ...
JOIN, DISTINCT, GROUP, ORDER BY ...
FOREACH, CASE, FILTER, ...
LOAD, STORE로 HDFS 파일 접근

● 대용량 데이터셋 분석 플랫폼
○ 스크립트를 MR로 변환해서 하둡에서 실행

● 스크립트 실행 방식
○ grunt: 대화형 쉘에서 스크립트 입력
○ script: 스크립트 파일을 실행
Pig vs MR
MR

public class WordCount {
public static class Map extends MapReduceBase
implements Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
output.collect(word, one);
}
}
}
public static class Reduce extends MapReduceBase
implements Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) sum += values.next().get();
output.collect(key, new IntWritable(sum));
}
}
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(WordCount.class);
conf.setJobName("wordcount");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}

Pig

A = load './input.txt';
B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;
C = group B by word;
D = foreach C generate COUNT(B), group;
store D into './wordcount';

}
Hive
● 마치 RDBS처럼
○ SQL과 매우 유사한 HQL
○ DB/테이블 제공

● 데이터 보관/쿼리 실행을 하둡에서
○ HDFS에 데이터 보관
○ HQL을 MR로 변환해서 실행

● 별도의 RDB에 DB/테이블 메타정보 저장
● 제약
○ 행 단위 수정/삭제 불가 (HDFS 파일의 제약)
○ 트랜잭션 X
Hive의 구성
메타스토어
CLI

Hive Web
Interface
Hive JDBC
Driver

Driver

Session,
Compiler
Execution Engine

Hive
Server

Hive Thrift
Client
하둡
클러스터
Sqoop
● RDBMS와 HDFS/Hive/HBase 간 데이터 이
동을 처리해주는 도구
○ MR을 생성해서 하둡을 통해 실행
하둡 클래스터
Sqoop
(CLI 도구)

MR 태스크

데이터 복사
메타 정보 로딩

RDB

HDFS
Hive
HBase
Flume
● 로그를 하둡에 보관하기 위한 목적으로 사용
● 일반적인 구성
Agent
Agent
Agent
Agent
Agent

tail, syslog 등에서 로그 수집

하둡
클러스터
(HDFS,
HBASE)
Oozie
● Hadoop 관련 워크플로우 엔진
○ 워크플로우 정의 (XML)
■ 작업 (Hive, Pig, Sqoop 등을 이용한 작업 정의)
■ 작업 간 의존(실행 순서) 설정
○ 워크플로우 실행 및 모니터링
Oozie
클라이언트

Oozie
서버

CLI, Java API, Rest API
웹브라우저(읽기 전용)

RDB

하둡
클러스터
HBase
● 실시간 서비스 위한 하둡 기반 데이터 저장소
클러스터 코디네이터
ROOT 테이블 위치 조회

Zookeeper

Client

- 한 개 이상의 리전을 가짐
- 클라이언트의 읽기/쓰기 요
청 처리
- 리전은 메모리에 일정 크기
데이터 보관 (캐시 효과)

HMaster

Region
Server

Region
Server

하둡 클러스터 HDFS

리전 관리

Region
Server

- 커밋 로그 보관
- 데이터 보관
HBase
● 주요 특징
○
○
○
○
○
○

데이터를 HDFS에 저장
컬럼 기반 형태의 NoSQL DB
데이터 크기가 커지면 자동 분리(auto sharding)
높은 쓰기 처리량
rowkey 기반 접근
행 단위 Consistency 보장
■ 즉, 여러 행에 대한 트랜잭션 보장 없음
정리
Oozie
(워크플로우)

데이터 적재
Flume
(로그 복사)

Sqoop
(RDB 복사)

데이터 처리
Pig
(스크립트)

하둡 클러스터
(HDFS/MR)

Hive
(SQL)

HBase
클러스터
(NoSQL)
기타: 관련 기술 너무 많음 ^^;
●
●
●
●
●

SQL on Hadoop: Impala, Tajo, Dremel
Machine Learing, 검색: Mahout, Elastic Search
분산 코디네이터: Zookeeper
Streaming 분석: Storm, S4 등
배포판
○ NDAP (NexR Data Analysis Platform)
○ CHD (Cloudera’s Distribution including Apache
Hadoop)
○ HDP (Hortonworks Data Platform)
● 시각화: D3

하둡 (Hadoop) 및 관련기술 훑어보기

  • 1.
    Hadoop & 관련기술 훑어 보기 최범균 (2013-12-02)
  • 2.
    목표 ● 하둡 및관련 기술들 개요 수준으로 알아보기 ○ 깊게 파기 위한 사전 준비 (이런 게 있다…) ■ 용어/이름 정도는 알고 가자 ○ 각 기술들의 정확한 동작 원리 등은 앞으로 파야 함 ● 훑어볼 것들 ○ ○ ○ ○ ○ Hadoop (HDFS, MR) Pig / Hive Flume / Sqoop Oozie HBASE
  • 3.
    시작은 Hadoop 부터 ●두 가지 목적 ○ 정말 매우 큰 데이터를 저장할 수 있어야 하고 ○ 그 데이터를 이용해서 연산을 수행할 수 있어야 함 ● 이를 위한 두 가지 ○ HDFS(Hadoop Distributed File System) ○ MapReduce (2버전에는 YARN)
  • 4.
    HDFS: 분산 파일시스템 접근할 데이터 노드 문의 네임노드 Heart Beat, 블록 정보 전송 하둡 클라이언트 파일 읽기/쓰기 파일(블록)-데이터노드 메타 정보 SPOF 데이터 노드 데이터 노드 데이터 노드 파일 쓰기 시에 데이터 노드 간 블록 복사
  • 5.
    MapReduce 1: 병렬연산 수행 잡(Job) 실행 요청 잡 클라이언트 복사 - 잡 파일 - 잡 스플릿 정보 잡트래커 잡 정보 조회 잡 파일 조회 HDFS 잡을 태스크로 분리 작은 규모는 네임노드 프로세 스와 동일 노드 위치 주기적 상태 보고 태스크 할당 받음 태스크 트래커 프로세스 생성 맵: 파일 읽기 리듀스: 결과 저장 태스크JVM 데이터노드 프로세스와 동일 노드
  • 6.
    MapReduce 1 흐름 태스크JVM 맵실행 맵 결과 맵 결과 태스크JVM 맵 실행 맵 결과 맵 결과 맵 결과 태스크JVM 맵 실행 맵 결과 맵 결과 병합 태스크JVM 리듀스 실행
  • 7.
    HDFS/MR과 관련된 난관 ●맵리듀스 프로그램을 직접 하려면 머리 빠짐 ● 외부 데이터를 하둡에 밀어넣기 위해 코드 만 들기 귀찮다. ● 데이터 처리 흐름을 직접 만들자니, 귀찮다. ● 서비스 어플리케이션의 데이터 보관소로 사 용하고 싶다.
  • 8.
    HDFS/MR 관련 기술들 상황 기술 MR을쉽게 Pig: 전용 스크립트로 데이터 처리 Hive: SQL을 이용한 데이터 처리 데이터 이동을 쉽게 Flume: 로그를 HDFS에 복사 Sqoop: RDB와 HDFS간의 데이터 복 사 데이터 처리 흐름을 쉽 게 Oozie NoSQL처럼 HBASE
  • 9.
    Pig ● 분석 위한고수준 언어 지원 (Pig Latin) ○ ○ ○ ○ ○ HDFS 파일을 PigStorage()로 추상화해서 접근 AVG, COUNT, MAX, SUM, ... JOIN, DISTINCT, GROUP, ORDER BY ... FOREACH, CASE, FILTER, ... LOAD, STORE로 HDFS 파일 접근 ● 대용량 데이터셋 분석 플랫폼 ○ 스크립트를 MR로 변환해서 하둡에서 실행 ● 스크립트 실행 방식 ○ grunt: 대화형 쉘에서 스크립트 입력 ○ script: 스크립트 파일을 실행
  • 10.
    Pig vs MR MR publicclass WordCount { public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } } public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) sum += values.next().get(); output.collect(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { JobConf conf = new JobConf(WordCount.class); conf.setJobName("wordcount"); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(Map.class); conf.setCombinerClass(Reduce.class); conf.setReducerClass(Reduce.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); } Pig A = load './input.txt'; B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word; C = group B by word; D = foreach C generate COUNT(B), group; store D into './wordcount'; }
  • 11.
    Hive ● 마치 RDBS처럼 ○SQL과 매우 유사한 HQL ○ DB/테이블 제공 ● 데이터 보관/쿼리 실행을 하둡에서 ○ HDFS에 데이터 보관 ○ HQL을 MR로 변환해서 실행 ● 별도의 RDB에 DB/테이블 메타정보 저장 ● 제약 ○ 행 단위 수정/삭제 불가 (HDFS 파일의 제약) ○ 트랜잭션 X
  • 12.
    Hive의 구성 메타스토어 CLI Hive Web Interface HiveJDBC Driver Driver Session, Compiler Execution Engine Hive Server Hive Thrift Client 하둡 클러스터
  • 13.
    Sqoop ● RDBMS와 HDFS/Hive/HBase간 데이터 이 동을 처리해주는 도구 ○ MR을 생성해서 하둡을 통해 실행 하둡 클래스터 Sqoop (CLI 도구) MR 태스크 데이터 복사 메타 정보 로딩 RDB HDFS Hive HBase
  • 14.
    Flume ● 로그를 하둡에보관하기 위한 목적으로 사용 ● 일반적인 구성 Agent Agent Agent Agent Agent tail, syslog 등에서 로그 수집 하둡 클러스터 (HDFS, HBASE)
  • 15.
    Oozie ● Hadoop 관련워크플로우 엔진 ○ 워크플로우 정의 (XML) ■ 작업 (Hive, Pig, Sqoop 등을 이용한 작업 정의) ■ 작업 간 의존(실행 순서) 설정 ○ 워크플로우 실행 및 모니터링 Oozie 클라이언트 Oozie 서버 CLI, Java API, Rest API 웹브라우저(읽기 전용) RDB 하둡 클러스터
  • 16.
    HBase ● 실시간 서비스위한 하둡 기반 데이터 저장소 클러스터 코디네이터 ROOT 테이블 위치 조회 Zookeeper Client - 한 개 이상의 리전을 가짐 - 클라이언트의 읽기/쓰기 요 청 처리 - 리전은 메모리에 일정 크기 데이터 보관 (캐시 효과) HMaster Region Server Region Server 하둡 클러스터 HDFS 리전 관리 Region Server - 커밋 로그 보관 - 데이터 보관
  • 17.
    HBase ● 주요 특징 ○ ○ ○ ○ ○ ○ 데이터를HDFS에 저장 컬럼 기반 형태의 NoSQL DB 데이터 크기가 커지면 자동 분리(auto sharding) 높은 쓰기 처리량 rowkey 기반 접근 행 단위 Consistency 보장 ■ 즉, 여러 행에 대한 트랜잭션 보장 없음
  • 18.
    정리 Oozie (워크플로우) 데이터 적재 Flume (로그 복사) Sqoop (RDB복사) 데이터 처리 Pig (스크립트) 하둡 클러스터 (HDFS/MR) Hive (SQL) HBase 클러스터 (NoSQL)
  • 19.
    기타: 관련 기술너무 많음 ^^; ● ● ● ● ● SQL on Hadoop: Impala, Tajo, Dremel Machine Learing, 검색: Mahout, Elastic Search 분산 코디네이터: Zookeeper Streaming 분석: Storm, S4 등 배포판 ○ NDAP (NexR Data Analysis Platform) ○ CHD (Cloudera’s Distribution including Apache Hadoop) ○ HDP (Hortonworks Data Platform) ● 시각화: D3