아래와 같은 에러 발생 시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 18/02/05 17:49:00 INFO hdfs.BucketWriter: Creating hdfs://master:9000/input/flume/bird/FlumeData.1517815114643.tmp 18/02/05 17:49:00 INFO hdfs.BucketWriter: Closing hdfs://master:9000/input/flume/bird/FlumeData.1517815114643.tmp 18/02/05 17:49:00 INFO hdfs.BucketWriter: Renaming hdfs://master:9000/input/flume/bird/FlumeData.1517815114643.tmp to hdfs://master:9000/input/flume/bird/FlumeData.1517815114643 18/02/05 17:49:00 INFO hdfs.BucketWriter: Creating hdfs://master:9000/input/flume/bird/FlumeData.1517815114644.tmp 18/02/05 17:49:02 ERROR source.SequenceGeneratorSource: seqGenSrc source could not write to channel. org.apache.flume.ChannelException: Unable to put event on required channel: org.apache.flume.channel.MemoryChannel{name: memoryChannel} at org.apache.flume.channel.ChannelProcessor.processEvent(ChannelProcessor.java:275) at org.apache.flume.source.SequenceGeneratorSource.process(SequenceGeneratorSource.java:76) at org.apache.flume.source.PollableSourceRunner$PollingRunner.run(PollableSourceRunner.java:139) at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.flume.ChannelFullException: Space for commit to queue couldn't be acquired. Sinks are likely not keeping up with sources, or the buffer size is too tight at org.apache.flume.channel.MemoryChannel$MemoryTransaction.doCommit(MemoryChannel.java:130) at org.apache.flume.channel.BasicTransactionSemantics.commit(BasicTransactionSemantics.java:151) at org.apache.flume.channel.ChannelProcessor.processEvent(ChannelProcessor.java:267) ... 3 more 18/02/05 17:49:03 INFO hdfs.BucketWriter: Closing hdfs://master:9000/input/flume/bird/FlumeData.1517815114644.tmp 18/02/05 17:49:03 INFO hdfs.BucketWriter: Renaming hdfs://master:9000/input/flume/bird/FlumeData.1517815114644.tmp to hdfs://master:9000/input/flume/bird/FlumeData.1517815114644 | cs |
Sink가 Source의 전송 속도를 유지하지 못하거나 Buffer Size의 크기가 작아서 queue에 저장하기 위한 공간 확보를 하기 어렵다는 문제입니다.
초당 수용할 수 있는 건 수를 올리기 위해서 flume-conf.properties 파일의 적절한 조정이 필요할 듯합니다.
1. flume-conf.properties
1-1. flume-conf.properties 편집
1 2 | $ vi ./conf/flume-conf.properties | cs |
* 절대 경로: /usr/local/flume/conf/flume-conf.properties
1-2. 다음과 같이 channel의 속성값을 충분히 할당합니다.
1 2 3 | agent1.channels.memoryChannel.capacity = 1000 agent1.channels.memoryChannel.keep-alive = 60 | cs |
* capacity: 채널 안에 저장된 이벤트의 최대 수
* keep-alive: 이벤트의 추가 또는 삭제를 위해 설정하는 초 단위 timeout 값
2. flume-env.sh
2-1. flume-env.sh 편집
1 2 | $ vi ./conf/flume-env.sh | cs |
* 절대 경로: /usr/local/flume/conf/flume-env.sh
2-2. 다음과 같이 JAVA_OPTS 환경 변수의 메모리 설정값을 적절히 추가 및 조정합니다.
1 2 | export JAVA_OPTS="-Xms1024m -Xmx1024m" | cs |