1 解压改名(所谓压缩:将相同的二进制用特定的二进制代替,减少数据量)
tar -zvxf apache-flume-1.8.0-bin.tar.gz
rm apache-flume-1.8.0-bin.tar.gz
mv apache-flume-1.8.0-bin/ flume-1.8.0
2 配置
官方文档:http://flume.apache.org/ 左侧目录栏中找到
- Documentation 选择用户文档
- Flume User Guide (unreleased version) 找到
- Configuration 对应可以查看Flume Sources、Flume Sinks、Flume Channels
- Flume Sinks:1 roll:滚动切换 2 Prefix:前缀 3 Suffix:后缀 4 Count:计数 5 Interval:间隔 6: Timeout:超时 7 inUse: 正在使用中 8 hdfs.batchSize 攒够多少条数据进行写入 9
hdfs.fileType | 写入文件的类型 | SequenceFile(序列化文件,key-value 默认的), DataStream(和读取的文件保持一致) or CompressedStream(压缩文件) |
hdfs.writeFormat | Writable(对应默认写入类型) | Format for sequence file records. One of Text or Writable. Set to Text(对应DataStream) |
- Flume中Memory Channel参数说明
capacity 在 channel 中 最多能保存多少个 event。默认是100
transactionCapacity 在每次从source中获取数据或者将数据sink出去的一次事务操作中,最多处理的 event 数。默认是100
byteCapacity 在 channel 中最多能容纳 所有event body的总字节数。默认是 JVM最大可用内存(-Xmx )的80% 。需要注意的是,如果你设置多个memory channel,并且它们的数据都是从同一个source来的,那么计算时是用所有channel中event body的字节数加起来计算的,也就是说会重复计算,所以需要注意一下。不建议将该值设置为0
byteCapacityBufferPercentage 这个值的含义跟上面一样,只不过这个是计算event header跟最大可用内存的字节占比。默认是20,也就是最大可用内存的20%
keep-alive 这个参数用来控制channel满时影响source的发送,channel空时影响sink的消费,就是等待时间,默认是3s,超过这个时间就甩异常,一般不需配置,但是有些情况很有用,比如你得场景是每分钟开头集中发一次数据,这时每分钟的开头量可能比较大,后面会越来越小,这时你可以调大这个参数,不至于出现channel满了得情况;
写flume的配置文件 vi /usr/local/flume-1.8.0
|
### 运行flume的shell :./flume-ng agent -c /home/hadoop/flume-1.8.0/conf/ -f ../conf/dir-hdfs.conf -n ag1 -Dflume.root.logger=INFO,console
例如:
tail_hdfs.conf-------为flume的配置文件
cd /home/hadoop/flume-1.8.0
bin/flume-ng agent -c conf -f conf/tail_hdfs.conf -n a1 -Dflume.root.logger=INFO,console---前台显示运行
-Dflume.root.logger=INFO,console 表示将运行日志输出到控制台。
bin/flume-ng agent -c conf -f conf/tail_hdfs.conf -n a1 &----后台运行
nohup bin/flume-ng agent -c conf -f conf/tail_hdfs.conf -n a1 1>/dev/null 2>&1 &
其中:bin/flume-ng是flume-1.8.0目录中的bin文件下的自带脚本,可以写全目录:/home/hadoop/flume-1.8.0/bin/flume-ng
agent -c conf -f 为固定写法(-c (--conf) : flume的conf文件路径。 -f (--conf-file) : 自定义的flume配置文件)
conf/tail_hdfs.conf是配置文件的目录,可以写全目录:/home/hadoop/flume-1.8.0/conf/XXXX.conf
-n a1 是配置文件中agent的名字( -n (--name): 自定义的flume配置文件中agent的name)为a1(要和配置文件中的a1.sources = r1保持一致)
1>/dev/null 2>&1是运行成功失败的返回值的路径:1>/dev/null 代表成功返回值输出到“黑洞”(不输出),2>&1代表失败返回值的路径和成功返回值的路径保持一致
& 代表后台运行
nohup
异常解决: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
报这个错误 需要一个是flume堆内存不够.还有一个就是把channel的容器调大,配置中添加keep-alive,调整文件切割导出的数据条数等配置。
配置
cd /usr/local/flume-1.8.0
cd conf/
cp flume-env.sh.template flume-env.sh
[root@sure conf]# vi flume-env.sh →/JAVA_HOME搜索
1. 去掉开头 #的注释
2. Jdk为服务器中jdk的路径 :
export JAVA_HOME=/usr/java/jdk1.8.0_144
3.JAVA_OPTS:设置flume启动agent时JVM分配的最小内存和最大内存(可能的情况下尽量设置的大一些,否则长期运行后容易卡死)
export JAVA_OPTS="-Xms1000m -Xmx2000m -Dcom.sun.management.jmxremote"
修改java最大内存大小
vi bin/flume-ng
JAVA_OPTS="-Xmx1024m"