flume1.8.0安装配置

记一次linux上安装配置flume1.8.0过程

1、安装jdk

需要1.6以上版本
参考文章 https://segmentfault.com/a/11...

2、下载flume

从官网下载压缩包:http://flume.apache.org/downl...
flume1.8.0安装配置

选择apache-flume-1.8.0-bin.tar.gz,选择镜像地址开始下载,如:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

3、解压并安装

  • 解压tar -zxvf apache-flume-1.8.0-bin.tar.gz
    flume1.8.0安装配置
  • 安装:mv apache-flume-1.8.0-bin /opt/flume-1.8.0(放到想要安装的目录下,目录名保存为flume-1.8.0,如/opt)
    flume1.8.0安装配置

4、配置

  • 修改配置文件:vi /opt/flume-1.8.0/conf/flume.conf
    flume1.8.0安装配置

    此配置文件,配置了两个source:s1和s2,一个channel,一个sink。s1监听目录/data/log目录,并把信息写入c1,s2监听本机所有ip(0.0.0.0)的80端口,信息也写入c1,k1从c1读取数据,写入flume的日志。

  • 配置文件说明:
配置项名称作用举例
agent1 flume节点名称,启动时通过参数命令-name指定
agent1.sources 监听的源,可以有多个,空格隔开即可,用于收集数据并发送到channel agent1.sources=s1 s2
agent1.channels 临时通道,可以有多个,空格隔开,存放source收集的数据,sink从这里读取数据 agent1.channels=c1
agent1.sinks 接收器,可以有多个,空格隔开,从channel读取数据,并发送给目标 (比如kafka 或者hdfs或者另一个flume) agent1.sinks=k1
agent.sources.s1.type 源的类型,s1是源名称,可以是目录、日志文件、或者监听端口等。 常用的source的类型包括avro、exec、netcat、spooldir和syslog等. 具体请参考官网http://flume.apache.org/Flume... agent.sources.s1.type=spooldir agent.sources.s2.type=avro
agent1.sources.s1.channels 监听数据要写入的channel名称 agent1.sources.s1.channels=c1
agent1.channels.c1.type 通道的类型,c1为通道名称,此处memory表示为常用的memory-channel, 同时也有其他类型的channel,如JDBC、file-channel、custom-channel等, 具体请参考官网http://flume.apache.org/Flume... agent1.channels.c1.type=memory
agent1.sinks.k1.type 接收器类型,k1为接收器名称,此处logger表示直接写入日志, 常用的包括avro、logger、HDFS、Hbase以及file-roll等, 具体参考官网http://flume.apache.org/Flume... agent1.sinks.k1.type=logger

5、启动

/opt/flume-1.8.0/bin/flume-ng agent --conf conf --conf-file conf/flume.conf --name agent1 -Dflume.root.logger=INFO,console
  • 启动命令参数说明:
参数作用举例
–conf 或 -c 指定配置文件夹,包含flume-env.sh和log4j的配置文件 –conf conf
–conf-file 或 -f 配置文件地址 --conf-file conf/flume.conf
–name 或 -n agent(flume节点)名称 --name agent1

6、错误说明

  • 监听端口被占用:
    java.net.BindException:地址已在使用

    flume1.8.0安装配置


  • 接收协议与client发送数据协议不一致:

    flume1.8.0安装配置
    设置为avro 时,可能会出现这样的错误。比如:flume接收avro,client发送tcp,可把avro改为netcat
    flume1.8.0安装配置


  • sink读不到数据:

    若两个sink读取同一个c1   同一个消息,每次只有一个sink读取成功。
       channel 的内容只输出一次,同一个event 如果sink1 输出,sink2 不输出;如果sink1 输出,sink1 不输出。 
       最终 sink1+sink2=channel 中的数据
       ![clipboard.png](/img/bVX0Vf)

错误记录

1、Caused by: java.lang.NullPointerException:Excepted timestamp in the Flume event headers, but it was null...
flume1.8.0安装配置

  • 原因:
    写入到hdfs时使用到了时间戳来区分目录结构,flume的消息组件event在接受到之后在header中没有发现时间-戳参数,导致该错误发生
  • 解决办法:
    有三种解决办法:(重启生效)

    • 为source添加timestamp拦截器,没调event头中加入时间戳(效率会慢点)agent1.sources.source1.interceptors.t1.type=timestamp
    • 为sink使用本地时间戳agent1.sinks.sink1.hdfs.useLocalTimeStamp=true即可(如果客户端与flume集群时间不一致,数据时间会不准确)
    • 在想source发送event时,讲时间戳参数添加到event的header中即可,header是一个map,添加时mapkey为timestamp

2、org.apache.hadoop.security.AccessControlException: Permission denied: user=flume, access=WRITE, inode="/flume":hdfs:supergroup:drwxr-xr-xr...
flume1.8.0安装配置

  • 原因:
    flume用户没有hdfs读写权限,查看hdfs目录发现没有/flume:flume1.8.0安装配置
  • 解决办法:

    • 新建hdfs存储目录,如/flume (需要先su hdfs 否则没有权限)flume1.8.0安装配置
    • 授权:用户权限和读写权限
      flume1.8.0安装配置
      hadoop fs -chown -R flume:flume /flume
      hadoop fs -chmod -R 777 /flume

3、Configuration must specify a spooling derectory
flume1.8.0安装配置

  • 原因:
    spoolDir=/data/... spoolDir区分大小写

参考文章:http://blog.csdn.net/a921122/...

相关推荐