SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
Flume NG 훑어보기
최범균 (2013-12-13)
Flume
● 데이터 수집 목적
○ 다양한 소스로부터
○ 다양한 보관소로의
○ 데이터 흐름을 처리

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

● Flume 에이전트
○ 이벤트(데이터) 흐름 제어
○ 에이전트 간 데이터 이동 가능
■ 1개 에이전트가 다수의 에이전트와 연결 가능
에이전트의 기본 구성
에이전트
소스가 읽어오는 대
상
(예, TCP 데이터,
Avro 클라이언트 등)

소스
Source

채널
Channel

싱크
Sink

싱크가 출력하는 대
상
(예, HDFS, HBASE,
파일, 다른 에이전트
등)

● 소스: 지정한 소스를 통해서 이벤트를 받아 채널로 전달
● 채널: 이벤트를 임시로 보관
●

○ 메모리 채널, 파일 채널, DB 채널
싱크: 채널에서 이벤트를 읽어와 출력 대상에 씀
○ 싱크가 출력 대상에 이벤트(데이터)를 전달을 완료하
면, 채널에서 해당 이벤트를 삭제
에이전트 간 연결
에이전트
소스
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

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

Sink
주요 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: 이벤트를 버림
에이전트 설정: 파일 이용
# 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
Interceptor
● Source로 들어온 이벤트 수정 또는 버릴 때
사용
○ Source로 들어온 이벤트는 interceptor를 거친 뒤에
채널에 전달

● Interceptor의 종류
○ Timestamp : 이벤트 헤더에 현재 시간 값 추가
○ Static Interceptor : 이벤트 헤더에 지정한 값 추가
○ Regex filtering interceptor : 정규 표현식에 일치하는
지 여부에 따라 이벤트를 버릴지 여부 결정

● 한 개 이상 interceptor 적용 가능
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
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
어플리케이션이 생성한 데이터를
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
관련된 또는 비슷한 다른 기술
●
●
●
●
●

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

Más contenido relacionado

Más de beom kyun choi

Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugbeom kyun choi
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초beom kyun choi
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128beom kyun choi
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유beom kyun choi
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰beom kyun choi
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료beom kyun choi
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개beom kyun choi
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기beom kyun choi
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)beom kyun choi
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회beom kyun choi
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료beom kyun choi
 

Más de beom kyun choi (20)

Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
 
HBase 훑어보기
HBase 훑어보기HBase 훑어보기
HBase 훑어보기
 

Último

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 

Último (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 

Flume 훑어보기

  • 2. Flume ● 데이터 수집 목적 ○ 다양한 소스로부터 ○ 다양한 보관소로의 ○ 데이터 흐름을 처리 ● Flume 이벤트 ○ 헤더와 데이터(payload)로 구성 ○ 에이전트를 통해 이동하는 단위 ● Flume 에이전트 ○ 이벤트(데이터) 흐름 제어 ○ 에이전트 간 데이터 이동 가능 ■ 1개 에이전트가 다수의 에이전트와 연결 가능
  • 3. 에이전트의 기본 구성 에이전트 소스가 읽어오는 대 상 (예, TCP 데이터, Avro 클라이언트 등) 소스 Source 채널 Channel 싱크 Sink 싱크가 출력하는 대 상 (예, HDFS, HBASE, 파일, 다른 에이전트 등) ● 소스: 지정한 소스를 통해서 이벤트를 받아 채널로 전달 ● 채널: 이벤트를 임시로 보관 ● ○ 메모리 채널, 파일 채널, DB 채널 싱크: 채널에서 이벤트를 읽어와 출력 대상에 씀 ○ 싱크가 출력 대상에 이벤트(데이터)를 전달을 완료하 면, 채널에서 해당 이벤트를 삭제
  • 4. 에이전트 간 연결 에이전트 소스 Source 채널 Channel Avro Sink Avro/Thrift 를 이용해서 에이전트 간 이벤트 전 달 에이전트 Avro Source 채널 Channel 싱크 Sink
  • 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. 에이전트 설정: 파일 이용 # 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. Interceptor ● Source로 들어온 이벤트 수정 또는 버릴 때 사용 ○ Source로 들어온 이벤트는 interceptor를 거친 뒤에 채널에 전달 ● Interceptor의 종류 ○ Timestamp : 이벤트 헤더에 현재 시간 값 추가 ○ Static Interceptor : 이벤트 헤더에 지정한 값 추가 ○ Regex filtering interceptor : 정규 표현식에 일치하는 지 여부에 따라 이벤트를 버릴지 여부 결정 ● 한 개 이상 interceptor 적용 가능
  • 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. 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. 어플리케이션이 생성한 데이터를 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. 관련된 또는 비슷한 다른 기술 ● ● ● ● ● Logstash (로그 수집) Fluentd (로그 수집) Kafka (메시징) Storm (스트림 변환) …. 너무 많음