Hadoop HDFS & MapReduce Review
빅데이터의 특성: 3v - Volume, Velocity, Variety
cluster: 네트워크에서 시스템 간의 연결된 묶음
commodity hardware: cluster를 만들 수 있는 PC
node: 네트워크 장치를 통해 서로 연결된 commodity server
데이터를 데이터 블록으로 나눠서 저장하는데 각 데이터 블록에 대해 복사본을 만들어서 안정성을 높인다.
- 특징
일반 file system에 비해 데이터 블록의 크기가 크다. 128MB
반응 속도 보다는 시간당 처리량에 최적화 되어 있다.
한 번 쓰고 수정 없이 여러 번 읽는 모델에 적합하다.
자료가 워낙 크니까 계산 할 때 자료를 불러오기 보다는 계산 작업을 자료가 있는 곳에 가서 한다(데이터 지역성)
- 구성
하나의 네임노드, 세커더리노드와 다수의 데이터노드가 있다.
네임노드에는 블록 정보가 담겨 있는 Fsimage 파일, 파일의 생성 삭제에 대한 트랜잭션 로그, 메모리에 저장하다가 주기적으로 생성되는 Edits 파일이 있다.
세컨더리노드가 Fsimage와 Edits 파일을 주기적으로 머지해서 Edits 파일을 삭제하기 때문에 디스크 부족 문제를 해결한다.
하나의 블록은 3개로 복제되며 각각 다른 노드에 분산 저장된다.
데이터노드는 네임노드로 주기적으로(6시간) 블록의 정보를 전송하고(블록리포트) 이를 통해 최신 정보를 유지한다.
데이터노드는 주기적으로(3초) 하트비트를 보내고, 하트비트가 없으면 데이터노드가 동작하지 않는 것으로 간주하고 I/O가 발생하지 않도록 한다.
- 저장 프로세스
애플리케이션이 본인의 HDFS 클라이언트를 통해 네임노드에게 저장 경로를 요청한다. 네임노드는 경로를 생성한 후 다른 클라이언트가 수정을 못하도록 락을 건 뒤 요청한 클라이언트에게 데이터노드의 목록을 준다. 클라이언트는 첫번째 노드에게 데이터를 주고 첫 노드가 저장한다. 첫 노드는 저장 후 데이터를 두 번째 노드에게 주고 저장하고 또 두 번째가 세 번째에게 주고 저장하고, 이제 반대 방향으로 ack를 전달해서 클라이언트에게 까지 간다.
- 읽기 프로세스
클라이언트는 네임노드에게 요청된 파일이 저장돼있는 블록 정보를 요청한다. 네임노드는 메타데이터를 통해 파일이 저장된 블록 리스트를 준다. 그러면 클라이언트는 데이터 노드에 접근해서 블록 조회를 요청하고 데이터노드는 요청된 블록을 전송한다.
--------------------------------------------------------------------------------------------------------------------
HDFS를 저장소로 쓴다.
Client, JobTracker, TaskTracker로 구성된다.
JobTracker는 네임노드에 TaskTracker는 데이터노드에 위치한다.
클라이언트가 분석하고자 하는 데이터를 job의 형태로 JobTracker에게 전달하면, JobTracker가 작업을 데이터노드에 있는 TaskTracker에게 주고, TaskTracker는 요청 받은 맵과 리듀스의 개수만큼 작업을 생성한다.
맵의 입력 크기는 조절할 수 있다. 너무 작으면 작업 개수가 증가해서 오버헤드가 있다.
맵 작업의 결과는 로컬 디스크에 임시 저장되고 리듀스 작업의 입력으로 쓰인다.
리듀스 작업은 지역성의 장점이 없고 결과는 HDFS에 저장된다.
Map
흩어져 있는 데이터를 연관성 있는 데이터들로 분류하는 작업이다.
key, value의 형태이다.
- 맵리듀스 처리 단계
Input: 데이터를 읽어서 맵으로 전달
Map: 입력을 분할하여 key 별로 데이터를 정리
Combine(local reducer): 네트워크를 타고 넘어 갈 크기를 줄이기 위해 맵의 결과를 정리
Partition: 맵의 출력 결과 key 값을 해쉬 처리하여 어떤 리듀서로 넘어갈 지 결정
Shuffle: 각 리듀서로 데이터 이동
Sort: 리듀서로 전달 된 데이터를 key 값 기준으로 정렬
Reduce: 데이터를 처리하고 결과를 저장
Output: 리듀서의 결과를 정의된 형태로 저장
리듀스 작업이 없는 경우: raw data를 읽고 바로 쓴다. 매퍼 수 만큼 파일이 생성된다.
리듀서가 하나인 경우: 모든 데이터의 정렬 작업과 같은 경우이다. 시간이 오래 걸린다.
리듀서가 여러 개인 경우: 리듀서 수 만큼 파일이 생성된다.
cluster: 네트워크에서 시스템 간의 연결된 묶음
commodity hardware: cluster를 만들 수 있는 PC
node: 네트워크 장치를 통해 서로 연결된 commodity server
--------------------------------------------------------------------------------------------------------------------
HDFS(Hadoop Distributed File System)
데이터를 데이터 블록으로 나눠서 저장하는데 각 데이터 블록에 대해 복사본을 만들어서 안정성을 높인다.
- 특징
일반 file system에 비해 데이터 블록의 크기가 크다. 128MB
반응 속도 보다는 시간당 처리량에 최적화 되어 있다.
한 번 쓰고 수정 없이 여러 번 읽는 모델에 적합하다.
자료가 워낙 크니까 계산 할 때 자료를 불러오기 보다는 계산 작업을 자료가 있는 곳에 가서 한다(데이터 지역성)
- 구성
하나의 네임노드, 세커더리노드와 다수의 데이터노드가 있다.
네임노드에는 블록 정보가 담겨 있는 Fsimage 파일, 파일의 생성 삭제에 대한 트랜잭션 로그, 메모리에 저장하다가 주기적으로 생성되는 Edits 파일이 있다.
세컨더리노드가 Fsimage와 Edits 파일을 주기적으로 머지해서 Edits 파일을 삭제하기 때문에 디스크 부족 문제를 해결한다.
하나의 블록은 3개로 복제되며 각각 다른 노드에 분산 저장된다.
데이터노드는 네임노드로 주기적으로(6시간) 블록의 정보를 전송하고(블록리포트) 이를 통해 최신 정보를 유지한다.
데이터노드는 주기적으로(3초) 하트비트를 보내고, 하트비트가 없으면 데이터노드가 동작하지 않는 것으로 간주하고 I/O가 발생하지 않도록 한다.
- 저장 프로세스
애플리케이션이 본인의 HDFS 클라이언트를 통해 네임노드에게 저장 경로를 요청한다. 네임노드는 경로를 생성한 후 다른 클라이언트가 수정을 못하도록 락을 건 뒤 요청한 클라이언트에게 데이터노드의 목록을 준다. 클라이언트는 첫번째 노드에게 데이터를 주고 첫 노드가 저장한다. 첫 노드는 저장 후 데이터를 두 번째 노드에게 주고 저장하고 또 두 번째가 세 번째에게 주고 저장하고, 이제 반대 방향으로 ack를 전달해서 클라이언트에게 까지 간다.
- 읽기 프로세스
클라이언트는 네임노드에게 요청된 파일이 저장돼있는 블록 정보를 요청한다. 네임노드는 메타데이터를 통해 파일이 저장된 블록 리스트를 준다. 그러면 클라이언트는 데이터 노드에 접근해서 블록 조회를 요청하고 데이터노드는 요청된 블록을 전송한다.
--------------------------------------------------------------------------------------------------------------------
Map Reduce
분산 환경에서 프로세스를 처리한다.HDFS를 저장소로 쓴다.
Client, JobTracker, TaskTracker로 구성된다.
JobTracker는 네임노드에 TaskTracker는 데이터노드에 위치한다.
클라이언트가 분석하고자 하는 데이터를 job의 형태로 JobTracker에게 전달하면, JobTracker가 작업을 데이터노드에 있는 TaskTracker에게 주고, TaskTracker는 요청 받은 맵과 리듀스의 개수만큼 작업을 생성한다.
맵의 입력 크기는 조절할 수 있다. 너무 작으면 작업 개수가 증가해서 오버헤드가 있다.
맵 작업의 결과는 로컬 디스크에 임시 저장되고 리듀스 작업의 입력으로 쓰인다.
리듀스 작업은 지역성의 장점이 없고 결과는 HDFS에 저장된다.
Map
흩어져 있는 데이터를 연관성 있는 데이터들로 분류하는 작업이다.
key, value의 형태이다.
- 맵리듀스 처리 단계
Input: 데이터를 읽어서 맵으로 전달
Map: 입력을 분할하여 key 별로 데이터를 정리
Combine(local reducer): 네트워크를 타고 넘어 갈 크기를 줄이기 위해 맵의 결과를 정리
Partition: 맵의 출력 결과 key 값을 해쉬 처리하여 어떤 리듀서로 넘어갈 지 결정
Shuffle: 각 리듀서로 데이터 이동
Sort: 리듀서로 전달 된 데이터를 key 값 기준으로 정렬
Reduce: 데이터를 처리하고 결과를 저장
Output: 리듀서의 결과를 정의된 형태로 저장
리듀스 작업이 없는 경우: raw data를 읽고 바로 쓴다. 매퍼 수 만큼 파일이 생성된다.
리듀서가 하나인 경우: 모든 데이터의 정렬 작업과 같은 경우이다. 시간이 오래 걸린다.
리듀서가 여러 개인 경우: 리듀서 수 만큼 파일이 생성된다.
댓글
댓글 쓰기