Flume 구성
graph LR;
A[Source]-->B[Interceptor];
B-->C[Channel];
C-->D[Sink];
- Source : 다양한 원천 시스템에서 데이터를로드
- Interceptor : 데이터 필터링 및 가공하는 컴포넌트(생략 가능)
- Channel : Source와 Sink를 연걸(임시저장)
- Memory channels : 데이터를 메모리 상에 중간 적재하므로 성능이 높지만 안전성이 낮음
- File Channels : 전송한 데이터를 받아 로컬 파일 시스템인 dataDirs에 임시로 저장했다가 전송. 성능은 낮지만 안전성이 높음
- Sink : Channel로 부터 받은 데이터를 최종 목적지에 적재
- agent : 위 전과정으로 구성된 작업단위로 독립된 인스턴스 생성
Flume 설치
1. flume 설치
1
2
3
sudo wget https://downloads.apache.org/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz
sudo tar -xzvf apache-flume-1.11.0-bin.tar.gz -C /usr/local
2. 환경설정
- ~/.bashrc
1 2 3
export FLUME_HOME=/usr/local/flume export PATH=$PATH:$FLUME_HOME/bin export CLASSPATH=$CLASSPATH:$FLUME_HOME/lib/*.jar
- $FLUME_HOME/conf/flume-env.sh
1
export JAVA_HOME=/usr/lib/jvm/java
3. 에이전트 생성
$FLUME_HOME/conf/flume-conf.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 플럼 에이전트에서 사용할 source, channels, sink 각 리소스 변수 정의
agent_name.sources = source_name
agent_name.sinks = sink_name
agent_name.channels = channel_name
# Source 타입 지정
- spooldir = 특정 디렉터리를 모니터링하다가 새로운 파일이 생기면 이벤트를 감지해서 batchsize 만큼 채널로 전송
- exec = 플럼 외부에서 수행한 명령의 결과를 플럼 Event 로 가져와 수집할 수 있는 기능 제공
# interceptor 추가
# Channel 지정
- memory = Source로부터 받은 데이터를 메모리 중간에 적재하므로 성능이 높지만 안전성이 낮음
- file = Source에서 전송한 데이터를 받아 로컬시스템 경로인 dataDirs에 임시 저장했다가 Sink로 전달. 성능은 낮지만 안전성이 높음
# 소스와 싱크를 채널에 바인딩
agent_name.sources.source_name.channels = channel_name
agent_name.sinks.sink_name.channels = channel_name
4. flume agent 실행
1
flume-ng agent --conf conf --conf-file ../conf/flume-conf-02.properties --name ServiceCarAgent -Dflume.root.logger=INFO, console
🛑 maven 사용시 제외시켜주면 된다고 하는데 maven을 사용하지 않아서 둘중에 하나 삭제했다. 다행히 잘 동작했다.
출처 및 참고자료
⌜실무로 배우는 빅데이터 기술⌟
tutorial