Flume 설치 및 기본 설정, sink 테스트 - logger sink

2020. 4. 20. 22:05Development/[Dev] 개발일반

728x90

 

나중을 위해서라도 기본 환경에서 크게 벗어나지 않은 심플(하지 않지만..)버전의 플룸의 설치와 설정, sink를 기록해본다..

 

아래 전부는 mac 환경을 기준으로 하고 있다.

 

"1 소스 - 1채널 - 1싱크" 구조의 로컬 테스트를 위한 전체적인 셋팅 순서.

(1) flume 설치
(2) 맥 환경변수 설정 / flume 실행 스크립트 내의 변수 설정
(3) flume의 기본 설정파일을 복사해서 수정
(4) flume 실행
(5) "데이터 소스 연결" : 로컬 환경에서 flume쪽으로 정보를 전송해서 수신하는지 확인

 


(1)  flume 설치 - homebrew를 통해서 설치 

 

1) 홈브류(HomeBrew) 레파지토리 최신화

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

 

2) flume 설치

$ brew install flume

*. 이 과정에서 자바 jdk와 하둡이 설치됨 (Installing dependencies for flume: openjdk and hadoop)

 flume 디렉토리의 개략적 구조

 


(2) 맥 환경변수 설정 / flume 실행 스크립트 내의 변수 설정

1) 맥 환경변수 설정

*.FLUME_HOME 등 꼭 필요한 환경변수 들을 맥의 환경 변수에 설정해야 추후 정상 구동됨

 

$ vi ~/.bash_profile

export FLUME_VERSION=설치된버전명
export FLUME_HOME=/usr/local/Cellar/flume/설치된버전명/libexec
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$FLUME_HOME/bin:$PATH
------------------------------------------------------------
:wq!

 

$ source ~/.bash_profile

 

2) flume 실행 스크립트 내의 JAVA_HOME 변수 설정

*. 맥의 전역 환경변수에 자바 홈이 셋팅되어 있어도 여기에서 셋팅을 또 해야 오류가 발생하지 않는 듯..

 

$ cd $FLUME_HOME/conf

$ cp flume-env.sh.template flume-env.sh

$ vi flume-env.sh

# export JAVA_HOME=/usr/lib/jvm/java-8-oracle
부분을 찾아서 주석제거 및 실제 JAVA_HOME 으로 변경
-------------------------------------------
:wq!

 


(3) flume의 기본 설정파일을 복사해서 일부 수정

1) flume.conf 만들기 

$ cd $FLUME_HOME/conf

$ cp flume-conf.properties.template flume.conf

 

2) flume.conf 파일 수정

$ vi flume.conf

agent.source = seqGenSrc
agent.channels = hdfschannel
agent.sinks = loggerSink

agent.sources.seqGenSrc.type = seq
agent.sources.seqGenSrc.channels = hdfschannel

agent.sinks.loggerSink.type = logger
agent.sinks.loggerSink.channel = hdfschannel

agent.channels.hdfschannel.type = memory
agent.channels.hdfschannel.capacity = 100

-------------------------------------------------
:.,$d 또는 수정모드에서 gg dG 입력하여 기존 내용 전체 삭제 후..
:wq!

 

+ multiplexing 환경으로 구성시

더보기
agent.sources = source1
agent.sinks = mongoSink hdfsSink
agent.channels = mongoChannel hdfsChannel

agent.sources.source1.channels = mongoChannel hdfsChannel    

agent.sinks.mongoSink.channel = mongoChannel
agent.sinks.hdfsSink  .channel =hdfsChannel

agent.sources.source1.selector.type = multiplexing
agent.sources.source1.selector.header = status    
agent.sources.source1.selector.mapping.all = mongoChannel hdfsChannel 
agent.sources.source1.selector.mapping.mongo = mongoChannel
agent.sources.source1.selector.mapping.hdfs = hdfsChannel

+ kafkaSink로 구성시 (참조 www.flume.apache.org/FlumeUserGuide.html#kafka-source )

더보기
agent.sources  = source1
agent.channels = channel1
agent.sinks = sink1
 
agent.source1.k1.type = org.apache.flume.sink.kafka.KafkaSink
agent.source1.k1.kafka.topic = sentilab
agent.source1.k1.kafka.bootstrap.servers = data1:9092,data2:9092,data3:9092,data4:9092
agent.source1.k1.kafka.flumeBatchSize = 1000
agent.source1.k1.kafka.producer.acks = 1
agent.source1.k1.kafka.producer.linger.ms = 10
agent.source1.k1.channel = channel1 
agent.channels.channel1.type = memory

 


(4) flume 실행

$ $FLUME_HOME/bin/flume-ng agent -c conf/ --conf-file flume.conf --name agent -Dflume.root.logger=INFO,console

 

주의

*. 이미 conf 디렉토리에 위치해있다면 위의  flume.conf 부분을  flume.conf 으로 그대로 하고 다른 디렉토리이면 conf/flume.conf 또는 ./conf/flume.conf 으로해서 상대경로 주의

*. INFO node.Application: Starting Sink loggerSink


 


(5) "데이터 소스 연결" : 로컬 환경에서 flume쪽으로 정보를 전송해서 수신하는지 확인

1) 새로운 터미널 창에서 flume-conf-netcat.properties 만들기

 

$ cd $FLUME_HOME/conf

$ cp flume-conf.properties.template flume-conf-netcat.properties

 

 

2) flume-conf-netcat.properties 파일 수정

agent.sources = s1
agent.channels = c1
agent.sinks = k1

agent.sources.s1.type = netcat	
agent.sources.s1.bind = localhost
agent.sources.s1.port = 9090

agent.sources.s1.channels = c1

agent.sinks.k1.type = logger

agent.sinks.k1.channel = c1

agent.channels.c1.type = memory

-----------------------------------------
:.,$d 또는 수정모드에서 gg dG 입력하여 기존 내용 전체 삭제 후..
:wq!

 

3) flume-conf-netcat 파일 실행 - 서버 응답상태가 됨

 

$ $FLUME_HOME/bin/flume-ng agent -c conf/ --conf-file flume-conf-netcat.properties --name agent -Dflume.root.logger=INFO,console

 

주의 

*. 이미 conf 디렉토리에 위치해있다면 위의  flume-conf-netcat.properties  부분을  flume-conf-netcat.properties  으로 그대로 하고 다른 디렉토리이면 ./conf/flume-conf-netcat.properties 또는 /conf/flume-conf-netcat.properties 으로 상대경로 주의

*. 정상 구동시 : Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:9090]

 

4) 텔넷으로 정보 생성

1. telnet 설치

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

$ brew install telnet

 

2. 새로운 터미널창에서 telnet 실행 (여기까지 총 터미널 창이 3개(1. 플룸 2. 로그 싱크 3. 텔넷)가 됨)

$ telnet localhost 9090

Trying ::: 1…

telnet : connect to address::1: Connection refused

Trying 127.0.0.1 …

Connected to localhost.

Escape character is ‘^]’.

텍스트를 입력하고 엔터를 눌러보면 아래처럼 OK 문구가 나옴

OK

 

*. 위처럼 flume 실행 터미널에 문구를 작성하고 엔터를 눌렀다면

org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)} Event: { headers:{} body : .... } 이 출력됨

 

loggerSink 성공....어렵다..

 

플룸 설치시 들어있는 기본 설정 파일들과 복사등으로 신규 생성한 설정 파일들 (파란색)

728x90