- HDFS는 다수의 노드에 복제 DATA도 함께 저장해 DATA 유실을 방지합니다.
- HDFS에 저장된 파일을 조회하려면 스트리밍 방식으로 DATA에 접근해야합니다
- 한번 저장한 DATA는 수정할 수 없고, 읽기만 가능해서 DATA 무결성을 유지합니다.
- DATA 수정은 불가능하지만 파일 이동, 삭제, 복사할 수 있는 인터페이스를 제공합니다.
- Block 구조의 FileSystem, 저장파일은 특정 사이즈의 Block으로 나눠져 분산된 서버에 저장됩니다.
- 하나의 Block은 3개(수정 가능)로 복제되며, 각각 다른 HDFS의 DataNode에 분산저장됩니다.
- HDFS에는 NameNode 서버 한 대, Slave 역할을 하는 DataNode 서버가 여러 대로 구성됩니다.
- NameNode는 HDFS의 모든 Metadata(블록들이 저장되는 디렉토리, 파일 명..)를 관리하고 Client가 이를 이용하여 HDFS에 저장된 파일에 접근할 수 있습니다.
- Hadoop Application은 HDFS에 파일을 저장하거나, 저장된 파일을 읽기 위해 HDFS Client를 사용하며 API형태로 사용자에게 제공됩니다.
- DataNode는 주기적으로 HeartBeat 전송합니다, 이를 통해 NameNode는 DataNode가 정상 동작하는지 확인합니다.
- Clients는 NameNode에 접속해서 원하는 파일이 저장된 블록의 위치를 확인하고, 해당 Block이 저장된 DataNode에서 직접 DATA를 조회합니다.
- APP이 Client에게 파일 저장을 요청합니다.
- Client는 NameNode에게 Block이 저장될 경로 생성을 요청합니다.
- NameNode는 해당 경로가 존재하지 않으면 생성한 뒤
- NameNode는 그 경로에 수정하지 못하게 LOCKING을 걸어둡니다.
- 그 후 Client에게 Block을 저장할 DataNode 목록을 반환하고
- Client는 첫번째 DataNode에 Data Block을 전송합니다
- 첫번째 DataNode는 Local에 저장한 뒤 두번째 DataNode로 전송합니다
- 두번째 DataNode는 동일하게 저장한 뒤 세번째로 전송합니다
- 세번째 DataNode부터 Local에 저장완료 후 넘겨준 DataNode에게 완료 Return을 줍니다
- 최종적으로는 첫번째 DataNode가 Client에게 저장완료를 Return하고 종료됩니다.
- APP이 Client에게 파일 읽기를 요청합니다.
- Client는 NameNode에게 파일이 어느 DataNode의 어떤 블록에 저장되어 있는지 정보를 요청합니다.
- MetaData를 통해 파일이 저장된 블록 리스트를 Client에게 반환합니다.
- Client는 해당 DataNode에 접근해 Block 조회 요청합니다.
- DataNode는 Client에게 요청된 Block을 전송합니다.
- Client는 App에 DATA를 전달합니다.
대용량의 DATA 처리를 위한 분산 프로그래밍 Model, 소프트웨어 FrameWork라고 불립니다.
분산 컴퓨팅 환경에서 MapReduce를 이용해 대량의 DATA를 병렬로 분석이 가능하고 직접 작성하는 Map과 Reduce 라는 두 개의 메소드로 구성됩니다.
MapReduce는 Hadoop Cluster의 DATA를 처리하기 위한 시스템으로, Map , Reduce의 phase로 구성되며, Map과 Reduce사이에는 Shuffle과 Sort라는 스테이지가 존재합니다. 각 Map Task는 전체 DATA 세트에 대한 별개의 부분에 대한 작업을 수행하게 되는데 기본적으로 하나의 HDFS Block을 대상으로 수행하게 됩니다.
모든 Map Task가 종료되면 MapReduce 시스템은 intermediate DATA를 Reduce phase를 수행할 노드로 분산하여 전송합니다.
똑똑한 1명이 다량의 일을 처리하는 것 평범한 100명이 다량의 일을 처리하는 것, 단순하게 놓고 보자면 100명 진행하는 것이 훨씬 더 빠를 것입니다.
위에 간단하게 들어본 예가 분산처리의 핵심이지만, 100명 각각의 결과를 취합하고 정리하는 시간의 소모도 작지는 않습니다. 또한 탐색할 DATA가 비정형이라서 갯수가 101개라거나, 길이가 서로 다르다거나 하면 이를 동일한 업무크기로 나누는 일도 쉽지않습니다. MapReduce는 이러한 처리를 도와주는 역할을 합니다.
① MapReduce 작업이 끝나면 HDFS에 파일이 써지고(write)
② MapReduce 작업이 시작될 때는 HDFS로 부터 파일을 가져오는(Read) 작업이 수행됩니다.
(key, value의 형태)
로 분류합니다. Split
이라고 합니다Job은 ‘Full Program’ 즉, 전체 프로그램을 의미합니다.
DATA 집합을 통해 Mapper와 Reducer를 전체 실행하고 Task는 DATA Block을 통해 하나의 Mapper 또는 Reducer를 실행하게 됩니다.
Client는 수행하려는 작업단위이고, INPUT DATA, MR Program, 설정 정보로 구성되어 있습니다.
Hadoop은 Job을 Map Task와 Reduce Task로 작업을 나누어서 실행하고, Job이 실행되는 과정을 제어 해주는 노드에 전달합니다.