1 调整jvm参数
修改conf下flume-env.sh
-Xms -Xmx参数,具体根据机器内存分配
CDH中的我修改的是,将这个参数修改了下:
Agent 的 Java 堆栈大小(字节)1g
用ps -ef | grep pid查看
flume 29416 3102 26 12:02 ? 00:00:14 /usr/local/java/jdk1.8/bin/java -Xmx20m -Djava.net.preferIPv4Stack=true -Duser.home=/var/lib/flume-ng -Xms1073741824 -Xmx1073741824 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/flume_flume-AGENT-990e88397d411fad12ae8a7251c28b37_pid29416.hprof -XX:OnOutOfMemoryError=/usr/local/cm5/cm-5.13.0/lib64/cmf/service/common/killparent.sh -Dflume.monitoring.type=HTTP -Dflume.monitoring.port=41414 -cp /usr/local/cm5/cm-5.13.0/run/cloudera-scm-agent/process/3
2 调整channel的容量
中间出现了错误信息
Space for commit to queue couldn't be acquired. Sinks are likely not keeping up with sources, or the buffer size is too tight
解决办法:
将capacity transactionCapacity调大,之前是10000 100 现在调整成100000 1000
注意transactionCapacity的值必须大于sink的batchSize
3 调整sink的batchSize
这个在2中已经说明,注意与transactionCapacity的值
另外hdfsSink出现错误
java.lang.InterruptedException: Timed out before HDFS call was made. Your hdfs.callTimeout might be set too low or HDFS calls are taking too long.
解决办法:
master0.sinks.h1.hdfs.callTimeout=30000
master0.sinks.h1.hdfs.batchSize=1000
调整hdfs的callTimeout
下面是别人的总结可供借鉴:
fllume经常被用在生产环境中收集后端产生的日志。一个flume进程就是一个Agent。要充分发挥flume的性能最主要的是要调好flume的配置参数。
flume agent配置分为三部分:Source, Channel,Sink. Soure用来接收数据源的数据并放到channel里里面。Channel用来缓存Source放入的数据。Sink用来从channel中取出缓存的数据,并写到下个Agent的Source、数据库、文件系统、kafka等。以下分成Source, Channel,Sink三部分讲flume性能调优要点。
1. Source
增加Source个(使用Tair Dir Source时可增加filegroups个数)可以增大Soure的读取数据的能力。例如:当某一个目录产生的文件过多时需要将这个文件目录拆分成多个文件目录,同时配置好多个Source 以保证Soure有足够的能力获取到新产生的数据。
batchSize参数决定Source一次批量运输到Channel的event条数,适当调大这个参数可以提高Soure搬运Event到Channel时的性能。
2. Channel
type 选择memory 时Channel的性能最好,但是如果flume进程意外挂掉可能会丢失数据。type选择file时Channel的容错性更好,但是性能上会比memory channel差。
使用file Channel时dataDirs配置多个不同盘下的目录可以提高性能。
capacity 参数决定Channel可容纳最大的event条数。transactionCapacity 参数决定每次Source往channel里面写的最大event条数和每次Sink从channel里面读的最大event条数。transactionCapacity需要大于Source和Sink的batchSize参数。
3. Sink
增加Sink的个数可以增加Sink消费event的能力。Sink也不是越多越好够用就行,过多的Sink会占用系统资源,造成系统资源不必要的浪费。
batchSize参数决定Sink一次批量从Channel读取的event条数,适当调大这个参数可以提高Sink从Channel搬出event的性能。