하둡 기반 빅데이터 처리 방법
HDFS File Distribution 하둡 기반 빅데이터 처리 기반 기술 기본 HDFS File Distribution HDFS Data Blocks and Input Split RECORD 1 100 MB RECORD 2 100 MB RECORD 3 100 MB RECORD 4 100 MB HDFS 블록 사이즈가 128메가바이트로 설정되어 있다면 4개 레코드들은 각 블록에 1개씩 분산될 수 없음. RECORD 1 100MB BLOCK 1 128MB RECORD 2 28MB 예) 블록1이 RECORD1 전체를 포함하면 RECORD2의 28MB가 블록1에 할당됨. BLOCK 2 128MB RECORD 2 72MB BLOCK1에서 하나의 Mapper가 작업을 수행한다면 RECORD2의 전체가 없기 때문에 수행을 완료할 수 없음(EOF 손실 현상) RECORD 3 56MB BLOCK들을 연결하여 논리적 레코드로 연결-> Input splits BLOCK 3 128MB RECORD 3 44MB RECORD 4 84MB BLOCK 4 128MB RECORD 4 16MB
HDFS File Distribution 하둡 기반 빅데이터 처리 기반 기술 기본 HDFS File Distribution HDFS Data Blocks and Input Split INPUT SPLIT 1 200MB RECORD 1 100MB Input split의 크기가 200MB로 설정되어 있다고 하면 RECORD 2 28MB RECORD 2 72MB Input Split1은 Record 1, 2를 모두 포함하게 되고, Split2는 Record3 에서 시작하게 됨. INPUT SPLIT 2 200MB Input split은 블록의 시작과 끝을 연결한 데이터의 논리적 묶음이됨. RECORD 3 56MB RECORD 3 44MB 만약 Input split의 크기가 Block 크기의 정수배가 된다면, Input Split을 다수의 Block으로 구성할 수 있고, 전체 Job을 위한 Mapper의 갯수가 작아지면서 병렬 작업의 크기가 작아짐.(빨라짐) INPUT SPLIT 3 200MB RECORD 4 84MB RECORD 4 16MB Ideal Configuration -> Input Split size = Block size
HDFS File Distribution 하둡 기반 빅데이터 처리 기반 기술 기본 HDFS File Distribution HDFS Data Blocks and Input Split Block size와 Input Split Size가 정수에 비례로 형성되지 않는다면, 완전 분산 모드시 Block 위치 탐색에 시작 소비가 증가함.
MapReduce Logical Flow 하둡 기반 빅데이터 처리 기반 기술 기본 MapReduce Logical Flow Input File(s) A Job RECORD 1 RECORD 2 MAPPER RECORD 3 Reducer MAPPER part_r_0000x RECORD 4 Result File(s) Reducer RECORD 5 MAPPER Temporary File(s) Processid_r_0000x RECORD 6 MAPPER Temporary File(s) RECORD 7 Processid_m_0000x RECORD 8
MapReduce Data Flow 하둡 기반 빅데이터 처리 기반 기술 기본 Input File(s) Mapper RECORD 1 개별 파일이 블록으로 나뉘어져 다수의 데이터 노드에 분산 저장 Mapper RECORD 2 블록으로 나뉘어진 다수의 레코드가 다수의 Mapper에 입력으로 설정됨. 개별 Mapper가 다루는 데이터는 상호 배제, 중복 되지 않음. RECORD 3 Mapper 각 Mapper함수의 Input Parameter protected void map(LongWritable key, Text value, Context context) RECORD 4 Key : 데이터의 index, 모든 Mapper가 동일한 값으로 시작 Mapper Value : 1개의 레코드 데이터 context: 현재 map함수가 수행되는 hadoop에 관한 정보를 가짐 RECORD 5 각 Mapper함수의 Output Parameter: Emit라고도 함 Context.write(Implemented WritableComparable key, Implemented WritableComparable value’) RECORD 6 Mapper Key : WritableComparable 인터페이스를 implement한 클래스 Value : WritableComparable 인터페이스를 implement한 클래스 RECORD 7 주의: 1. 각 Mapper에서는 전체 데이터중 해당 레코드의 위치를 판단할 수 없다. index 조차 Split되어 들어온 일부 데이터의 index에 불과하다. 2. Mapper 입력 데이터의 첫 라인은 전체 데이터의 첫 라인이 아니다. 3. Mapper의 결과는 emit되어야 한다. 4. Mapper가 emit하는 데이터 타입과 Reduce의 input 데이터 타입이 일치해야 한다. 5. 완전 분산 모드가 아닌 경우 단일 Mapper가 수행, 개발용 환경에서의 MapReduce수행과 분산 모드의 수행 결과가 다를 수 있다.(개발 설계 오류로 많이 발생하는 문제임) RECORD 8
MapReduce Data Flow 하둡 기반 빅데이터 처리 기반 기술 기본 Reducer Mapper가 emit한 key, value stream 입력으로 하여 연산을 수행함. protected void map(LongWritable key, Text value, Context context) context.write(new Text(key’), new Text(value’)); protected void reduce(Text key, Iterable<Text> value, Context context) Mapper value stream의 index는 reset되지 않는다. Reducer Value를 buffering 시도시 main memory 초과 현상 발생 or Out of Heap Memory가능 (하나의 데이터 노드에 다수의 Reducer가 생성되며, 처리할 데이터는 빅데이터로 가정해야 함) Mapper Key, values stream value 1 value 1 value ….. Mapper value ….. 중간 저장 금지 입력 되는 Stream을 읽으면서 계산함. value i value i Reducer value ….. value ….. Mapper value End Of Stream value End Of Stream
하둡 기반 빅데이터 처리 기반 기술 기본 MapReduce Data Flow
MapReduce 특이 사항 하둡 기반 빅데이터 처리 기반 기술 기본 데이터의 split size 고려 RECORD 1 Mapper Reducer RECORD 2 Mapper Reducer RECORD i Mapper RECORD 8 데이터의 split size 고려 Split size가 작으면 그만큼 Mapper의 입력 레코드 수가 여러개로 분산 -> 입력 데이터의 크기가 커지면 Mapper의 수도 늘어남 -> 분산 효과 커짐 늘어난 Mapper가 emit한 key, value를 Reducer가 감당해야 함. -> Key의 다양성과 Key와 연결된 Value들의 크기에 따라 Reducer가 계산할 용량이 달라짐 Split size가 커지면 그만큼 Mapper의 갯수는 작아지나 처리할 양이 많아짐. -> 분산 효과 낮아짐 줄어든 Mapper의 emit 결과가 작아지면서, Reducer의 순간 입력이 작아짐 -> Mapper의 출력이 늦어지면서 최종 결과까지 시간 소모가 증가함.