记得在linux上安装配置flume1.8.0流程1.安装jdk1.6以上版本。参考文章https://segmentfault.com/a/11...2.下载flume官网下载压缩包:http://flume.apache.org/downl...选择apache-flume-1.8.0-bin.tar.gz,选择镜像地址开始下载,如:wgethttp://mirrors.tuna.tsinghua。edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz3、解压安装decompresstar-zxvfapache-flume-1.8.0-bin.tar.gz安装:mvapache-flume-1.8.0-bin/opt/flume-1.8.0(放在你要安装的目录下,目录名保存为flume-1.8.0,如/opt)4、配置修改配置文件:vi/opt/flume-1.8.0/conf/flume.conf这个配置文件配置了两个source:s1和s2,一个channel和一个sink。s1监听/data/log目录并向c1写入信息,s2监听本机所有ip(0.0.0.0)的80端口,向c1写入信息,k1从c1读取数据写入flume日志。配置文件说明:配置项名称的作用是agent1水槽节点名称的例子。启动时使用参数命令-name指定agent1.sources监听的源。可以有多个,用空格隔开,用于收集数据,发送给channelagent1。sources=s1s2agent1.channels可以有多个临时channel,用空格隔开,存放source收集的数据,sink从这里读取数据agent1.channels=c1agent1.sinksReceiver,可以有多个,隔开通过spaces,从channel中读取数据发送到target(比如kafka或者hdfs或者其他flume)agent1.sinks=k1agent.sources.s1.typesource的类型,s1是source的名称,其中可以是目录、日志文件或监听端口等。常用的源类型包括avro、exec、netcat、spooldir和syslog。具体可以参考官网http://flume.apache.org/Flume...agent.sources.s1.type=spooldiragent.sources.s2。type=avroagent1.sources.s1.channels要写入监控数据的通道名称agent1.sources.s1.channels=c1agent1.channels.c1.type通道类型,c1为通道名称,其中memory常用的是memory-channel,还有其他类型的channel,比如JDBC、file-channel、custom-channel等,具体可以参考官网http://flume.apache.org/Flume...agent1.channels.c1.type=memoryagent1.sinks.k1.typeReceiver类型,k1为receiver名称,其中logger表示直接写入日志,常用的有avro、logger、HDFS、Hbase等file-roll等,具体参考官网http://flume.apache.org/Flume...agent1.sinks.k1.type=logger5.启动/opt/flume-1.8.0/bin/flume-ngagent--confconf--conf-fileconf/flume.conf--nameagent1-Dflume.root.logger=INFO,控制台启动命令参数说明:参数示例-conf或-c指定配置文件夹,包括flume-env.sh和log4j的配置文件-confconf-conf-file或-f配置文件address--conf-fileconf/flume.conf--nameor-nagent(flumenode)name--nameagent16.错误描述Thelisteningportisoccupied:java.net.BindException:Theaddressisalreadybeingsentwith客户端使用接收协议数据协议不一致:当设置为avro时,可能会出现此类错误。比如:flume接收avro,client发送tcp。可以将avro改成netcatsink无法读取数据:如果两个sink读取同一个c1,同一个message,每次只有一个sink读取成功。通道的内容只输出一次。同一个事件,如果sink1输出,sink2不输出;如果sink1输出,sink1不输出。sink1+sink2=channel错误记录1中的最终数据,Causedby:java.lang.NullPointerException:ExceptiondtimestampintheFlumeeventheaders,butitwasnull...原因:写入hdfs时,使用时间戳来区分目录结构。flume的消息组件事件收到后没有在header中找到timestamp参数,导致报错。解决方案:有3种方案:(重启生效)为source添加时间戳拦截器,不在事件头添加时间戳(效率会慢一些)agent1.sources.source1.interceptors.t1.type=timestamp使用本地timestampforsinkagent1.sinks.sink1.hdfs.useLocalTimeStamp=True(客户端与flume集群时间不一致会导致数据时间不准确)。向源发送事件时,只需将时间戳参数添加到事件的标头中。标题是一张地图。添加时,mapkey为timestamp2,org.apache.hadoop.security.AccessControlException:Permissiondenied:user=flume,access=WRITE,inode="/flume":hdfs:supergroup:drwxr-xr-xr...原因:flume用户没有hdfs读写权限,查看hdfs目录发现没有/flume:解决方法:新建一个hdfs存放目录,如/flume(需要先suhdfs,否则没有权限)授权:用户权限和读写权限hadoopfs-chown-Rflume:flume/flumehadoopfs-chmod-R777/flume3,ConfigurationmustspecifyaspoolingderectoryReason:spoolDir=/data/...spoolDiriscase-敏感参考文章:http://blog.csdn.net/a921122/...
