flume 安装配置一(采集目录中的新文件到HDFS)

29 篇文章 0 订阅
2 篇文章 0 订阅

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 SourcesFlume SinksFlume 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.writeFormatWritable(对应默认写入类型)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

#定义三大组件的名称
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-ngflume-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"

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值