Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Flume NG 훑어보기
최범균 (2013-12-13)
Flume
● 데이터 수집 목적
○ 다양한 소스로부터
○ 다양한 보관소로의
○ 데이터 흐름을 처리

● Flume 이벤트
○ 헤더와 데이터(payload)로 구성
○ 에이전트를 통해 이동하는 단위

● Flume 에이전...
에이전트의 기본 구성
에이전트
소스가 읽어오는 대
상
(예, TCP 데이터,
Avro 클라이언트 등)

소스
Source

채널
Channel

싱크
Sink

싱크가 출력하는 대
상
(예, HDFS, HBASE,
파일...
에이전트 간 연결
에이전트
소스
Source

채널
Channel

Avro
Sink

Avro/Thrift 를 이용해서 에이전트 간 이벤트 전
달
에이전트
Avro
Source

채널
Channel

싱크
Sink
Fan-in 구성
에이전트
소스

채
널

Avro
Sink

에이전트

Avro

채
널

Sink

에이전트
소스

채
널

Avro
Sink

다수의 노드에서 발생하는 이벤트를 한 곳으로 모을 때
Fan-out 구성
에이전트
에이전트
Avro
채
널

Avro
Sink

채
널

HDFS
Sink

채
널

소스

채
널

Solr
Sink

HDFS

SOLR

한 이벤트를 다양한 방식으로 처리할 때 사용

S...
주요 Source와 Sink
소스의 종류:
● Spooling Directory Source: 디렉토리에 새롭게 추가되는 파일을 데이터로 사용
● Exec Source: 명령행을 실행하고 콘솔 출력 내용을 데이터 입력으...
에이전트 설정: 파일 이용
# a1 에이전트의 소스, 채널, 싱크 목록
a1.sources = avrsrc
a1.channels = memch
a1.sinks = avrsink
# a1 에이전트의 소스 설정
a1.sou...
Interceptor
● Source로 들어온 이벤트 수정 또는 버릴 때
사용
○ Source로 들어온 이벤트는 interceptor를 거친 뒤에
채널에 전달

● Interceptor의 종류
○ Timestamp : ...
Channel Selector
● Source가 받은 이벤트를 전달할 채널을 선택
○ replicating, multiplexing(헤더 값을 기준 선택)
replicating 채널 선택

소스

모두
전달

채
널

...
Sink Processor
● 한 채널에 여러 Sink를 그룹으로 묶을 때 사용
종류

설명

설정 예

Default

한 채널에 한 개 Sink

Failover

우선 순위 높은 Sink에 이벤트를
쓰고, 문제 발...
어플리케이션이 생성한 데이터를
Source에 이벤트로 전송하려면?
● Avro/Thrift 클라이언트 이용해서 직접 데이터
를 Source에 추가
○ 예, flume을 위한 Log4jAppender 사용해서 Log4j ...
관련된 또는 비슷한 다른 기술
●
●
●
●
●

Logstash (로그 수집)
Fluentd (로그 수집)
Kafka (메시징)
Storm (스트림 변환)
…. 너무 많음
Upcoming SlideShare
Loading in …5
×

Flume 훑어보기

9,562 views

Published on

Flume ng 에 대한 훑어보기 자료입니다.

Published in: Technology

Flume 훑어보기

  1. 1. Flume NG 훑어보기 최범균 (2013-12-13)
  2. 2. Flume ● 데이터 수집 목적 ○ 다양한 소스로부터 ○ 다양한 보관소로의 ○ 데이터 흐름을 처리 ● Flume 이벤트 ○ 헤더와 데이터(payload)로 구성 ○ 에이전트를 통해 이동하는 단위 ● Flume 에이전트 ○ 이벤트(데이터) 흐름 제어 ○ 에이전트 간 데이터 이동 가능 ■ 1개 에이전트가 다수의 에이전트와 연결 가능
  3. 3. 에이전트의 기본 구성 에이전트 소스가 읽어오는 대 상 (예, TCP 데이터, Avro 클라이언트 등) 소스 Source 채널 Channel 싱크 Sink 싱크가 출력하는 대 상 (예, HDFS, HBASE, 파일, 다른 에이전트 등) ● 소스: 지정한 소스를 통해서 이벤트를 받아 채널로 전달 ● 채널: 이벤트를 임시로 보관 ● ○ 메모리 채널, 파일 채널, DB 채널 싱크: 채널에서 이벤트를 읽어와 출력 대상에 씀 ○ 싱크가 출력 대상에 이벤트(데이터)를 전달을 완료하 면, 채널에서 해당 이벤트를 삭제
  4. 4. 에이전트 간 연결 에이전트 소스 Source 채널 Channel Avro Sink Avro/Thrift 를 이용해서 에이전트 간 이벤트 전 달 에이전트 Avro Source 채널 Channel 싱크 Sink
  5. 5. Fan-in 구성 에이전트 소스 채 널 Avro Sink 에이전트 Avro 채 널 Sink 에이전트 소스 채 널 Avro Sink 다수의 노드에서 발생하는 이벤트를 한 곳으로 모을 때
  6. 6. Fan-out 구성 에이전트 에이전트 Avro 채 널 Avro Sink 채 널 HDFS Sink 채 널 소스 채 널 Solr Sink HDFS SOLR 한 이벤트를 다양한 방식으로 처리할 때 사용 Sink
  7. 7. 주요 Source와 Sink 소스의 종류: ● Spooling Directory Source: 디렉토리에 새롭게 추가되는 파일을 데이터로 사용 ● Exec Source: 명령행을 실행하고 콘솔 출력 내용을 데이터 입력으로 사용 ● Avro Source: 외부 Avro 클라이언트에서 전송하는 데이터 수신해서 입력으로 사용 ● Thrift Source: 외부 Thrift 클라이언트에서 전송하는 데이터 수신해서 입력으로 사용 ● JMS Source: JMS 메시지를 입력으로 사용 ● Syslog Source: 시스템 로그를 입력으로 사용 ● NetCat source: TCP로 라인 단위 입력 받음 싱크의 종류: ● HDFS Sink: HDFS에 데이터를 파일로 씀 ● HBase Sink: HBase에 데이터를 씀 ● Avro Sink: 다른 Avro 서버(Avro Source)에 이벤트를 전달함 ● Thrift Sink: 다른 Thrift 서버(Thrift Source)에 이벤트를 전달함 ● File Roll Sink: 로컬 파일에 데이터를 씀 ● MorphlineSolrSink: 데이터를 변환해서 Solr 서버에 씀 ● ElasticSearchSink: 데이터를 변환해서 ElasticSearch 클러스터에 씀 ● Null Sink: 이벤트를 버림
  8. 8. 에이전트 설정: 파일 이용 # a1 에이전트의 소스, 채널, 싱크 목록 a1.sources = avrsrc a1.channels = memch a1.sinks = avrsink # a1 에이전트의 소스 설정 a1.sources.avrsrc.type = avro a1.sources.avrsrc.bind = 0.0.0.0 a1.sources.avrsrc.port = 44444 a1.sources.avrsrc.channels = memch ... # a1 에이전트의 채널 설정 a1.channels.memch.type = memory ... # a1 에이전트의 싱크 설정 a1.sinks.avrsink.type = avro a1.sinks.avrsink.hostname = otherhost a1.sinks.avrsink.port = 55555 a1.sinks.avrsink.channel = memch ... 에이전트 avrsrc memch avrsink -- 에이전트 실행 시, 에이전트 이름 지정 $ flume-ng agent -n a1 -c conf -f confg.properties
  9. 9. Interceptor ● Source로 들어온 이벤트 수정 또는 버릴 때 사용 ○ Source로 들어온 이벤트는 interceptor를 거친 뒤에 채널에 전달 ● Interceptor의 종류 ○ Timestamp : 이벤트 헤더에 현재 시간 값 추가 ○ Static Interceptor : 이벤트 헤더에 지정한 값 추가 ○ Regex filtering interceptor : 정규 표현식에 일치하는 지 여부에 따라 이벤트를 버릴지 여부 결정 ● 한 개 이상 interceptor 적용 가능
  10. 10. Channel Selector ● Source가 받은 이벤트를 전달할 채널을 선택 ○ replicating, multiplexing(헤더 값을 기준 선택) replicating 채널 선택 소스 모두 전달 채 널 multiplexing 채널 선택 state헤더값 이 “2”인 것 Avro Sink 채 널 Avro Sink 채 널 HDFS Sink 소스 채 널 HDFS Sink a1.sources.s1.channels = c1 c2 # replicating이 default a1.sources.s1.selector.type = replicating state헤더값 이 “1”인 것 a1.sources.s1.channels = c1 c2 a1.sources.s1.selector.type = multiplexing a1.sources.s1.selector.header = state a1.sources.s1.selector.mapping.1 = c1 a1.sources.s1.selector.mapping.2 = c2 a1.sources.s1.selector.default = c1
  11. 11. Sink Processor ● 한 채널에 여러 Sink를 그룹으로 묶을 때 사용 종류 설명 설정 예 Default 한 채널에 한 개 Sink Failover 우선 순위 높은 Sink에 이벤트를 쓰고, 문제 발생시 우선순위 낮은 Sink에 씀 문제 해결시, 다시 우선 순위 높 은 Sink에 쓰기 시작 a1.sinks.main.channel = c1 a2.sinks.backup.channel = c1 a1.sinkgroups.g1.sinks = main backup a2.sinkgroups.g1.processor.type = failover a2.sinkgroups.g1.processor.priority.main = 10 a2.sinkgroups.g1.processor.priority.backup = 5 Load Balance Sink를 알맞게 배분 (round_robin, random) a1.sinkgroups.g1.sinks = s1 s2 a1.sinkgroups.g1.processor.type = load_balance a1.sinkgroups.g1.processor.selector = random
  12. 12. 어플리케이션이 생성한 데이터를 Source에 이벤트로 전송하려면? ● Avro/Thrift 클라이언트 이용해서 직접 데이터 를 Source에 추가 ○ 예, flume을 위한 Log4jAppender 사용해서 Log4j 로 그를 특정 에이전트의 Avro Source로 전송 ● 파일을 읽어오는 Source 사용 ○ 예, Spooling Directory Source 사용 ● Flume이 제공하는 클라이언트로 파일 데이터 를 Avro Source로 전송 ○ $ flume-ng avro-client -H host -p 44444 -F someFile
  13. 13. 관련된 또는 비슷한 다른 기술 ● ● ● ● ● Logstash (로그 수집) Fluentd (로그 수집) Kafka (메시징) Storm (스트림 변환) …. 너무 많음

×