본문 바로가기

BigData/Flume4

Flume(TCP/AVRO source + Memory channel + logger sink) - Log4j로 연동하기 flume 설정 agent.sources = testSource agent.channels = testChannel agent.sinks = testSink # For each one of the sources, the type is defined agent.sources.testSource.type = syslogtcp agent.sources.testSource.host = 127.0.0.1 agent.sources.testSource.port = 9999 agent.sources.testSource.channels = testChannel # Each sink's type must be defined agent.sinks.testSink.type = logger agent.sinks.testSink.. 2016. 1. 20.
Flume RpcClient 사용기 Flume Avro 데이터를 전송하기 위한 방법은 몇가지가 있으나, 보통 쉬운 log4j appender 를 이용하는 것으로 알고 있다. log4j appender 의 경우 flume-ng-sdk.jar 에서 제공되기 때문에 log4j 설정만 하면되는 간편함이 있다. 하지만 log4j 특성상 전송되는 Event 에 Header에 데이터를 포함해서 전송할 수 없다. 만약 Flume 으로 데이터 전송시 Header 에 원하는 데이터를 전달할 수 있다면, Multiplexing 설정을 통해 좀 더 General 한 source-channel-sink 구조를 만들 수 있을 것이라 생각했다. 이를 위해서 Flume 에서 제공되는 것이 RpcClient 클래스이다. Flume 1.6.0(최신버전 at 2016/01.. 2016. 1. 20.
Custom Sink 만들어보기 Flume Custom Sink로 Mongo Sink를 한 번 만들어보자. 1. 단일 건별 Sink 처리 public class MongoSingleSink extends AbstractSink implements Configurable { private static final Log LOG = LogFactory.getLog(MongoSingleSink.class); private String host; private int port; private String dbName; private Mongo mongo; private DB db; @Override public synchronized void start() { try { mongo = new MongoClient(host, port); db =.. 2015. 5. 12.
flume multi sink 설정하기 단일 싱크 구조는 아래와 같다. 하나의 source와 channel, sink를 가지는 구조이다. 위 그림에서는 Flume을 이용하여 MongoDB에 저장하는 구조이다. 여기서 하나의 Event에 대해 2군데 데이터를 전송하려면 어떻게 해야할까? 예를 들어 하나의 Event를 보냈을 때, MongoDB에도 저장하고 HDFS 에도 저장하려고 한다. 2개의 sink를 연결해 볼 수 있다. 이 경우에는 Event 정보가 MongoDB나 HDFS 둘 중에 하나만 저장이 된다. 어떤 Sink가 선택이 되는지는 알 수 없으나, 설정상 나중에 연결된 sink 부터 전달되는 듯 하다. 테스트를 해보면 위 경우 HDFS Sink를 먼저 시도한다. 이 때 HDFS sink에 실패한다면 Mongo Sink를 시도한다 이는 .. 2015. 4. 14.