하둡 좋은약이지만 만병통치약은 아니다

41
Hadoop? 좋은 약이지만 만병통치약은 아니다 2014.04.19 정민철 ([email protected])

description

열린세미나 첫번째 발표자료 과거시스템에서의 문제점 그리고 하둡에서는 어떻게 그런문제를 해결했는설명하고 사실 몇가지 불편한점에 대한 이야기 https://www.facebook.com/groups/576473599127259

Transcript of 하둡 좋은약이지만 만병통치약은 아니다

Page 1: 하둡 좋은약이지만 만병통치약은 아니다

Hadoop?좋은 약이지만

만병통치약은 아니다

2014.04.19정민철 ([email protected])

Page 2: 하둡 좋은약이지만 만병통치약은 아니다

내가 누구?

코난테크롤로지에서 4년 정도 일했고, 현재 네이버에서 2년정도 검색광고 집계 일부를 담당. 기냥 흔히 보는 남자개발자 !뭔가 간식비라도 벌어보고 싶어 회사 이외에 INDF 라는 지인들과 코딩품앗이 & 스터디 (?) 아무튼 정체 불명의 모임을 시도중 !HTTP://BLOG.INDF.NET

Page 3: 하둡 좋은약이지만 만병통치약은 아니다

빅데이터

BigTable MapReduce

NoSQL

구글

대용량처리

분산처리HDFS

오픈소스

SNS

야후더그커팅

아파치

Page 4: 하둡 좋은약이지만 만병통치약은 아니다

발표순서

1장. 과거시스템의 이해

2장. 하둡

3장. 너네팀은 어떻게 써?

4장. 하둡 친구 소개

Page 5: 하둡 좋은약이지만 만병통치약은 아니다

1장. 과거시스템의 이해

Page 6: 하둡 좋은약이지만 만병통치약은 아니다

‘과거에는 데이터가 아니라 사용자가 많은게 문제였다’

–정민철

Page 7: 하둡 좋은약이지만 만병통치약은 아니다

과거의 부하의 중심은 사용자 !!!

서버

사용자

DBMS 캐쉬

사용자로드밸런싱

서버

서버

사용자

Page 8: 하둡 좋은약이지만 만병통치약은 아니다

도서관의 모든 책 읽기 문제 ?!왜 하둡이 큰 데이터를 처리 할 때 좋을까 ?

Page 9: 하둡 좋은약이지만 만병통치약은 아니다

사실 DBMS에서도분산 저장과 처리가능함

master

slave 1 slave 2 slave 3Data 1/3

data 2/3

data 3/3

- 파티셔닝 / 샤딩- 마스터 / 슬레이브

데이터Clone !!! Split !!!

Page 10: 하둡 좋은약이지만 만병통치약은 아니다

심지어 Twitter에서는 MySql을 사용

http://www.slideshare.net/yousukehara/introduction-of-twitter-gizzard

Page 11: 하둡 좋은약이지만 만병통치약은 아니다

그런데 뭐가 문제인거지?

프로그램네트워크data

데이터가 네트워크로 보내기엔 너무 큰게 함정

Page 12: 하둡 좋은약이지만 만병통치약은 아니다

아까 이야기한 도서관으로 이야기로 생각하자.

도서관 나

도서관의

모든책을

대출 ?

Page 13: 하둡 좋은약이지만 만병통치약은 아니다

DATAApp

size : 수백 기가이상size : 몇 메가 수준

데이터를 가져오는 방식것보다로직을 데이터가 있는곳으로 넘기는것이 훨씬 효율적임

Page 14: 하둡 좋은약이지만 만병통치약은 아니다

2장. 하둡

Page 15: 하둡 좋은약이지만 만병통치약은 아니다

하둡 소개

대용량의 데이터를 분산처리해줄수 있도록 하는 오픈소스 프로젝트

Nutch/Lucene 프로젝트의 서브프레임워크이며, 자바로 구현

크게 분산파일시스템(HDFS)와 맵리듀스(MapReduce)로 구성

소수의 비싼 서버보다는 다수의 저렴한 서버 사용 (스케일아웃)(장애 허용 구조, 3copy 로 데이터 유실 방지)

오프라인 배치에 최적화

맵리듀스를 통한 단순화된 병렬 프로그래밍 가능.

Page 16: 하둡 좋은약이지만 만병통치약은 아니다

HDFS + MAP/REDUCE = Hadoop

한줄요약

Page 17: 하둡 좋은약이지만 만병통치약은 아니다

하둡의 구조

JobTracker/TaskTracker + MapReduce

NameNode/DataNode

1. JobTracker에서는 우리가 만든 MapReduce로직을 복사하고 관리해줌. !2. HDFS는 파일저장소임, 파일 여러서버에 조각내서 저장함. text파일이나 바이너리 파일을 저장할 수 있음.

대용량처리

분산스토리지

Page 18: 하둡 좋은약이지만 만병통치약은 아니다

1.1 HDFS ?

2003년 구글랩에서 발표된 The Google FileSystem이란 논문을 바탕으로 작성된 파일시스템

특징

파일을 여러개의 블록으로 나눠서 저장 (기본 64mb)

하드웨어 고장에 견고 (다른 서버에 복제본 저장 보통 3copy)

스트리밍 데이터 액서스 (배치에 최적화)

Page 19: 하둡 좋은약이지만 만병통치약은 아니다

1.2 HDFS 구조

NameNode

DataNode 1 DataNode 2 DataNode 3

samle.text

samle.text

datanode1 : 별, 세모 datanode2: 동그라미, 오각형 datanode3: 마름모, 사각형

데이터의 분배

Page 20: 하둡 좋은약이지만 만병통치약은 아니다

2. Map/Reduce의 개념함수형 언어에서 사용되는 Map함수와 Reduce함수에서 힌트를 얻어서 만들어짐

Page 21: 하둡 좋은약이지만 만병통치약은 아니다

2. Map/Reduce의 분산처리KEY 단위로 VALUE 를 묶어서 분산처리를 가능하게 하는 방법.

[MAP]홀수 : 1 홀수 : 3 홀수 : 5 짝수 : 2 짝수 : 4 짝수 : 6

홀수 : [1,3,5] 짝수 : [2,4,6]

[REDUCE]홀수 : 9짝수 : 12

Page 22: 하둡 좋은약이지만 만병통치약은 아니다

2. 하둡에서의 Map/Reduce 순서

Page 23: 하둡 좋은약이지만 만병통치약은 아니다

3. JobTracker / TaskTracker

JobTracker

TaskTacker 1 TaskTacker 2 TaskTacker 3

MyLogic.jar

task1

task2

task…

task1

task2

task…

task1

task2

task…

MyLogic.jar MyLogic.jar MyLogic.jar

로직의 분배

Page 24: 하둡 좋은약이지만 만병통치약은 아니다

사실 서버기준으로 보면, 데이터 저장되는 서버에 같이 세팅

하둡마스터 서버

하둡 서버1 하둡 서버2 하둡 서버3

NameNode

JobTracker

DataNode 1

TaskTracker 1

DataNode 2

TaskTracker 2

DataNode 3

TaskTracker 3

Page 25: 하둡 좋은약이지만 만병통치약은 아니다

여기까지 세미나를 듣고 온 나의 생각

Page 26: 하둡 좋은약이지만 만병통치약은 아니다

하지만…

Page 27: 하둡 좋은약이지만 만병통치약은 아니다

단어세기 샘플소스@SuppressWarnings("unused")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); }}

실행(main)

맵퍼

리듀서

간단하긴 개뿔… !

SQL로는 엄청 간단한것도 엄청 손이 많이감 단순히 단어 갯수 세는 샘플도 클래스가 3개필요함

!

그나마 병렬처리를 단순화 한편이긴 하지만 이 구조에 맞춰서 개발해야 하고

Join같은걸 구현하려면 클래스 엄청 만들어야함 !

MR의 구조를 이해 못하면 엉뚱한 결과가 나올수 있음 !

Page 28: 하둡 좋은약이지만 만병통치약은 아니다

설정파일

시스템 구조의 이해와 맵리듀스 처리에 대한 지식 필요함

잡트레커?

컴바인?

셔플?

네임노드?

태스크트레커?

데이타노드

투기적실행?

Page 29: 하둡 좋은약이지만 만병통치약은 아니다

다시 강조하지만, DB같은것이 아님 !!! 파일이고 배치작업에 목적이 있음.

http://freesearch.pe.kr/archives/1175

Page 30: 하둡 좋은약이지만 만병통치약은 아니다

3장. 너네팀은 어떻게 써?

Page 31: 하둡 좋은약이지만 만병통치약은 아니다

1. 구성 하둡클러스터 (1…N)

hadoop hadoop hadoop

hadoop hadoop hadoop

logic 실행서버 & 로그 스케쥴러

hadoop hadoop hadoop

hadoop hadoop hadoop

메모리서버 (1…N)자체 개발

Hive

hbase hbase hbase

hbase hbase hbase

Hbase클러스터

MongoDB + ROR

로그사이즈 모니터링Strom

데이터 이상 감지

dbms exadata

Page 32: 하둡 좋은약이지만 만병통치약은 아니다

2. 개발용 프레임워크 사용

Spring

Hadoop API

config + 랩핑 API

1. 여러개의 Map/Reduce 작업을 xml로 관리

2. 동일한 HDFS상의 input을 사용하는 여러개의작업을 한번의 read로 처리하도록 함

!3. 자주쓰는 패턴은 해당 프레임워크에 기능구현

4. 데몬형태로 동작하여 네트워크로 작업요청가능

사내 네트워크통신 모듈

Page 33: 하둡 좋은약이지만 만병통치약은 아니다

4장. 하둡 친구 소개부제 : 하둡 에코 시스템

Page 34: 하둡 좋은약이지만 만병통치약은 아니다

출처:http://1004jonghee.tistory.com

Page 35: 하둡 좋은약이지만 만병통치약은 아니다

MAP/REDUCE의 코드작성 불편함을 해결

Page 36: 하둡 좋은약이지만 만병통치약은 아니다

SQL on Hadoop

Page 37: 하둡 좋은약이지만 만병통치약은 아니다

랜덤 액서스 / 저장

Page 38: 하둡 좋은약이지만 만병통치약은 아니다

실시간 처리

Page 39: 하둡 좋은약이지만 만병통치약은 아니다

하나의 솔루션으로 해결하는건 어려움.요즘 추세는 용도에 맞게 섞어써야 함. !예를 들어 하루동안 쌓인 몇백기가의 로그파싱과 1차집계는 하둡으로 하고 요약된 결과는 HBASE에서 관리한다거나, 실시간 처리를 위해 kafka 를 이용해 로그를 메시지큐에 넣고 스톰으로 처리 한다거나 이런 용도별로 섞는 기술이 필요함. !그전에, 데이터가 정말 커서 문제인것인지 판단필요.

Page 40: 하둡 좋은약이지만 만병통치약은 아니다

http://tedwon.com/display/dev/MapReduce+Programming

참고자료

http://hortonworks.com/blog/office-hours-qa-on-yarn-in-hadoop-2/http://www.openwith.net/?p=506

http://answers.oreilly.com/topic/2141-how-mapreduce-works-with-hadoop/

http://www.youtube.com/watch?v=5cKTP36HVgIhttp://www.cubrid.org/blog/dev-platform/database-sharding-platform-at-nhn/http://www.slideshare.net/madvirus/ss-29075031#btnNext

http://bcho.tistory.com/622

http://www.slideshare.net/hyunsikchoi/sqlonhadoop-tajo-tech-planet-2013http://www.slideshare.net/kongbong/hadoop-15513713

http://dslab.konkuk.ac.kr/Class/2011/11CD2/T7/%5B%EC%A2%85%ED%95%A9%EC%84%A4%EA%B3%842%5D_%EC%B5%9C%EC%A2%85%EB%B0%9C%ED%91%9C

%EC%9E%90%EB%A3%8C_%EC%9B%90%EB%AC%B8_%EC%A1%B0%EC

Page 41: 하둡 좋은약이지만 만병통치약은 아니다

이 발표는 끝. 혹시 궁금한거 있나요?