하둡이란?
분산 환경에서 빅 데이터를 저장하고 처리할 수 있는 자바 기반의 오픈 소스 프레임 워크이다. 빅데이터 인프라 기술 중에 하나로 분산처리를 통해 수많은 데이터를 저장하고 처리하는 기술이다.
왜 하둡을 쓰는가?
관계형 데이터베이스(RDBMS)는 데이터가 증가되면 데이터를 저장하거나 조회할 때 읽기, 쓰기 연산 수행에 제약 조건이 발생되어 서비스가 느려지는 현상이 발생하며, 새로운 업무가 추가되면 데이터베이스 내 데이터는 증가되고 결국 이를 해결하기 위해 하드웨어의 병렬 구성, CPU, 메모리, 네트워크 등 추가적인 인프라 구성을 필요로 하게되어 데이터 관리를 위한 경제적 비용이 계속적으로 증가하게 된다..
처리해야할 데이터가 많아질수록 컴퓨터의 능력이 좋아져야 하지만, RDBMS 의 경우에는 데이터가 늘어날수록 느려진다는 단점때문에, 많은 데이터 처리에 좋은 성능을 보이는 하둡으로 넘어오고 있다.
또, 하둡은 방대한 양의 데이터를 처리하는 것을 넘어서, 데이터를 분산처리 하는 수를 늘리거나 줄임으로써 저렴한 비용으로 어떠한 기업이든 원하는 크기의 저장소를 쉽게 만들어 준다. 이러한 확장성은 다양한 분야에서 하둡을 통해 빅데이터에 접근한 수 있도록 만들어 주었다.
하둡의 특징
-
하둡을 이용한 데이터 처리는 대용량 파일을 저장할 수 있는 분산 파일시스템으로 제공하여 클러스터로 구성되며, 이를 멀티노드로 부하 분산 처리하므로 시스템의 과부하나 병목현상을 줄여줄 수 있다.
-
오픈소스로 제공되어 경제적 비용을 크게 줄여주는 장점을 가지고 있다.
-
대량의 비 구조화 데이터 처리 성능이 뛰어나며 스케일 아웃 구조로 용량 증가에 용이해 주목을 받고 있다.
-
노드의 추가 제거가 용이하고 가용성이 높아 일부 장비에 장애가 발생하더라도 전체 시스템에는 영향을 주지 않는다.
스케일 아웃
-
서버 여러대를 추가하여 시스템을 확장하는 방법. 여러 대의 서버가 추가되기에 각 서버에 걸리는 부하를 균등하게 해주는 로드 밸런싱이 필수적으로 동반되어야 함.
-
서버 한 대가 장애로 다운되더라도 다른 서버로 서비스 제공이 가능하다는 장점
-
모든 서버가 동일한 데이터를 가지고 있어야 하므로, 데이터 변화가 적은 '웹 서버'에 적합함
스케일 업
-
CPU나 RAM 을 추가하거나 고성능의 부품, 서버로 교환하는 방법. 추가 부품을 장착할 수 있는 여유 슬롯이 있어야 하며, 그렇지 않으면 서버 자체를 고성능으로 교체하는 것이 필요하다.
-
서버 한 대에 모든 부하가 집중되어 장애 시 영향을 크게 받을 수 있는 위험성 존재
-
서버 한대에 모든 데이터를 처리하므로 데이터 갱신이 일어나는 '데이터베이스 서버'에 적합
하둡은 어떻게 작동하는가
1. 하둡 아키텍처 :
-
블록 구조의 파일 시스템으로, 저장하는 파일은 특정 사이즈의 블록으로 나눠져 분산된 서버에 저장됨.
-
하나의 블록은 3개(수정 가능)로 복제되며, 각각 다른 HDFS의 노드에 분산저장됨
-
HDFS에는 마스터 역할을 하는 네임노드 서버 한 대와, 슬레이브 역할을 하는 데이터노드 서버
여러 대로 구성된다.
-
네임 노드는 HDFS의 모든 메타데이터(블록들이 저장되는 디렉토리의 이름, 파일명등..)를 관리하고
클라이언트가 이를 이용하여 HDFS에 저장된 파일에 접근할 수 있음.
-
하둡 어플리케이션은 HDFS에 파일을 저장하거나, 저장된 파일을 읽기 위해 HDFS 클라이언트를
사용하며, 클라이언트는 API형태로 사용자에게 제공됨.
-
데이터 노드는 주기적으로 네임노드에서 블록 리포트(노드에 저장되어 있는 블록의 정보)를 전송하고
이를 통해 네임노드는 데이터 노드가 정상 동작하는지 확인.
-
클라이언트는 네임노드에 접속해서 원하는 파일이 저장된 블록의 위치를 확인하고,
해당 블록이 저장된 데이터 노드에서 직접 데이터를 조회함.
2. 하둡의 파일 저장 플로우
-
어플리케이션이 HDFS 클라이언트에게 파일 저장을 요청하면, HDFS 클라이언트는 네임노드에게 파일 블록들이 저장될 경로 생성을 요청. 네임노드는 해당 파일 경로가 존재하지 않으면 경로를 생성한 후, 다른 클라이언트가 해당 경로를 수정하지 못하도록 락을 검. 그 후, 네임노드는 클라이언트에게 해당 파일 블록들을 저장할 데이터노드의 목록을 반환
-
클라이언트는 첫 번째 데이터 노드에게 데이터를 전송
-
첫 번째 데이터 노드는 데이터를 로컬에 저장한 후, 데이터를 두 번째 데이터 노드로 전송
-
두 번째 데이터 노드는 데이터를 로컬에 저장한 후, 데이터를 세 번째 데이터 노드로 전송
-
로컬에 데이터를 저장하였으면 자기에게 데이터를 넘겨준 데이터 노드에게,데이터의 로컬 저장이 완료 되었음을 응답
-
-
첫 번째 데이터 노드는 클라이언트에게 파일 저장이 완료 되었음을 응답.
3. 파일 읽기 플로우
-
어플리케이션이 클라이언트에게 파일 읽기를 요청
-
클라이언트는 네임노드에게 요청된 파일이 어떤 블록에 저장되어 있는지 정보를 요청
(네임노드에 모든 데이터에 대한 메타 데이터를 관리하고 있기 때문에)
-
메타데이터를 통해 파일이 저장된 블록 리스트를 반환
-
클라이언트는 데이터 노드에 접근하여 블록 조회 요청
-
데이터 노드는 클라이언트에게 요청된 블록을 전송
-
클라이언트를 어플리케이션에 데이터를 전달
4. 참고 링크
http://www.incodom.kr/hadoop_%EC%B4%9D%EC%A0%95%EB%A6%AC#h_a8a244feaff8a440d038fe0f52e21c1d(http://www.incodom.kr/hadoop_총정리#h_a8a244feaff8a440d038fe0f52e21c1d) (RDBMS, 하둡의 차이점 왜 하둡을 쓰는가)
http://library.gabia.com/contents/infrahosting/1222 (스케일 업 / 스케일 아웃)
-
하둡 기반 빅 데이터 기법을 이용한 웹 서비스 데이터 처리 설계 및 구현 (김현주)
'Data Engineering > HDFS' 카테고리의 다른 글
Presto 에 대하여? (0) | 2020.06.30 |
---|---|
Apache Sentry : 하둡용 허가(Authorization) 모듈 (0) | 2020.04.20 |
하둡 1. 하둡에 대하여 (0) | 2020.04.11 |
cloudera 실행 안될 시 로그 확인방법 (0) | 2020.04.01 |
- hive : SerDe (서데) 란? (0) | 2020.03.31 |