빅데이터란?
A collection of data sets so large and complex that it becomes difficult to process using on-hand DB management tools or traditional data processing applications.
즉, 서버 한대로는 처리할 수 없는 규모의 데이터
기존의 소프트웨어로는 처리할 수 없는 규모의 데이터를 빅데이터라고 칭합니다.
빅데이터는 3V로 축약되는 세가지 큰 특징을 가지고 있는데요,
3V : Volume : 다량 + Velocity : 데이터 생성/ 처리 속도 + Variety : 다양성
요즘엔 여기에 Variability : 변동성 이라는 특징을 추가하여 말하기도 합니다.
빅데이터 시스템의 구성
데이터 수집 모듈 : Flume, Chukwa, Kafka
데이터 처리 모듈: hadoop(HDFS, MapReduce), Spark
데이터 저장/검색 모듈: RDBMS, NoSQL, 검색 엔진
데이터 분석 및 마이닝 : Pig, Hive, Mahout, R(pbdR), Spark's machine learning
데이터 시각화 모듈
작업 워크플로우 실행 및 관리 모듈 : Oozie
빅데이터 플랫폼
기업과 산업에 따라 조금씩 다르겠지만 처리 과정은 같습니다.
데이터 수집 -> 데이터 처리 -> 데이터 분석 -> 데이터 제공
여기서 데이터 처리 및 분석 전반을 걸쳐 사용 되는 것이 hadoop 시스템인데요,
APACHE Hadoop (High Availability Distributed Object-Oriented Platform)
하둡은 대량의 데이터 처리를 위한 분산 병렬 처리 프레임 워크입니다. 특징을 살펴보면,
- 오픈 소스
- 병렬 처리를 가능하게 해주는 단순한 데이터 모델 (Share nothing 구조)
- 스케일 아웃**
- 오프라인 배치 프로세싱에 적합하다
- 데이터가 있는 곳으로 코드를 이동할 수 있다
- 웹에서 접근 가능하다
라는 특징이 있습니다.
RDBMS*와 비교해보면
항목 | RDBMS | Hadoop |
다루는 데이터 크기 | ~수 테라바이트 | 테라바이트~페타바이트 |
데이터 조작 | 작은 데이터 참조, 변경 | 큰 데이터 삽입, 참조(변경은 없음) |
응답 시간 | 빠름 (온라인 처리) | 느림 (일괄 처리) |
서버 대수와 성능 향상 | 여러 대의 서버로 스케일 업** | 수백대~수천대 서버로 스케일 아웃** |
데이터 구조 | 구조화 데이터 | 비구조화 데이터 |
*RDBMS : 관계형 데이터베이스 관리 시스템(relational database management system). IBM 산호세 연구소의 에드거 F. 커드가 도입한 관계형 모델을 기반으로 하는 데이터베이스 관리 시스템이다. 현재 사용되는 대부분의 데이터베이스는 관계형 데이터베이스 모델을 기반으로 한다. (출처 - 위키백과)
**스케일 업(scale-up) 스케일 아웃(scale- out) : 스케일 업은 컴퓨터 서버 개수를 늘리는 것을 말하고 스케일 아웃은 컴퓨터 부품 자체를 고성능으로 바꾸는 것을 말합니다.
하둡은 분산 파일 시스템인 HDFS와 분산 병렬 처리 시스템인 MapReduce를 구현해 놓은 것입니다.
1. HDFS (Hadoop Distributed File System)
master/slave 구조로 파일을 분산 저장하는 시스템. 네임노드(master)와 데이터노드들(slave)로 구성되어 있습니다.
1) 네임노드(NameNode)
- 데이터노드들 관리 및 메타데이터***
- 파일 이름과 속한 디렉토리 정보, 해당 파일을 구성하는 데이터 블록(63MB, 128MB)들의 ID 리스트와 각 블록별 저장 데이터 노드의 이름들, 복제본의 수를 포함합니다.
*** 메타데이터 : 데이터에 대한 데이터. "어떤 목적을 가지고 만들어진 데이터 (Constructed data with a purpose)"라고도 정의한다. 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터이다. 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여되는 데이터이다. 어떤 데이터 즉 구조화된 정보를 분석, 분류하고 부가적 정보를 추가하기 위해 그 데이터 뒤에 함께 따라가는 정보를 말한다. (출처 - 위키백과)
2) 데이터노드(DataNode)
- 사용자나 네임노드 요청에 따른 데이터 처리 (검색, 저장)하며 주기적으로 블록 리스트를 네임노드에 보고
- 데이터 노드의 블록은 모두 3개 이상의 복제본이 각 노드에 저장되며, 문제 발생 시 즉시 복제본으로 대체되어 서비스가 진행됩니다.
3) HDFS의 특징
- 대용량 데이터 저장, 장애 복구, 데이터 무결성(WORM)
- 스트리밍 방식의 데이터 접근 : 배치 작업과 높은 데이터 처리량
- HDFS 프로그래밍 : shell script, Java API
4) 처리 알고리즘
2. 클라이언트는 네임노드에 접속해 원하는 파일이 저장된 블록의 위치를 조회합니다.
3. 해당 블록이 저장된 데이터노드에서 직접 데이터를 조회합니다.
4. 네임노드는 하트비트를 통해 데이터노드가 정상작동하는지 확인하고, 블록 리포트를 통해 데이터노드의 모든 블록을 확인한 다음, 파일 복제본의 위치를 결정합니다.
2. MapReduce (맵리듀스)
HDFS에 분산저장된 데이터를 빠르게 분산 처리하도록 고안된 프로그래밍 모델과 이를 지원하는 시스템입니다. 클라이언트, 잡 트래커(master), 태스크 트래커(slave)들로 구성되어 있습니다.
1) 클라이언트 : 사용자가 실행한 맵리듀스 프로그램과 하둡에서 제공하는 맵리듀스 API
2) 잡 트래커 : 전체 잡(Job)의 스케쥴링을 관리하고 모니터링
사용자가 새로운 잡(프로그램)을 요청하면 잡 트래커는 몇 개의 맵과 리듀스를 실행할 지 계산 -> 어떤 태스크 트래커에게 실행할지 결정 -> 해당 태스크 트래커에게 잡 할당
3) 태스크 트래커 : 잡 트래커가 할당한 맵/리듀스 태스크들을 생성 후 실행함
4) 처리 알고리즘
- 맵리듀스 프로그램이 JobClient에 잡 실행을 요청합니다.
- JobClient는 잡 관련 파일(입력 스플릿 등 환경설정 정보, jar 파일 등)을 HDFS에 저장합니다.
- JobClient는 JobTracker에게 잡을 제출
- JobTracker는 HDFS에 등록된 입력 스플릿 정보를 이용해 맵/리듀스 태스크 개수 계산
- JobTracker는 잡을 내부 큐에 등록
- TaskTracker는 3초마다 하트비트 메시지를 전송하며 새로운 태스크 실행할 준비가 된 것을 알림
- JobTracker는 내부 큐에서 잡을 선택해 맵/리듀스 태스크들을 TaskTracker들에게 할당
- TaskTracker는 HDFS에 저장된 잡 관련 파일을 로컬 디스크로 복사
- 10. 11. TaskTracker가 할당 받은 태스크 실행을 child process 에게 요청 하면, child process는 HDFS에서 데이터를 읽어 맵/리듀스 태스크들을 실행한 후 최종 결과는 HDFS에 저장
5) 맵리듀스의 특징
(1) 맵리듀스는 병렬 컴퓨팅 프레임 워크입니다. MapReduce 프로그램은 맵과 리듀스의 두 함수로 구성되어있는데요,
Map() : Process a key/value pair to generate intermediate key/value pairs.
- 키 / 값 쌍을 처리하여 중간 키 / 값 쌍을 생성하는 과정
- 하둡은 구조화되지 않은 데이터 처리를 위해 엄격한 스키마가 아닌 키와 값으로 이루어진 쌍을 데이터의 기본 구조로 사용합니다.
- 키/값 모델은 단순하면서도 폭 넓은 응용 가능성을 가집니다. - 주소록 ( 이름 / 연락처 ) - 은행계좌 ( 계좌번호 / 계좌내역 ) - 책의 색인 ( 단어 / 페이지 ) - 파일 시스템 (파일 이름 / 파일의 데이터)
- Map(k1, v1) -> List(k2, v2) : 데이터를 가공해서 분류
Reduce() : Merge all intermediate values associated with the same key in order to process them.
- 모든 중간값들을 처리하기 위해 중간값들과 연관된 모든 동일한 키들을 병합
- Reduce(k2, List(v2)) -> List(k3, v3)
(2) 라이브러리들은 아래 모든 것들을 살핍니다.
- Parallelization (병렬화)
- Data Distribution - Locality optimization (데이터 분배 - 지역 최적화)
- Load Balancing (부하 분산)
- Fault Tolerance (결함 허용)
(3) 이를 통해 병렬 및 분산 시스템에 대한 경험이 없는 프로그래머는 대규모 분산 시스템의 자원을 쉽게 활용할 수 있습니다.
맵리듀스에 관한 더욱 자세한 내용은 다음 포스팅에서 이어집니다
'하둡(Hadoop)' 카테고리의 다른 글
하둡(Hadoop)이란?(3) - 작업 처리 과정 (0) | 2020.06.22 |
---|---|
하둡(Hadoop)이란?(2) - MapReduce를 이용한 WordCount (0) | 2020.06.17 |
댓글