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) before creating data files with Flume, otherwise those files cannot be read by either Apache Impala (incubating) or Apache Hive. - 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
#定义三大组件的名称 # 配置source组件 # 配置sink组件 ##写入的时候的IO最大延时单位为毫秒,默认是10s,可以适当放大减少出现java.util.concurrent.TimeoutException异常 ag1.sinks.sink1.hdfs.callTimeout=100000 ## roll:滚动切换:控制写文件的切换规则 ## 控制生成目录的规则--目录多久变化一次 ag1.sinks.sink1.hdfs.useLocalTimeStamp = true ##按时间戳取时间 # channel组件配置(capacity与transactionCapacity两个值的差别不要过大,否则长期运行会产生中断传输的情况) ag1.channels.channel1.keep-alive = 30 # 绑定source、channel和sink之间的连接 |
### 运行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 nohup可以把原本在console输出的运行日志输出在nohup.out中
异常解决: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"