Distributed Computing for Big Data 박 영 택 컴퓨터학부
Apache Hadoop이란? 빅데이터를 저장, 처리, 분석할 수 있는 소프트웨어 프레임워크 Distributed Scalable Fault-tolerant Open source
Apache Hadoop 오픈 소스 프로젝트이며, 약 10개 회사의 60명의 committer Cloudera, Yahoo!, Facebook, Apple, … 수 백명의 contributor들이 개발 중이고, bug 수정 등의 작업을 수행 다양하고 많은 프로젝트, 애플리케이션, 도구에서 사용됨
다양한 에코 시스템
The Motivation For Hadoop 기존 large-scale 컴퓨팅 시스템의 문제점은? 이러한 문제점을 Hadoop은 어떻게 다루는가?
Traditional Large-Scale Computation 기존에는 processor에 의존하는 computation을 수행 상대적으로 적은 양의 데이터 많은 양의 복잡한 처리가 요구됨 초기 해결 방법 : 컴퓨터의 성능 향상 더 빠른 processor와 많은 memory 지속적으로 향상시키는 것에 한계점이 존재
분산 처리 시스템 해결 방법 : 더 많은 컴퓨터를 사용 분산 처리 시스템의 진화 하나의 작업에 여러 대의 machine을 사용 MPI(Message Passing Interface)
분산 처리 시스템 : 문제점 분산 처리 시스템의 문제점 복잡한 프로그래밍 bandwidth의 한계 데이터와 프로세스의 sync 유지 bandwidth의 한계 Partial failures
분산 처리 시스템 : 데이터의 병목현상 40년 동안 이어진 Moore의 법칙 Processing power는 2년마다 두배 증가 Processing speed는 더 이상 문제되지 않음 Processor로 데이터를 전송하는 작업이 병목현상이 될 수 있음 기존 디스크의 데이터 전송 속도는 75MB/sec 100GB의 데이터를 전송하기 위해서는 대략 22분 소요 대부분의 서버는 100GB 이하의 RAM을 사용하기 때문에 실제 시간은 더 오래 걸릴 것 새로운 접근 방법이 요구됨
분산 처리 시스템 : 데이터의 병목현상 기존에는 데이터 저장을 위해 중앙 저장소를 사용 데이터는 실행 시에 processor로 복사 적은 데이터 사용에는 문제되지 않음
Partial Failure 시스템은 반드시 partial failure에 대처가 요구됨 컴포넌트의 failure(전체 시스템의 failure가 아닌)는 애플리케이션 성능 저하를 유발함
데이터 Recoverability 시스템의 컴포넌트가 fail 하더라도 시스템을 통해 작업은 지속적으로 수행되어야 함 Failure로 인해 어떠한 데이터의 손실도 발생하면 안됨
컴포넌트 Recovery 시스템의 컴포넌트가 fail되고 다시 recover된 경우, 시스템에 rejoin하 는 것이 가능해야 함 전체 시스템의 재 시작 없이 수행
Consistency job이 수행되는 동안 컴포넌트의 failure는 결과에 영향을 주지 않아야 함
Scalability 데이터의 양이 증가하면, 각 작업의 성능이 감소함 시스템은 fail되지 않음 시스템의 resource를 증가시키면, 비례적으로 로드 capacity가 증가함
Hadoop의 역사 Hadoop은 1990년~2000년 사이의 Google의 연구로 부터 시작 Google File System(GFS) in 2003 MapReduce in 2004 기존 분산 컴퓨팅의 문제점을 해결할 수 있는 새로운 접근법 reliability와 scalability 문제를 모두 해결 Core concept : 초기 데이터를 시스템에 분산하여 저장 클러스터의 각 노드가 로컬 데이터에 대한 작업을 처리 initial processing을 위해 네트워크를 통해 데이터가 전송되지 않음
Core Hadoop Concepts 애플리케이션을 High-level 코드로 작성 개발자에게 네트워크 프로그래밍, 의존성, low-level 인프라 구조에 대한 고려가 요구되지 않음 각 노드들은 가급적 최소한의 데이터를 주고 받음 개발자는 노드들 사이의 통신에 대한 코드 작성이 필요 없음 ‘Shared nothing’ architecture 데이터는 여러 노드에 미리 분산되어 저장 데이터가 저장된 위치에서 연산을 수행 availability와 reliability를 향상 시키기 위해서 데이터는 여러 개의 복제본을 두고 사용
Hadoop : Very High-Level Overview 시스템이 데이터를 로드할 때 ‘block’으로 나누어짐 기본적으로 64MB 또는 128MB 크기를 사용 Map tasks(MapReduce 시스템의 첫 번재 파트)는 single block 단위의 작업을 처리 마스터 프로그램은 분산되어 저장된 데이터의 block에 대한 Map task 작업을 각 노 드에 할당 전체 데이터 셋 중 각 노드에 저장된 데이터를 이용해 병렬적으로 작업을 수행
Fault Tolerance Node가 fail한 경우, master node는 failure를 감지하고 작업을 다른 node에 할당 Task를 재 시작 하는 것은 다른 부분에 대한 작업을 수행중인 다른 노드와의 통신을 필요로 하지 않음 Fail된 node를 재 시작 하는 경우, 자동적으로 시스템에 연결되어 새로운 task를 할 당함 특정 Node의 성능이 매우 낮은 것으로 감지되면, master node는 같은 task를 다른 node에 할당 Speculative Execution
Hadoop 분산 처리를 위한 새로운 접근법 데이터가 처음 저장될 때, 분산하여 저장 데이터가 저장된 위치에서 연산을 수행
Hadoop : High-Level Overview 데이터를 load할 때, ‘block’ 단위로 분할 Map task는 하나의 block을 대상으로 수행 Master 프로그램은 task들을 관리
Core Hadoop Concepts 애플리케이션은 high-level code로 작성 Node들은 가능한 최소한의 통신을 수행 데이터는 미리 분산 되어 저장됨 Computation to Data 데이터의 replication 생성하여, availability와 reliability 향상 Hadoop은 scalable하며 fault-tolerant를 지원함
Scalability Node를 추가하면 capacity가 비례하여 증가 Load하는 데이터의 양이 증가할 수록, 성능이 감소 시스템 fail 없이 수행 가능
Fault Tolerance Node failure는 피할 수 없는 문제 Fault tolerance의 효과 시스템이 지속적으로 기능을 수행 Master는 task를 다른 node에 재할당 데이터의 replication = 데이터의 손실 방지 Recover를 위한 node는 클러스터에 자동적으로 연결됨
Hadoop의 문제점 데이터의 특성 데이터 분석의 특징 Volume Velocity Variety Batch processing Parallel execution Distributed data
Hadoop : Basic Concepts Hadoop Distributed File System (HDFS) MapReduce 프로그램 Hadoop 클러스터의 운영
Hadoop Project Hadoop은 Apache 소프트웨어의 open-source 프로젝트 2003년과 2004년의 Google 논문을 기반으로 함 전세계의 다양한 조직들의 Hadoop committer들이 활동 Cloudera, Yahoo, Facebook, LinkedIn
Hadoop Components Hadoop은 주요 구성 요소 Hadoop을 기반으로 하는 다른 프로젝트 Hadoop Distributed File System (HDFS) MapReduce Hadoop을 기반으로 하는 다른 프로젝트 ‘Hadoop Ecosystem’이라고 하는 Pig, Hive, HBase, Flume, Oozie, Sqoop 등이 있음 Hadoop 클러스터는 HDFS와 MapReduce를 사용할 수 있도록 구성된 여러 개의 machine들 을 말함 각각의 개별 machine은 node A cluster can have as few as one node, as many as several thousand 하나의 클러스터는 최소 1개의 node에서 수 천개의 node로 구성될 수 있음 더 많은 node를 사용할 수록 더 좋은 성능을 얻을 수 있음
Hadoop Components Note: CDH is Cloudera’s open source Apache Hadoop distribution
Core Components : HDFS and MapReduce HDFS (Hadoop Distributed File System) 클러스터에 데이터를 저장 MapReduce 클러스터의 데이터를 처리
Hadoop Components : HDFS HDFS(Hadoop Distributed File System)은 클러스터에 데이터를 저장하기 위해 사용 데이터는 block으로 분할되고, 클러스터의 여러 노드에 분산되어 저장 각 block은 기본적으로 64MB 또는 128MB의 크기 각 block은 여러 개의 replication을 생성하여 사용 기본적으로 3개의 replication block을 생성 replication block은 서로 다른 노드에 저장됨 이를 통해 reliability and availability 향상
Hadoop Components : MapReduce MapReduce는 Hadoop 클러스터의 데이터를 처리하기 위한 시스템 2개의 phase로 구성 : Map, Reduce Map과 Reduce 사이에는 shuffle과 sort라는 스테이지가 있음 각 Map task는 전체 데이터 셋에 대해서 별개의 부분에 대한 작업을 수 행 기본적으로 하나의 HDFS block을 대상으로 수행 모든 Map task가 종료되면, MapReduce 시스템은 intermediate 데이터를 Reduce phase를 수행 할 노드로 분산하여 전송
HDFS Basic Concepts HDFS는 Java로 작성된 파일 시스템 기존 파일 시스템의 상위에서 동작 Google의 GFS 기반 기존 파일 시스템의 상위에서 동작 ext3, ext4 or xfs
HDFS의 file 저장 방식 File은 block 단위로 분할 데이터가 로드 될 때 여러 machine에 분산되어 저장됨 각 block은 기본적으로 64MB 또는 128MB 크기 데이터가 로드 될 때 여러 machine에 분산되어 저장됨 같은 file의 다른 block들은 서로 다른 machine에 저장됨 이를 통해 효율적인 MapReduce 처리가 가능 Block들은 여러 machine에 복제되어 Data node에 저장됨 기본 replication은 3개 각 block은 서로 다른 3개의 machine에 저장되어 있다는 것을 의미 Name node로 불리는 master node는 어떤 block들이 file을 구성하고 있고, 어느 위치에 저장되어 있는지에 대한 정보를 meta data로 관리
HDFS의 file 저장 방식 (1) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장
HDFS의 file 저장 방식 (2) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장
HDFS의 file 저장 방식 (3) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장 각 block은 여러 node에 복제 되어 저장(default 3x)
HDFS의 file 저장 방식 (4) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장 각 block은 여러 node에 복제 되어 저장(default 3x) Name node는 metadata를 저장
HDFS: Pints To Note File이 64MB 또는 128MB의 block으로 분할 될 때, file이 block의 크기보다 작은 경 우에는 block 크기 전체를 사용하지 않음 Block들은 Hadoop configuration에 설정된 디렉토리를 통해 저장됨 NameNode의 metadata를 사용하지 않으면, HDFS에 접근할 수 있는 방법이 존재 하지 않음 클라이언트 애플리케이션이 file에 접근하는 경우 : NameNode와 통신하여 file을 구성하고 있는 block들의 정보와 DataNode의 block의 위치 정보를 제공받음 이후 데이터를 읽기 위해 DataNode와 직접 통신 NameNode는 bottleneck이 되지 않음
HDFS 접근 방법 Shell 커맨드 라인을 사용: haddop fs Java API Ecosystem 프로젝트 Flume network sourc로 부터 데이터 수집 Sqoop HDFS와 RDBMS 사이의 데이터 전송 Hue Web 기반의 interactive UI로 browse, upload, download, file view 등이 가능
Example: Storing and Retrieving Files (1)
Example: Storing and Retrieving Files (2)
Example: Storing and Retrieving Files (3)
Example: Storing and Retrieving Files (4)
HDFS NameNode Availability NameNode daemon은 반드시 항상 실행되고 있어야 함 NameNode가 중단되면, 클러스터는 접근이 불가능 High Availability mode (in CDH4 and later) 2개의 NameNode : Active와 Standby Classic mode 1개의 NameNode 또 다른 “helper” node는 SecondaryNameNode backup이 목적이 아니며, 장애 발생 시 NameNode를 대신하는 것이 불가능 NameNode를 복구 할 수 있는 정보를 제공
hadoop fs Examples (1) 로컬 디스크의 foo.txt file을 HDFS의 사용자 디렉토리로 복사 위 명령어를 통해 /user/username/foo.txt 위치로 파일을 복사 HDFS의 사용자 경로의 하위 디렉토리 목록을 출력 HDFS의 root 경로의 하위 디렉토리 목록을 출력 ㅇ
hadoop fs Examples (2) HDFS의 경로 /user/fred/bar.txt의 내용을 출력 HDFS의 baz.txt file을 로컬 디렉토리로 복사