- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
big data (빅데이터) [실시간 분석 시스템] 데이터 수집 #1 오픈 소스 수집기 비교
2017.03.06 12:44
[실시간 분석 시스템] 데이터 수집 #1 오픈 소스 수집기 비교
데이터 분석을 하기 위해서는 가장 먼저 고려해야 할 시스템이 수집 시스템, 즉, Data Collector 이다. 수집은 간단해 보이지만, 데이터 처리 플랫폼 전체의 아키텍처에 있어서 가장 중요한 요소이며 이후 구축할 여러가지 판단요소의 기준점이 될 수 있다. 수집은 현재 시스템의 다양한 곳에 존재하는 로그, 데이터 등이 대상이다.
수집 시스템을 구성하기 위한 다양한 오픈 소스들이 존재한다. 이번 글에서는 수집을 위한 오픈 소스들의 종류와 간단한 특징에 대해서 알아보고, 다음 글에서는 여러 오픈 소스 중에서 선택한 두 가지 오픈소스에 대해 상세한 설명을 하는 것으로 수집에 대해 풀어보고자 한다. 미리 얘기하자면 해당 두 가지 오픈 소스는 Apache Sqoop과 Apache Flume이다. 그리고, 수집할 데이터를 저장할 Data Store 은 분산 파일 시스템인 HDFS, 즉, Apache Hadoop FileSystem을 사용한다는 전제를 둔다. 이 오픈 소스들은 kth 의 대용량 실시간 분석 솔루션인 DAISY(Data Intelligence System)의 수집 시스템의 일부로서 실제 서비스에도 현재 적용되어 안정적으로 운용되어지고 있는 것들이다. 물론, 대부분의 플랫폼에서 선택한 오픈 소스이기도 하다.
새롭게 만드는 서비스,시스템이라면 로그 포맷, 생성 위치 등을 정하겠지만, 대부분 기존 서비스에서는 이미 어떤 형식으로든 분석의 대상이 될 로그가 생성되어 있을 것이다. 어떤 시스템은 RDBMS에 로그 테이블을 만들어 파티션하고 샤딩 등을 해서 저장하는 경우도 있을 것이고, 어떤 시스템은 웹서버, WAS의 Access Log 형태로 파일을 Disk에 롤링해가며 저장하는 경우도 있을 것이고, 전사적인 로그 포맷이 정해져 있어 JSON 또는 CSV 등의 형태로 특정 폴더에 특정 조건으로 잘 정의되어 저장하는 경우도 있을 것이다.
RDBMS로 부터 수집 : Apache Sqoop

RDBMS에 저장되어 있는 경우라면 쉽고 유용한 오픈 소스가 Apache Sqoop 이다. Sqoop은 Sql to Hadoop 의 약자로, 간단한 CLI(Command Line Interface)로 Oracle, MySQL 등의 RDBMS의 특정 테이블 또는 특정 조건에 맞는 데이터를 HDFS로 쉽게 옮길 수 있으며, Hive, Pig, HBase 등으로 바로 옮겨 확인 할 수 있다. 반대로 HDFS에 저장되어 있는 데이터를 RDBMS로 옮길 수도 있다. 로그 뿐 아니라 분석할 때 필요한 메타성 데이터를 가져올 때도 유용하다. Apache Sqoop에 대해서는 다음 글에서 보다 상세히 다룰 예정이다.
로그 파일 수집하기 : Apache Flume, Facebook Scribe, Apache Chukwa
로그 파일이 서비스의 특정 서버의 특정 위치에 파일을 생성하고 있는 경우나 RPC로 로그를 전달할 경우에 적용이 가능한 여러가지 오픈 소스들이 있다. 그러나, 그 이전에 먼저 명확히 해야 할 것은 로그를 실시간으로 수집,분석해야할 사항이 있는가? 아니면, 배치성의 분석만 필요한 것이가? 그리고, 수집과 동시에 실시간 분석을 할 것인가? 아니면 우선 저장하고 이후에 분석할 것인가에 따라 여러가지 경우의 수가 발생하게 된다. 선택한 수집 오픈소스의 활용, 옵션등이 달라지게 될 것이다. 이후에 언급하겠지만, RabbitMQ, ZeroMQ 와 같은 메시징 큐가 필요 할 수 도 있고, Apache Kafka 와 같은 또 다른 Layer가 필요하게 될 것이다.
우선 가장 많이 알려져 있는 수집기 오픈소스는 Apache Flume, Facebook Scribe, Apache Chukwa, 최근에 Netflix에서 공개한 suro 등등이 있다. 수집기 오픈소스에 대해 알아보기 전에, 대용량의 고속의 이벤트 데이터(로그)를 수집하는 시스템에 필요한 요건은 아래와 같다.
- 확장성 : 수집대상 서버는 무한대로 확장된다. 수십에서 수천, 수만대로 수집대상 서버는 늘어 날 것이다.
- 안정성 : 수집되는 데이터가 유실되지 않고 안정적으로 저장되어야 한다.
- 유연성 : 다양한 포맷의 데이터, 다양한 프로토콜을 지원해야 한다.
- 실시간성 : 수집된 데이터를 실시간으로 반영해야 한다.
위에서 언급한 수집기 오픈 소스중 3가지 Flume, Scribe, Chukwa를 간단 비교요약하면 아래와 같다.

위 간단 비교는 개인적인 의견이 포함되어 있다. 하지만, 최근의 빅데이터 플랫폼에서 수집 부분에 사용되는 오픈 소스중 가장 많이 사용이 언급되어지고, 발전이 보여지는 오픈소스는 단연 Apache Flume이라 할 수 있을 것이다. 하지만, 현재 서비스, 시스템의 상황에 맞게 위 오픈 소스 뿐 아니라 다양한 오픈 소스를 검토해서 적합한 것을 적용해야 한다.
빅데이터 분석 플랫폼의 가장 첫 관문인 수집부분은 위에서도 잠시 언급하였지만, 서비스 특성에 따라 위 수집기 이외에도 메시징 큐 등의 여타 Layer도 필요할 수 있으므로 다양한 검토가 필요한 부분이다.
다음 글에선 위에서 언급한 Apache Sqoop, Apache Flume에 대해 자세히 살펴볼 예정이다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

