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

#定义三大组件的名称
 ag1.sources = source1
 ag1.sinks = sink1
 ag1.channels = channel1# 配置source组件
 ag1.sources.source1.type = spooldir    ##读取目录的source类型,只要出现新的文件,就读取
 ag1.sources.source1.spoolDir = /root/logs  ## 读取的目录
 ag1.sources.source1.fileSuffix=.FINISHED   ##文件后缀,给采集过的文件添加后缀名,默认为.COMPLETED
 #ag1.sources.source1.deletePolicy=immediate  ##删除已经采集过的文件,默认为never
 ag1.sources.source1.deserializer.maxLineLength=5120   ##单个事件中包含的最大字符,超出部分截断,放入下一个事件中# 配置sink组件
 ag1.sinks.sink1.type = hdfs
 ag1.sinks.sink1.hdfs.path =hdfs://hdp-01:9000/access_log/%y-%m-%d/%H-%M  ##放置文件的目录
 ag1.sinks.sink1.hdfs.filePrefix = app_log    ##放置文件的前缀  hdfs.inUsePrefix   正在写的文件的前缀
 ag1.sinks.sink1.hdfs.fileSuffix = .log       ##放置文件的后缀  hdfs.inUseSuffix      正在写的文件的后缀,默认为.tmp
 ag1.sinks.sink1.hdfs.batchSize= 100          ##按100条数据写入一次
 ag1.sinks.sink1.hdfs.fileType = DataStream   ##写入的文件和读取的文件类型保持一致
 ag1.sinks.sink1.hdfs.writeFormat =Text       ##写入的时候对应fileType##写入的时候的IO最大延时单位为毫秒,默认是10s,可以适当放大减少出现java.util.concurrent.TimeoutException异常
ag1.sinks.sink1.hdfs.callTimeout=100000  
## roll:滚动切换:控制写文件的切换规则
 ag1.sinks.sink1.hdfs.rollSize = 512000    ## 按文件体积(大小,字节)来切(停止写入,生成新的文件)500k
 ag1.sinks.sink1.hdfs.rollCount = 1000000  ## 按event条数切   写成0就不生效
 ag1.sinks.sink1.hdfs.rollInterval = 60    ## 创建的文件过了60s后正在写的文件停止,生成新的写入文件  写成0就不生效## 控制生成目录的规则--目录多久变化一次
 ag1.sinks.sink1.hdfs.round = true
 ag1.sinks.sink1.hdfs.roundValue = 10
 ag1.sinks.sink1.hdfs.roundUnit = minute   ##  second, minute or hour.ag1.sinks.sink1.hdfs.useLocalTimeStamp = true  ##按时间戳取时间
# channel组件配置(capacity与transactionCapacity两个值的差别不要过大,否则长期运行会产生中断传输的情况)
 ag1.channels.channel1.type = memory
 ag1.channels.channel1.capacity = 50000   ## event条数(暂时存储的最大even事件数目,实际应该大于sink的条数batchSize)
 ag1.channels.channel1.transactionCapacity = 30000  ##flume事务控制所需要的缓存容量30000条event(默认归纳的条数为100条)ag1.channels.channel1.keep-alive = 30
# 绑定source、channel和sink之间的连接
 ag1.sources.source1.channels = channel1
 ag1.sinks.sink1.channel = channel1

### 运行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"