하둡 (Hadoop) 및 관련기술 훑어보기
-
Upload
beom-kyun-choi -
Category
Technology
-
view
10.272 -
download
9
description
Transcript of 하둡 (Hadoop) 및 관련기술 훑어보기
Hadoop & 관련 기술 훑어보기
최범균 (2013-12-02)
목표
● 하둡 및 관련 기술들 개요 수준으로 알아보기○ 깊게 파기 위한 사전 준비 (이런 게 있다…)
■ 용어/이름 정도는 알고 가자○ 각 기술들의 정확한 동작 원리 등은 앞으로 파야 함
● 훑어볼 것들○ Hadoop (HDFS, MR)○ Pig / Hive○ Flume / Sqoop○ Oozie○ HBASE
시작은 Hadoop 부터
● 두 가지 목적○ 정말 매우 큰 데이터를 저장할 수 있어야 하고○ 그 데이터를 이용해서 연산을 수행할 수 있어야 함
● 이를 위한 두 가지○ HDFS(Hadoop Distributed File System)○ MapReduce (2버전에는 YARN)
HDFS: 분산 파일 시스템
네임노드
데이터노드
데이터노드
데이터노드
하둡 클라이언트
파일(블록)-데이터노드 메타 정보SPOF
Heart Beat, 블록 정보 전송
접근할 데이터 노드 문의
파일 읽기/쓰기
파일 쓰기 시에 데이터 노드 간 블록 복사
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 MRpublic 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); }}
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';
MR
Pig
Hive
● 마치 RDBS처럼○ SQL과 매우 유사한 HQL○ DB/테이블 제공
● 데이터 보관/쿼리 실행을 하둡에서○ HDFS에 데이터 보관○ HQL을 MR로 변환해서 실행
● 별도의 RDB에 DB/테이블 메타정보 저장● 제약
○ 행 단위 수정/삭제 불가 (HDFS 파일의 제약)○ 트랜잭션 X
Hive의 구성
Driver
Session,Compiler
Execution Engine
메타스토어
하둡클러스터
HiveServer
Hive JDBCDriver
Hive ThriftClient
CLI
Hive WebInterface
Sqoop
● RDBMS와 HDFS/Hive/HBase 간 데이터 이동을 처리해주는 도구○ MR을 생성해서 하둡을 통해 실행
Sqoop(CLI 도구)
RDB
하둡 클래스터
MR 태스크HDFSHive
HBase
메타 정보 로딩
데이터 복사
Flume
● 로그를 하둡에 보관하기 위한 목적으로 사용● 일반적인 구성
Agent
Agent
Agent
Agent
Agent
하둡클러스터(HDFS, HBASE)
tail, syslog 등에서 로그 수집
Oozie
● Hadoop 관련 워크플로우 엔진○ 워크플로우 정의 (XML)
■ 작업 (Hive, Pig, Sqoop 등을 이용한 작업 정의)■ 작업 간 의존(실행 순서) 설정
○ 워크플로우 실행 및 모니터링
Oozie서버
하둡클러스터
RDB
Oozie클라이언트
CLI, Java API, Rest API웹브라우저(읽기 전용)
HBase
● 실시간 서비스 위한 하둡 기반 데이터 저장소
HMaster
Zookeeper
Region Server
Region Server
Region Server
하둡 클러스터 HDFS
Client
- 한 개 이상의 리전을 가짐- 클라이언트의 읽기/쓰기 요청 처리- 리전은 메모리에 일정 크기 데이터 보관 (캐시 효과)
ROOT 테이블 위치 조회
- 커밋 로그 보관- 데이터 보관
클러스터 코디네이터
리전 관리
HBase
● 주요 특징○ 데이터를 HDFS에 저장○ 컬럼 기반 형태의 NoSQL DB○ 데이터 크기가 커지면 자동 분리(auto sharding)○ 높은 쓰기 처리량○ rowkey 기반 접근○ 행 단위 Consistency 보장
■ 즉, 여러 행에 대한 트랜잭션 보장 없음
데이터 처리데이터 적재
정리
하둡 클러스터 (HDFS/MR)
Pig(스크립트)
Hive(SQL)
HBase클러스터(NoSQL)
Sqoop(RDB 복사)
Flume(로그 복사)
Oozie(워크플로우)
기타: 관련 기술 너무 많음 ^^;
● 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