본문 바로가기

TECH DOC

Flume Installation exec-avro-hdfs v1.0

FLUME exec-avro-hdfs Installation

 

 

1.     Flume

Flume 은 수로라는 뜻이다. 더불어 한국에서 말하는 후룸라이드는 flume ride 로 수로(?) 에서 타는 놀이기구이다.

 

Flume 은 데이터를 수집하는 목적으로 사용된다.

이와 관련해 flow 를 컨트롤 할 수 있고, fan in , fan out 을 지원한다.

 

flow 를 컨트롤한다란 부분은 selector 를 사용하여 정보를 보낼 타겟을 지정할 수 있다.

 

fan-in n:1 로의 플로우를 의미하며 fan-out 1:n 의 플로우 (멀티플렉싱) 을 말한다.

 

2.     Parameters for Flume

Flume 은 다음의 3가지 필수 요소로 기술된다.

 

l  sources

l  channels

l  sinks

 

Sources 는 말 그대로 수집할 정보의 원천에 대해 기술한다.

Channels 은 수집한 정보를 어떤 방법으로 넘길 것인가에 대한 내용을 말한다.

Sinks 는 넘겨 받은 데이터를 어떤 형태로 남길 것인가에 대한 내용이다.

 

3.     Inatallation

여기서는 1.5.0.1 binary 버전을 사용하였다.

 

flume.apache.org/download.html

 

위 경로에서 파일을 다운 받아 압축을 푼다.

 

cd conf

 

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

 

새로이 복제 된 파일을 열면 JAVA_HOME FLUME_CLASSPATH 를 지정할 수 있다.

사용자 환경에 맞는 값을 셋팅한다.

 

JAVA_HOME=/usr/java/jdk6-1.6.0

 

FLUME_CLASSPATH=/root/apache-flume-1.5.0.1-bin/conf

 

4.     Configuration

2 과정을 마치면 남은 건 flume.conf 구성이다.

 

여기서는 데이터를 수집하는 source 측과 데이터를 적재하는 target 으로 구성하였다.

 

source configuration

 

a1.sources = a1

a1.sources.a1.type = exec

a1.sources.a1.command = tail -F /log/weblogics/bizapiServer1/access.log

a1.sources.a1.channels = fc

a1.sources.a1.logStdErr = true

a1.sources.a1.restart = true

a1.sources.a1.encoding = euc-kr

 

a1.channels = fc

a1.channels.fc.type = file

 

a1.sinks = s1

a1.sinks.s1.type = avro

a1.sinks.s1.hostname = 113.217.248.160

a1.sinks.s1.port = 4545

a1.sinks.s1.channel = fc

 

source a1 type exec 를 사용하였다.

exec OS 명령어 tail 을 사용하는 것으로 실시간(?) 캡쳐가 가능하다.

 

sinks s1 type avro 이다.

avro agent agent 를 연결하는데 사용해야 한다.

 

 

target configuration

 

s1.sources = c1

s1.sources.c1.type = avro

s1.sources.c1.bind = db2

s1.sources.c1.port = 4545

s1.sources.c1.channels = fc

 

s1.channels = fc

s1.channels.fc.type = file

 

s1.sinks = HDFS

s1.sinks.HDFS.channel = fc

s1.sinks.HDFS.type = hdfs

s1.sinks.HDFS.hdfs.useLocalTimeStamp=true

s1.sinks.HDFS.hdfs.path = hdfs://db2:8020/user/flume/%Y/%m/%d/%H/

s1.sinks.HDFS.hdfs.filePrefix=FlumeData

s1.sinks.HDFS.hdfs.rollInterval = 300

s1.sinks.HDFS.hdfs.rollSize = 0

s1.sinks.HDFS.hdfs.rollCount = 0

s1.sinks.HDFS.hdfs.fileType = DataStream

 

target 에서 데이터를 적재할 수 있는 위치 지정이 가능하다.

 

rollover 하는 로그로 적재할 수도 있으며, 위에서는 hdfs 를 지정하였다.

 

rollSize, rollCount 0 으로 가져가고 rollinterval = 300 을 준 뜻은 파일을 새로이 사용하는 것을

순전히 시간 베이스로 가져가겠다는 뜻이다.

 

다시 말해 사이즈와 건 수 (rows) 관계없이 5분단위로 새로운 파일이 만들어진다.

 

5.     Startup & Shutdown

Startup target 을 먼저 하고 다음 source 를 올린다.

 

nohup ./bin/flume-ng agent --conf ./conf/ -f conf/flume.conf -Dflume.root.logger=DEBUG,console -n a1 &

 

로그를 남기겠다면 출력 리다이렉션을 하면 된다.

 

-n 옵션은 agent 이름을 의미한다.

위 명령문은 a1 을 사용했는데 이는 source agent 이름이다.

target 측에서 수행하기 위해서는 s1 을 지정하면 된다.

 

6.     Limitations of exec

ExecSource (exec) event channel 에 넣었는지 보장하질 못 한다. 이 경우 그 데이터는 유실 된다.

가장 많은 케이스로는 tail F 와 연관 된 이슈들이다. (이를 테면 파일 리네임이나 rollover)

또 데이터 전송을 위한 채널의 큐가 가득 차도 유실될 수 있다.

 

보다 높은 안정성을 찾는다면 Spooling Directory Source SDK (with Flume) 개발을 권한다.