Hadoop Ecosystem
코디네이터
-
Zookeeper - http://zookeeper.apache.org
분산 환경에서 서버간의 상호 조정이 필요한 다양한 서비스를 제공하는 시스템으로 크게 다음과 같은 네가지 역할을 수행한다. 첫째, 하나의 서버에만 서비스가 집중되지 않게 서비스를 알맞게 분산해 동시에 처리하게 해준다. 둘째 하나의 서버에서 처리한 결과를 다른 서버와도 동기화해서 데이터의 안정성을 보장한다. 셋째 운영서버에 문제가 발생해서 서비스를 제공할 수 없을 경우, 다른 대기 중인 서버를 운영 서버로 바꿔서 서비스가 중지 없이 제공되게 한다. 넷째 분산환경을 구성하는 서버의 환경설정을 통합적으로 관리한다.
리소스 관리
-
YARN - http://hadoop.apache.org
얀(YARN)은 데이터 처리 작업을 실행하기 위한 클러스터 자원(CPU,메모리,디스크 등)과 스케줄링을 위한 프레임워크이다. 기존 하둡의 데이터 처리 프레임워크인 맵리듀스의 단점을 극복하기 위해 시작된 프로젝트이며, 하둡2.0부터 사용할 수 있다. 맵리듀스, 하이브, 임팔라, 타조, 스파크 등 다양한 어플리케이션들은 얀에서 리소스를 할당받아서 작업을 실행하게 된다.
-
Mesos - http://mesos.apache.org
메소스(Mesos)는 클라우드 인프라스트럭처 및 컴퓨팅 엔진의 다양한 자원(CPU, 메모리, 디스크)을 통합적으로 고나리할 수 있도록 만든 자원 관리 프로젝트이다. 메소스는 클러스터링 환경에서 동적으로 자원을 할당하고 격리하는 메커니즘을 제공하며, 이를 통해 분산 환경에서 작업 실행을 최적화할 수 있다. 1만대 이상의 노드에도 대응 가능하며, 웹 기반 UI, 자바, C++, 파이썬API를 제공한다. 하둡, 스파크, 스톰, 엘라스틱 서치(Elastic Search), 카산드라(Cassandra), 젠킨스(Jenkins) 등 다양한 어플리케이션을 메소스에서 실행 할 수 있다.
데이터 저장
-
HBase - http://hbase.apache.org
H베이스는 HDFS기반의 칼럼 기반 데이터베이스 이다. 구글의 빅테이블 논문을 기반으로 개발 되었다. 실시간 랜덤 조회 및 업데이트가 가능하며, 각 프로세스는 개인의 데이터를 비동기적으로 업데이트 할 수 있다. 단 맵리듀스는 일괄 처리 방식으로 수행된다. 트위터, 야후, 어도비 같은 해외 업체에서 사용하고 있으며, 국내에서는 2012년 네이버가 모바일 메신저인 라인에 H베이스를 적용한 시스템 아키텍처를 발표했다.
-
Kudu - http://getkudu.io
쿠두는 컬럼 기반의 스토리지로서, 특정 컬럼에 대한 데이터 읽기를 고속화할 수 있다. 물론 기존에도 HDFS dptjeh 파케이(Parquet), RC, ORC와 같은 파일 포맷을 사용하면 컬럼 기반으로 데이터를 저장할 수 있지만 HDFS 자체가 온라인 데이터 처리에 적합하지 않다는 약점이 있다. 그리고 HDFS기반으로 온라인 처리가 가능한 H베이스의 경우 데이터 분석 처리가 느라다는 단점이 잇다. 쿠두는 이러한 문제점을 보완해서 개발한 컬럼 기반 스토리지이며, 데이터의 발생부터 분석까지의 시간을 단축할 수 있다.
데이터 수집
-
Chukwa - http://chukwa.apache.org
척와는 분산 환경에서 생성되는 데이터를 HDFS에 안정적으로 자장하는 플랫폼이다. 분산된 각 서버에서 에이전트를 실행하고, 콜렉터가 에이전트로부터 데이터를 받아 HDFS에 저장합니다. 콜렉터는 100개의 에이전트당 하나씩 구동되며, 데이터 중복 제거 등의 작업은 맵리듀스로 처리한다.
-
Flume - http://flume.apache.org
플럼은 척와처럼 분산된 서버에 에이전트가 설치되고, 에이전트로부터 데이터를 전달받는 콜랙터로 구성된다. 차이점은 전체 데이터의 흐름을 관리하는 마스터 서버가 있어서 데이터를 어디서 수집하고, 어떤 방식으로 전송하고, 어디에 저장할지를 동적으로 변경할 수 있다.
-
Scribe - http://github.com/facebook/scribe
페이스북에서 개발한 데이터 수집 플랫폼이며, Chukwa와는 다르게 데이터를 중앙 집중 서버로 전송하는 방식이다. 최종 데이터는 HDFS 외에 다양한 저장소를 활용할 수 있으며, 설치와 구성이 쉽게 다양한 프로그램 언어를 지원한다. HDFS에 저장할려면 JNI(Java Native Interface)를 이용해야한다.
-
Sqoop - http://sqoop.apache.org
스쿱은 대용량 데이터 전송 솔루션이며, Sqoop은 HDFS, RDBMS, DW, NoSQL 등 다양한 저장소에 대용량 데이터를 신속하게 전송하는 방법을 제공한다. 오라클, MS-SQL, DB2 등과 같은 상용 RDBMS와 MySQL, PostgreSQL과 같은 오픈 소스 RDBMS등을 지원한다.
-
Kafak - http://kafka.apache.org
카프카는 데이터 스트림을 실시간으로 관리하기 위한 분산 메세징 시스템이다. 2011년 링크드인에서 자사의 대용량 이벤트처리를 위해 개발됐다. 발행구독모델로 구성되어 있으며, 데이터 손실을 막기 위하여 디스크에 데이터를 저장한다. 파티셔닝을 지원하기 때문에 다수의 카프카 서버에서 메시지를 분산 처리할 수 있으며, 시스템 안전성을 위하여 로드밸런싱과 내고장성(Fault Tolerant)를 보장한다. 다수의 글로벌 기업들이 카프카를 사용하고 있으며, 그중 링크드인은 하루에 1조1천억건 이상의 메시지를 카프카에서 처리하고 있다.
데이터 처리
-
Pig - http://pig.apache.org
복잡한 맵리듀스 프로그래밍을 대체할 피그라틴(Pig Latin)이라는 자체 언어를 제공한다. 맵리듀스API를 매우 단순화한 형태이고 SQL과 유사한 형태로 설계되엇다. SQL과 유사하기만 할 뿐, 기존SQL 지식을 활용하기가 어려운 편이다.
-
Mahout - http://mahout.apache.org
머하웃은 하둡기반으로 데이터 마이닝 알고리즘을 구현한 오픈소스프로젝트이다. 현재 분류(classification), 클러스터링(clustering), 추천 및 협업 필터링(Recommenders/collaborative filtering), Pattern Mining, 회귀분석(Regression), 차원 리덕션(Dimension reduction), 진화 알고리즘(Evolutionary Algorithms) 등 주요 알고리즘을 지원한다. 머하웃을 그대로 사용할 수도 잇지만 각 비즈니스 환경에 맞게 최적화해서 사용하는 경우가 많다.
-
Spark - http://spark.apache.org
스파크는 인메모리 기반의 범용 데이터 처리 플랫폼이다. 배치 처리, 머신러닝, SQL, 질의 처리, 스트리밍 데이터 처리, 그래프 라이브러리 처리와 같은 다양한 작업을 수용할 수 있도록 설계되었다.
-
Impala - http://impala.io
임팔라는 클라우데라에서 개발한 하둡기반의 분산 쿼리 엔진이다. 맵리듀스를 사용하지 않고, C++로 개발한 인메모리 엔진을 사용해 빠른 성능을 보여준다. 임팔라는 데이터 조회를 위한 인터페이스로 HiveQL을 사용하며, 수초 내에 SQL 질의 결과를 확인할 수 있다.
-
Presto - https://prestodb.io
프로스토는 페이스북이 개발한 대화형 질의를 처리하기 위한 분산 쿼리 엔진이다. 메모리 기반으로 데이터를 처리하며, 다양한 데이터 저장소에 데이터를 SQL로 처리할 수 있다. 특정 질의의 경우 하이브 대비 10배 정도 빠른 성능을 보여준다.
-
Hive - http://hive.apache.org
하이브는 하둡기반의 데이터웨어하우징용 솔루션이다. 페이스북에서 개발했으며, 오픈소스로 공개되며 주목박은 기술이다. SQL과 매우 유사한 HiveQL이라는 쿼리 언어를 제공한다. 그래서 자바를 모르는 데이터 분석가들도 쉡게 하둡 데이터를 분석할 수 있게 도와준다. HiveQL은 내부적으로 맵리듀스가 잡으로 변환되어 실행된다.
-
Tajo - http://tajo.apache.org
타조는 고려대학교 박사과정 학생들이 주도해서 개발한 하둡 기반의 데이터 웨어하우스 시스템이다. 맵리듀스 엔진이 아닌 자체 분산 처리 엔진을 사용하며, HiveQL을 사용하는 다른 시스템과는 다르게 표준 SQL을 지원하는 것이 특징이다. HDFS, AWS, S3, H베이스, DBMS 등에 저장된 데이터 표준 SQL로 조회할 수 있고, 이기종 저장소 간의 데이터 조인 처리도 가능하다. 질의 유형에 따라 하이브나 스파크보다 1.5배 ~ 10배 빠른 성능을 보여준다.
워크플로우 관리
-
Oozie - http://oozie.apache.org
우지는 하둡 작업을 관리하는 워크플로우 및 코디네이터 시스템 이다. 자바 서블릿 컨테이너에서 실행되는 자바 웹 어플리케이션 서버이며, 맵리듀스 작업이나 피그 작업 같은 특화된 액션으로 구성된 워크플로우를 제어한다.
-
Airflow - http://nerds.airbnb.com/airflow
에어플로우는 에어비앤비에서 개발한 워크플로우 플랫폼이다. 데이터 흐름의 시각화, 스케줄링, 모니터링이 가능하며, 하이브, 프레스토, DBMS 엔진과 결합해서 사용할 수 있다.
-
Azkaban - https://azkaban.github.io
아즈카반은 링크드인에서 개발한 워크플로우 플랫폼이다. 링크드인은 자사의 복잡한 데이터 파이프라인을 관리하기 위해 아즈카반을 개발했으며, 이를 오픈소스로 공개했다. 아즈카반은 워크플로우 스케줄러, 시각화된 절차, 인증 및 권한 관리, 작업 모니터링 및 알람 등 다양한 기능은 웹UI로 제공한다.
-
Nifi -https://nifi.apache.org
니이파이는 테이터 흐름을 모니터링하기 위한 프레임워크이다. 여러 네트워크를 통과하는 데이터 흐름을 웹UI에서 그래프로 표현하며, 프로토콜과 데이터 형식이 다르더라도 분석이 가능하다. 또한 데이터를 흘려보낼 때 우선순위를 제어할 수 있다.
데이터 시각화
-
Zeppelin - https://zeppelin.incubator.apache.org
제플린은 빅데이터 분석가를 위한 웹 기반 분석도구이며, 분석결과를 즉시 표, 그래프로 표현하는 시각화까지 지원한다. 아이파이썬(iPython)의 노트북(Notebook)과 유사한 노트북 기능을 제공하며, 분석가는 이를 통해 손쉽게 데이터를 추출, 정제, 분석, 공규할 수 있다. 또한 스파크, 하이브, 타조, 플링크, 엘라스틱 서치, 카산드라, DBMS 등 다양한 분석 플랫폼과 연동할 수 있다.
데이터 직렬화
-
Avro - http://avro.apache.org
RPC(Remote Procedure Call)와 데이터 직렬화를 지원하는 프레임워크이다. JSON을 이용해 데이터 형식과 프로토콜을 정의하며, 작고 빠른 바이너리 포맷으로 데이터를 직렬화한다. 경쟁 솔루션으로는 아파치 쓰리프트(Thrift), 구글 프로토콜 버퍼(Protocol Buffer)등이 있다.
-
Thrift - http://thrift.apache.org
쓰리프트는 서로 다른 언어로 개발된 모듈들의 통합을 지원하는 RPC 프레임워크이다. 예를 들어, 서비스모듈은 자바로 개발하고, 서버 모듈은 C++로 개발됐을 때 쓰리프트로 두 모듈이 통신하는 코드를 생성할 수 있다. 쓰리프트는 개발자가 데이터 타입과 서비스 인터페이스를 선언하면 RPC 형태의 클라이언트와 서버 코드를 자동으로 생성한다. 자바, C++, C#, 펄, PHP, Python, 뎅파이, 얼랭, Go, Node.js 등 과 같이 다양한 언어를 지원한다.