Flume的使用

版权声明:有一种生活不去经历不知其中艰辛,有一种艰辛不去体会,不会知道其中快乐,有一种快乐,没有拥有不知其中纯粹 https://blog.csdn.net/wwwzydcom/article/details/84339716

Flume

简介

  1. Flume提供分布式,可靠的,对大数据量的日志进行高效的收集,聚集,移动的服务,只能运行unix环境

  2. 基于流式架构,容错性强

  3. flume,kafka用来实时进行数据收集,spark,storm用来实时处理数据,impala用来实时查询

Flume角色

一个flume任务为一个agent

**Source:**用于采集数据,Source 产生数据流的地方,同时source会将产生的数据流 传输到Channel

**Channe:**用于桥接sources和sinks类似于队列

**Sink:**从Channel收集数据,将数据写到目标源(可以是下一个Source,HDFS,HBase,控制台)

**Event:**传输单元,flume数据传输的基本单元,以事件的形式将数据从源头送至目的地

传输流程

source监控某个文件或数据流,数据源产生新的数据,拿到数据后,将数据封装到Event中,并put到channel后commit提交,channel队列先进先出,sink去channel队列中拉取数据,然后写到HDFS中

数据传输70M/s以下是可靠的,20w-50w左右qps有效的

使用yum自定义安装

[root@note03 conf]# cat /etc/yum.conf 
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0

keepcahe=0 yum安装源文件,安装结束删除安装包,设置为1时,安装不删除源文件
cachedir:下载文件的目录

配置文件说明

a1表示一个agent的别名

起别名的作用:实例化

class Source{

}
Source s1 = new Source();
Channel  c1 = new Channel();

文件配置

a1.sources = r1
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type
数据源类型

a1.sources.r1.bind 
数据源ip

a1.sources.r1.port
数据源的端口

a1.sinks.k1.type
sink的类型  logger日志 hdfs

a1.sources.r1.channels = c1
Source和channel绑定一个source绑定多个channel
a1.sinks.k1.channel = c1
sink和channel绑定,channel没有s,因为一个channel只能绑定一个sink

Flume的部署以及使用

安装Telnet

文件配置:
flume-env.sh 配置JAVA_HOME

案例一:监控端口数据

目标:Flume 监控一端 Console,另一端 Console 发送消息,使被监控端实时显示。

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

判断 44444 端口是否被占用

netstat -tunlp | grep 44444

运行命令的解析:

flume-ng agent : 脚本 命令
–conf conf :配置文件类型
–name 这次agent的名称是什么 a1
–conf-file 配置文件的目录
-Dflume.root.loggerINFO,console:java的命令 loggerINFO的日志级别 console:控制台 输出

案例二:实时读取本地文件到HDFS上

// apache-flume-1.6.0-bin 版本jar包非必须

拷贝 Hadoop 相关 jar 到 到 Flume 的 lib 下

找jar包

[root@note03 hadoop-2.6.5]# find ./ -name "hadoop-auth*" 
./share/hadoop/tools/lib/hadoop-auth-2.6.5.jar
./share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/hadoop-auth-2.6.5.jar
./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/hadoop-auth-2.6.5.jar
./share/hadoop/common/lib/hadoop-auth-2.6.5.jar

拷贝

cp -a ./share/hadoop/tools/lib/hadoop-auth-2.6.5.jar /opt/module/apache-flume-1.6.0-bin/lib/

tail -f 查询实时文件出错了,不会重新查看
-F 查询实时文件出错了,会重新查看

联想java执行linux脚本

Runtime().getXXX.exec("cat ....")

避免集群内部脚本不一致

/bin/bash -c cat xxx.txt

hdfs.rollInterval 时间 配置文件的合并大小 大小为秒,根据实时业务计算,实时的每秒数据量大小 尽量配置127M

hdfs.rollSize 滚动文件大小

hdfs.rollCount 数据的个数

hdfs.batchSize 缓存文件的大小个数

hdfs-minBlockReplicas:flume的备份数,因为hdfs本身具有备份功能,所以设置为0

猜你喜欢

转载自blog.csdn.net/wwwzydcom/article/details/84339716