빅데이터는 지금까지 명확한 개념으로 규정된 적이 없다. 맥킨지와 IDC에 따르면 다음과 같이 빅데이터를 정의했다.
1. 데이터의 규모에 초점을 맞춘 정의 - 맥킨지
기존 데이터베이스 관리 도구의 데이터 수집, 저장, 관리, 분석하는 역량을 넘어서는 데이터이다.
2. 업무 수행 방식에 초점을 맞춘 정의 - IDC
다양한 종류의 대규모 데이터로부터 저렴한 비용으로 가치를 추출하고, 데이터의 빠른 수집 및 발굴, 분석을 지원하도록 고안된 차세대 기술 및 아키텍쳐이다.
위와 같은 빅데이터 정의만으로는 빅데이터를 이해하기 어려울 것이다. 이 때 빅데이터의 3대 요소를 알아봐야 한다. 이는 3V
라고도 한다.
실시간 처리(Real Time Processing)
와 장기적 접근(Batch Processing)
이다. 데이터의 특성, 서비스의 특징에 의해 실시간 처리를 하는 것이 유용한지, 장기적 접근이 유용한지를 구분지을 수 있다. 가령 금융 데이터라면 실시간으로 처리되어야 할 것이다. 반대로 오랜 기간 축적된 데이터를 분석함으로써 유용한 가치를 창출하려는 것이라면 빠른 처리보다 다양한 분석 기법과 표현 기술로 분석하는 Batch Processing 방식이 유용할 것이다.정형 데이터(Structured Data)
, 반정형 데이터(Semi-Structured Data)
, 비정형 데이터(Unstructured Data)
로 나눌 수 있다. 정형 데이터는 RDBMS 방식으로 처리가 가능한, 정해진 구조를 갖고 고정된 필드에 저장되는 데이터이다. 반정형 데이터는 JSON, XML 등이 해당되는데 고정된 필드에 저장되지는 않으나 메타 데이터나 스키마 등을 갖는 것이다. 비정형 데이터는 고정된 필드에 저장되지 않는 데이터를 말한다. 사진, 텍스트, 이미지, 동영상이 이에 해당할 것이다. 빅데이터는 이러한 모든 다양한 종류의 데이터를 분석할 수 있어야 한다.확장 가능한 방식
으로 데이터를 저장하고 분석하는 분산 컴퓨팅 기법
이 필요할 것이다.데이터는 현재 시대에 상당히 빠른 속도로 많은 양이 생산되고 있다. 이에 따라 기존의 RDBMS로는 데이터를 보관, 처리하기 어려워졌다. 상용 RDBMS의 스토리지를 무한정 늘리는 것도 경제적으로 좋은 방법이 아니다. 게다가 정형 데이터의 경우 기존 RDBMS로 처리할 수 있었으나 비정형 데이터의 경우에는 그러기 어렵다.
반면 하둡의 경우 오픈소스 프로젝트
라서 그에 대한 비용 부담이 없다. 만약 스토리지가 부족한 경우 리눅스 서버를 더 늘리면 된다. fault tolerance
도 있기 때문에, 데이터가 유실될 경우 복구가 가능하다는 장점도 존재한다. 이러한 하둡은 성능 또한 좋다. 병렬 처리 방식으로, 데이터를 여러 서버에 저장하고 동시에 처리한다. 병렬 처리 방식을 통해 기존의 데이터 분석 방식보다 훨씬 더 빠른 성능을 보여줄 수 있게 됐다. 하둡은 de-facto standard
라고도 한다. 사실상의 표준이라는 뜻이다. 이러한 장점들이 존재하기 때문에 하둡은 빅데이터 분야에서 사실상의 표준으로 자리잡게 됐다.
RDBMS는 트랜잭션 처리, 무결성 보장 등의 장점을 갖는다. 데이터는 기업의 사실상의 자산이다. 따라서 보안이 그만큼 중요한데, 하둡 1.0 부터는 보안성도 챙겼다. kerberos
인증을 통해 네트워크 전체에 걸쳐 강력한 보안을 확보하게 됐다. 거기에 WebHDFS REST API
를 제공함으로써 하둡을 잘 모르는 개발자도 쉽게 사용할 수 있게 됐다.
하둡은 다양한 요구를 반영할 수 있도록 여러 서브 프로젝트를 제공한다. 아래 그림을 참고하자.
위 그림을 보면 여러 서브 프로젝트들이 있음을 알 수 있다. 이 중에서 하둡 코어 프로젝트
는 MapReduce
, HDFS
가 해당된다. 각 서브 프로젝트들은 다음과 같은 특징으로 분류할 수 있다. 참고로, 하둡 서브 프로젝트에는 자사에서 솔루션으로 활용하다가 오픈소스화 시킨 것도 있다.
Zookeeper
Yarn
, Mesos
데이터 저장
- HBase
, Kudu
- HBase의 경우 HDFS 기반의 컬럼 기반 데이터베이스이다. 실시간 랜덤 조회 및 업데이트가 가능하다.
- Kudu의 경우 컬럼 기반 스토리지이다. 특정 컬럼에 대한 데이터 읽기를 고속화할 수 있다고 한다. HDFS의 경우에도 컬럼 기반으로 데이터를 저장할 수 있으나 HDFS 자체가 온라인 처리에 유용하지 않다. 또한, HBase는 HDFS를 기반으로 온라인 처리가 가능하나 데이터 분석 처리가 느리다는 단점이 있었다. Kudu는 이러한 단점을 개선한 것이다.
데이터 수집
- Chukwa
, Flume
, Scribe
, Sqoop
, Hiho
, Kafka
- 말 그대로 데이터 수집이다. 필요한 데이터를 HDFS 로부터 수집하거나, 데이터를 수집하여 HDFS에 저장하는 등의 기능을 갖고 있다.
데이터 처리
- Pig
, Mahout
, Spark
, Impala
, Presto
, Hive
, Tajo
- 이 또한 말 그대로 데이터 처리이다. 데이터를 여러 방식으로 처리하기 위한 방법들인 것이다. 특히 스파크는 가장 빠르게 성장하고 있는 오픈소스 프로젝트이다.
워크플로우 관리
- Oozie
, Airflow
, Azkaban
, Nifi
- 이 중에는 데이터의 흐름을 시각화 및 모니터링 하기 위한 것도 있고, 하둡 작업을 관리하는 워크플로우인 것도 있다.
데이터 시각화
- Zeppelin
- 빅데이터 분석가를 위한 웹 기반 분석 도구이다. 데이터를 시각화해준다.
데이터 직렬화
- Avro
, Thrift
- 데이터 직렬화란, serialization
을 의미한다. 반대로 역직렬화는 deserialization
이다. 객체를 바이트 스트림으로 바꾸거나, 그 반대의 과정이다. 기본적으로 디스크에 저장된 데이터를 네트워크를 통해 전송하기 위해서는 객체를 바이트 스트림으로 바꿔줘야 한다. serialization
은 디스크에서 데이터를 저장하거나, 전송하기 위해 사용하고 deserialization
은 디스크에 데이터를 읽거나 수신받고 데이터를 메모리에 쓸 수 있도록 하는 과정이다.
당연하게도, 하둡도 문제가 있다. 하둡의 문제에 대해 알아보자.
고가용성(HA : High Availability)
파일 네임스페이스 제한
HDFS의 Namenode는 메타 데이터를 메모리에서 관리한다. 이에 따라 메모리의 용량 탓에 HDFS에 저장할 수 있는 파일과 디렉토리의 수에 제한을 받게 된다.
데이터 수정 불가
RDBMS는 가능하지만 하둡은 데이터를 update할 수 없다. 한번 저장한 데이터에 대해서는 update 할 수 없는 것이다. 다만, 저장된 데이터에 대해 append 기능은 제공한다. 빅데이터 관점에서 생각했을 때, 데이터의 update가 불가능한 것은 불편한 것은 맞으나 어느 정도 상식적으로 이해할 수 있다. 하둡은 굉장히 큰 데이터를 보관, 분석하는 용도이기 때문에 데이터를 수정한다기 보다 데이터를 분석하여 가치를 추출해내는 것이 더 유용할 것이기 때문이다.
POSIX 명령어 미지원
하둡은 리눅스의 POSIX 명령어를 지원하지 않는다. 자체적인 셸 명령어와 API를 이용해 파일을 제어해야 한다. 다만, 하둡의 명령어는 리눅스의 POSIX 명령어와 유사하므로 익히는데 큰 시간이 걸리지는 않을 것이다.
전문 업체 부족
국내에서는 하둡과 관련된 다양한 업체가 부족한 것이 현실이다. 해외의 아마존, 야후, 페이스북처럼 오랫동안 해당 분야에서 기술과 노하우를 쌓았지만 국내는 그렇지 않다. 이렇기 때문에 국내 기업들에서 하둡을 도입하기가 고민이 될 수밖에 없을 것이다.