본문 바로가기

nosql

빅데이터 기술 하둡, HDFS, R, HIVE

빅데이터 기술들을 처음 접했던 것은 2011년초 정도였던 것 같다.

물론 실무로서 접했다기 보다는 이론적으로 접했던 부분이지만,

이미 5년이 지난 기술임에도 아직까지도 회자가 되고 있는 것은 그 활용 속도와 성공 사례가 드물기 때문이 아니지 않나 싶다.

우리 회사의 빅데이터 사업부도 그 실적이 저조하고, 아는 지인의 회사는 빅데이터 사업부가 해체되었다고 하니, 빅데이터의 사업성이 아직도 많이 힘들지 않나 싶다.


얼마전 공공기관에서 빅데이터 관련 사업이 발주되어, RFP 검토를 수행한 적이 있다.

터무니없이 낮은 예산에 혀를 내둘렀던 기억이 있다.(예산 부족 문제)

그리고 최근 있었던 사례로,

빅데이터 수집 솔루션인 스플렁크가 말썽을 일으켜 이러지도 저러지도 못하고 있다는 고민을 들은 적이 있다. 외산 제품이라는 까닭에서였다.(외산 제품 의존 문제)


이외에도 빅데이터 활성을 저해하는 많은 요인이 있지만, 최근 접한 사례를 잠시 꺼내보았다.

그런데 갑자기 이런 얘기를 갑자기 하는 이유는??


문득 자료를 뒤지다가 예전에 정리해 놓은 자료를 보게 되었다.

이미 5년이나 흘러버린 자료이지만, 크게 달라지지 않은 부분들도 있고 주요 기술들을 중심으로 다시 한번 살펴보고 개선점을 찾는 것도 괜찮겠다라는 생각이 들었다.

그에 대한 개선과 아이디어를 우리나라 국산 기술로 해결한다면 더할나위 없이 좋겠지만..



1. 하둡(Hadoop)
-아파치 대용량 파일 저장과 처리를 위한 솔루션으로 아파치 루씬의 하부 프로젝트로 시작되어 메인 프로젝트로 승격된 오픈소스 프레임워크
-SNS 및 모바일 서비스로 급증한 TB 수준의 빅데이터에 대한 처리 기술 요구로 등장
-분산 파일 시스템(HDFS)와 맵리듀스 등이 포함
-HDFS는 Master-Slave 구조로 동작하며, TCP/IP 프로토콜을 이용하여 노드 간 통신




-MapReduce Layer : 대용량 세트를 처리하거나 생성하기 위한 프로그래밍 모델
-Map Phase : 각 데이터를 한 줄씩 읽어서 Key와 Value로 묶어줌
-Reduce Phase : Map Phase에서 데이터를 받아 합치고 정리
-HDFS Layer : 범용 하드웨어로 구성된 클러스터에서 실행되고, 데이터 액세스 패턴을 스트리밍 방식으로 지원하여 대용량의 데이터 파일들을 저장할 수 있도록 설계된 파일시스템



2. 하둡 파일 시스템(HDFS) : 분산 파일 시스템
-수천 대 이상의 저가 서버 클러스터를 묶어 단일 파일 시스템 이미지를 제공하는 분산 파일 시스템
-하나의 네임 노드 서버, 세컨드리 네임 노드와 다수의 데이터 노드 서버들로 구성
-네임 노드 : 파일 시스템의 네임스페이스를 관리하면서 클라이언트의 파일 접근 요청을 처리
-세컨드리 네임 노드 : 네임 노드에서 저장하고 있는 네임스페이스 정보를 백업받아 메모리의 내용과 파일의 커밋으로 그 파일을 합쳐 스냅샷을 만드는 기능을 수행(이중화 구성을 위한 서버가 아님)
-데이터 노드 : 클라이언트의 데이터 입출력을 요청 처리
-HDFS에서 파일 데이터는 블록단위로 나뉘어 여러 데이터 노드에 분산 저장되고 블록은 구글 파일 시스템의 청크와 동일한 개념
-블록들은 가용성 보장을 위해 다른 데이터 노드에 복제 저장



3. 맵리듀스(MapReduce) : 분산 데이터 처리 시스템
-HDFS 등에 분산 저장되어 있는 데이터를 map( )과 reduce( )라는 간단한 분산 프로그래밍 방식을 통해 병렬 처리를 가능하게 해주는 데이터 처리 시스템
-전체 방대한 데이터 처리 작업을 여러 서버로 분할해서 처리
-하둡이나 구글에서 만든 프로그램 모델이 아니라 LISP와 같은 함수 기반 언어에서 이미 존재하던 프로그램 모델
-잡 트래커, 태스크 트래커, 클라이언트 라이브러리로 구성
-하나의 하둡 맵리듀스 클러스터는 한 개의 잡 트래커와 여러 개의 태스크 트래커로 구성
-잡 트래커 :주로 하둡 파일 시스템의 네임 노드가 실행되는 서버에서 전체 작업을 관리하는 기능을 수행--태스크 트래커 : 데이터 노드가 실행되는 서버에서 사용자가 요청한 작업을 실행
-클라이언트 라이브러리 : 사용자가 다양한 입력 형태와 분산 처리를 사용할 수 있는 메커니즘을 제공하고, 사용자가 개발한 프로그램을 잡 트래커로 작업하도록 요청, 작업 결과 모니터링을 위한 API 제공
-보통 하나의 맵리듀스 작업은 n개의 맵 태스크와 m개의 리듀스 태스크로 분리되고 이렇게 분리된 태스크가 태스크 트래커에서 실행
-맵리듀스 프로그램이 분산/병렬 처리에 좋은 이유는 입력데이터에 대한 맵 함수가 동시에 독립적으로 병렬 처리할 수 있는 구조이기 때문



4. Hbase(Columnar NoSQL Store) : 분산 데이터 저장소
-RDBMS와 달리 컬럼 기반의 Key-Value 저장 방식으로 확장성분산 환경을 보장하는 데이터 저장소 
-데이터 모델, 아키텍처, 기능 등에서 클라우데이터와 유사
-마스터 서버(Hmaster), 리젼 서버(HResion Server), 클라이언트 라이브러리로 구성
-마스터 서버 : 테이블 관리, 테이블 생성, 삭제 등의 작업을 위해 이중화 구성이 가능
-리젼 서버 : 실제 데이터 서비스를 제공하는 서버(=테블릿 서버)로 HLog가 HRegion(분리 단위)에 탑재
-데이터 파일 저장소로 HDFS를 이용하고 클러스터 관리를 위해 주키퍼를 이용
-Hbase의 커밋 로그는 변경 연산을 수행한 즉시 파일 시스템에 저장 되는 것이 아니라 주기적으로 파일 시스템에 저장(따라서 커밋 로그가 저장되기 이전에 유실이 발생할 수 있음)



5. 주키퍼(ZooKeeper) : 분산 환경 관리 시스템(분산 환경 구성)
-분산 환경을 쉽게 관리할 수 있도록 하는 분산 시스템(n개의 서버와 클라이언트 API로 구성)
-파일 시스템과 비슷한 형태로, 데이터를 계층적으로 저장
-저장된 데이터는 주키퍼 서버들 사이에 복제되어 일부 주키퍼 서버에 장애가 발생해도 안정적으로 서비스 할 수 있음(SPOF를 쉽게 제거할 수 있는 방법을 제공)
-주키퍼 서버에 데이터의 추가, 삭제, 값 변경 등과 같은 변경이 발생하면 주키퍼 서버는 클라이언트로 변경사항을 전달하는 이벤트를 발생시킴(세션 연결과 읽기 연산 시 이벤트를 받을 수 있는 와처를 설정)
-와처 : 세션의 상태가 변경되었거나 관심있는 노드의 상태 변경(생성, 수정, 자식노드의 추가/제거)이 발생했을 때 클라이언트가 이벤트를 받아 처리할 수 있게 하는 인터페이스(옵저버 패턴을 취함)
-클라이언트가 주키퍼 서버에 연결되면 Peer-to-peer FIFO 네트워크 채널을 생성
 (세션이 종료 될 때까지 유지)
-SPOF(Single Pint Of Failure) : 분산 시스템 구성에서 장애가 발생하면 전체 시스템에 장애가 발생할 수 있는 지점으로 모니터링 서버나 데이터 관리 서버가 해당






6. 피그(Pig) : 데이터 처리 프로그래밍 언어
-데이터를 적재/변환하고 결과를 정렬하는 과정을 쉽게 처리하기 위해 만든 프로그래밍 언어(야후 개발)



7. 하이브(Hive) : 데이터웨어하우스 솔루션
-데이터웨어하우스로 운영할 수 있게 해주는 솔루션(페이스북에서 개발)
-HDFS와 호환되는 대용량 데이터에 대한 분석을 지원하고, 기존 RDBMS SQL과 유사한 HiveQL을 지원

-SQL과 유사하여 사용이 쉬우나, 대용량 병렬처리 기반 DW보다 SQL 실행시간이 길다는 단점 존재

-Hive : 선언적 언어  /  Pig : 절차적 언어 



8. 척와(Chukwa) : 로그 분석 솔루션
-분산된 서버에서 로그를 수집하고, 하둡 파일 시스템에 저장하여 하둡 맵리듀스를 이용해 로그 분석을 수행하는 솔루션
-하둡 클러스터의 로그, 서버의 상태 정보 등을 관리할 수 있는 기능도 포함
-에이전트(컬렉터로 전송), 컬렉터(수신 및 HDFS에 저장), 프로세싱(아카이빙 등의 작업으로 처리)로 구성



9. 오픈소스 R : 오픈소스 분석 엔진
-통계 계산 및 시각화를 위한 언어 및 개발환경을 제공하는 오픈소스 분석 엔진
-개발 환경을 통해 기본 통계 기법부터 데이터마이닝까지 구현 가능
-R언어는 객체지향 언어로 일련의 데이터 처리 및 분석 작업을 대화형으로 처리 가능
-구현한 결과는 그래프 등으로 시각화 가능하고 JAVA, C 등의 언어와도 연결이 용이
-유례 없는 강력한 커뮤니티를 형성하고 있고, 거의 모든 분야에서 R 라이브러리를 발견할 수 있음


[기타 새롭게 주목받는 5대 오픈소스 빅데이터 요소 기술]
-특징 : 하둡이나 맵리듀스의 한계를 넘어 실시간, 양방향 처리에 초점
-STORM/KAFKA : STORM의 실시간 프로세싱과 KAFKA의 액티비티 스트림을 이용하여 모든 메시지를 실시간으로 신뢰성 있게 처리할 수 있고, 초당 수만 개의 메시지를 처리할 수 있음(스트림 프로세싱의 미래이며 인메모리 분석과 실시간 의사결정 지원도 탁월함, cf. 하둡은 배치 프로세싱)
-DRILL/DREMEL : 기본적인 지연율이 낮아 데이터 탐색에 적합하고 대량의 Ad-hoc 쿼리를 가능하게 함
(빠른 의사결정을 위해 맵리듀스 같은 워크플로우 기반의 방법보다는 인터랙티브한 분석이 필요하며 따라서 낮은 지연율을 요구)
-GREMLIN/GIRAPH : 그래프 분석 강화를 지원
-SAP HANA : 인메모리 분석 플랫폼으로 데이터를 올바른 포맷으로 넣고 빼기 위한 도구 및 소프트웨어의 집합(특히 빠른 처리가 요구되는 금융 모델링과 의사결정 지원 등의 애플리케이션에 필요)



10. NoSQL
-고비용의 ACID를 최우선으로 하는 RDBMS의 한계를 벗어나 웹 2.0의 비정형 대용량 데이터 처리를 위해 제시된 새로운 데이터 저장 방식


[NoSQL의 특징]
-관계형 데이터 모델이 아닌 Key-Value 또는 Key-Value를 응용한 모델
-안정적이고 고가의 하드웨어가 아닌 다수의 값싼 하드웨어 이용
-데이터는 분산된 노드에 파티션, 복제되어 저장
-단절내성에 대한 요구사항이 중요



-NoSQL은 CP, AP 속성을 가지는 분산 시스템들로 구성


[데이터 모델에 따른 NoSQL 솔루션 분류]
-Key-Value 모델 : 가장 단순, 키와 바이너리 타입의 값을 저장소에 저장하는 구조(키로만 조회 가능)
-칼럼 모델 : 데이터는 칼럼에 저장되며 테이블, 칼럼 등과 같이 스키마가 존재하는 모델
                (빅테이블, 클라우데이터, HBase)
-문서 모델 : 데이터의 저장 단위가 문서이며, 하나의 문서 내에는 여러 개의 필드와 대응값이 있는 모델
-그래프 모델 : 그래프에 있는 노드와 엣지를 저장하고 이를 쉽게 네비게이션 할 수 있는 모델


[저장 방식에 따른 NoSQL 솔루션 분류]
-데이터 파일을 분산 시스템에 저장하고 데이터 관리 시스템에서는 논리적인 관리만 담당
  (빅테이블, 클라우데이터, HBase)
-데이터 관리 시스템 자체적으로 데이터 파일을 저장(위의 3가지를 제외한 대부분의 솔루션)



11. 클라우데이터
-데이터 모델, 아키텍처, 기능 등에서 구글의 빅테이블의 개념을 도입한 국내 개발의 오픈소스 분산 데이터 관리 시스템
-칼럼 기반의 모델로 여러 개의 Key-Value 가 저장되고 로우키를 이용하여 유일하게 식별




-테이블은 로우 키 범위를 이용해 여러 개로 분리되며 분리된 단위를 테블릿이라고 부름
 (하나의 테블릿은 여러 개의 열을 가질 수 있고, 테블릿으로 분리될 수 있는 최소단위는 하나의 열)
-데이터 분산은 테블릿으로 분산하고, 마스터 서버가 이 테블릿을 테블릿 서버에 할당하는 역할을 수행
-하나의 클라우데이터 클러스터는 여러 개의 마스터 서버를 가질 수 있지만, 마스터 기능을 수행하는 서버는 하나만 존재하고 나머지 서버는 스탠바이 서버 역할
-마스터 서버는 클러스터 관리를 위한 어떤 정보도 가지고 있지 않아 마스터 서버에 장애가 발생해도 데이터 서비스는 정상적으로 수행 가능(테블릿 할당 작업만 영향을 받음)
-테블릿 서버는 메모리 기반과 디스크 기반 두 종류로 나누어 관리되어, 실시간으로 요청되는 데이터의 입력/삭제 처리는 메모리에서 빠르게 처리하고, 대용량의 데이터도 저장 가능
-테블릿 서버는 파일 시스템으로 저장하기 전에 장애가 발생할 경우의 데이터 유실을 방지하기 위해 커밋 로그를 저장(커밋로그 전용 시스템을 사용)
-테블릿 서버는 주키퍼를 통해 멤버십 관리를 하고 데이터 파일은 기본적으로 HDFS에 저장
-주키퍼는 테블릿 서버에 장애가 발생했는 지를 판단하여 장애가 발생 시 테블릿 서버의 노드를 삭제하고
네트워크 단절로 세션이 끊기면 테블릿 서버는 자동으로 종료되어 동일한 테블릿 서비스를 방지
-맵 태스크의 입력으로 클라우데이터의 테이블을 지정하면 하나의 작업은 테블릿의 수만큼 맵 태스크가 생성되고 어느 서버에서 관리하는 지는 메타 테이블에 저장되어 있음(=네임노드의 역할)





'nosql' 카테고리의 다른 글

window redis 다운로드 github  (0) 2016.04.11
MongoDB  (0) 2016.04.07
apache Hbase  (0) 2016.04.07
nosql 범주  (0) 2016.04.07
nosql 등장배경  (0) 2016.04.07