카테고리 없음

FLUME 을 이용한 HADOOP 연동 테스트

라미로 2018. 4. 10. 05:15

* 이 포스팅은 FLUME 을 이용해 HDFS에 저장하는 샘플까지만 다룬다.

 

공식홈페이지는 심플하다.
https://flume.apache.org/

/* 설치 */
최신버전인 1.8을 설치

[root@localhost flume]# wget http://archive.apache.org/dist/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz
--2018-04-10 10:19:39--  http://archive.apache.org/dist/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz
Resolving archive.apache.org... 163.172.17.199
Connecting to archive.apache.org|163.172.17.199|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 58688757 (56M) [application/x-gzip]
Saving to: `apache-flume-1.8.0-bin.tar.gz'

100%[==============================================>] 58,688,757  7.03M/s   in 11s

2018-04-10 10:19:51 (4.94 MB/s) - `apache-flume-1.8.0-bin.tar.gz' saved [58688757/58688757]

 

압축을 풀고 디렉토리를 살펴보면 ng 라는 이름이 거의 다 붙어있는데,  1.x 대를 ng 라고 부른다고 한다.
[root@localhost bin]# ls
flume-ng  flume-ng.cmd  flume-ng.ps1

그리고 실행을 위해서는 JAVA  1.8 이상 버전이 필수로 설치가 되어야한다.


 

/* 테스트 */

샘플 설정을 만들어보자. 공식 홈페이지에 나와있는 예제이다.

vi conf/gold.conf

# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

 

 

실행
bin/flume-ng agent --conf conf --conf-file conf/gold.conf --name a1 -Dflume.root.logger=INFO,console

그리고 다른 콘솔을 열어 실행이 잘 되는지 확인 설정대로 44444 가 열려있음을 확인할수있다.


[root@localhost ~]# netstat -anp  | grep 44444
tcp        0      0 ::ffff:127.0.0.1:44444      :::*                        LISTEN      4429/java

 

아래와 같이 telnet을 이용해 로컬에 있는 44444 포트로 데이터를 보내면

[root@localhost ~]# telnet localhost 44444
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello
OK

 

아래와 같이 실행중인 데몬의 콘솔에 바로 찍히는것을 볼 수 있다. 

2018-04-10 12:04:48,509 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sin
oggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 48 65 6C 6C 6F 0D  Hello. }

 

 

 

/* HDFS 연동 */

- 하둡의 경우는 아래 포스팅에서 구축한 하둡 클러스터를 사용하였다.
http://lynnij.tistory.com/entry/HADOOP-27-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EA%B5%AC%EC%B6%95

 

설정파일을 조금 변형하였다. source는 그대로 netcat 형태로 받고,
sinks 의 type을 hdfs로 바꾸어주었다. 혹시  flume/webdata디렉토리가 없다면 hadoop fs 명령어를 통해 만들어 놓도록하자.

a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://192.168.192.10:9000/flume/webdata

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

 

실행과 테스트방법은 동일하다.
다만 이 방법을 통하면 하둡에 쌓인 데이터를 직접 확인이 가능하다.

[root@HADOOP1 bin]# ./hadoop fs -ls /flume/webdata
Found 2 items
-rw-r--r--   3 root supergroup        159 2018-04-10 13:48 /flume/webdata/FlumeData.1523335682689
-rw-r--r--   3 root supergroup        139 2018-04-10 13:49 /flume/webdata/FlumeData.1523335767751.tmp

 

 

진행하면서 이상하게 JAVA CLASSPATH 가 잘 잡히지 않아서,
java.lang.NoClassDefFoundError: org/apache/hadoop/io/SequenceFile$ 등의 예외가 났었다.
일단 하둡설치서버에 있는 jar 들을 flume의 lib 안에 넣어서 해결했지만, 근본적인 해결방법이 있을듯하다.