1 埋点程序把数据 以url的方式提交给nginx服务器
2 nginx服务器把日志信息(文本文件)保存到本地硬盘
3 flume,安装中nginx上通过主动方式读取日志信息,源为本地磁盘,目的地为hdfs
4 在ide上运行数据清洗程序把,数据提交到hbase数据库
5 使用mr程序对hbase的数据进行处理,存放到mysql中
6 使用hive创建外部表,关联到hbase中到数据,通过hql语句保存结果到hive中(实质是hdfs上)
7 通过sqoop工具把hive中的数据导入mysql中
Flume是分布式的日志采集、聚合和传输的系统。
1 Flume支持在日志系统中定制各类数据发送方和接收方。
2 当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。
source: 数据的源头
channel: 数据的通道
sink:可以理解为数据的目的地
每个flume为一个agent
一般很少使用单个agent,一般使用两层架构,一个flume连接多个flume
配置过程
1 解压flume: apache-flume-1.6.0-bin
2 在flume的env.sh中添加java_home
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
3 在profile文件中添加flume的环境变量
export FLUME_HOME=/usr/local/flume/apache-flume-1.6.0-bin/
export PATH=$PATH:$FLUME_HOME/bin
记得一定要source /etc/profile文件
4 查看是否安装成功
5配置文件
配置文件在conf中有个conf.temple模板
cp一份到任意目录,开始配置吧
# example.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
#a1.sources.r1.type = spooldir
a1.sources.r1.type = exec
a1.sources.r1.command = cat /root/mylog/access2.log
#a1.sources.r1.spoolDir=/root/mylog/
#使用spool也一样,它会读取目录下的所有文件
# Describe the sink
#目的为hdfs,也可以为logger什么的
a1.sinks.k1.type = hdfs
#以一天为一个目录
a1.sinks.k1.hdfs.path = hdfs://node1:8020/flume/datas/%Y-%m-%d/
#这两句必须合起来写
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#每个文件的大小为30240
#这个三个roll是一组,一旦满足一个条件就合并文件,0为该项失效
a1.sinks.k1.hdfs.rollSize = 30240 -- 大小 字节
a1.sinks.k1.hdfs.rollInterval = 0 -- 时间 s,每多少s 创建一个文件(好像是这样的)
#基于event数量进行文件滚动。默认是10,即event个数达到10时进行文件滚动
a1.sinks.k1.hdfs.rollCount = 0 --
#这种策略很简单,如果文件在hdfs.idleTimeout秒的时间里都是闲置的,没有任何数据写入,那么当前文件关闭,滚动到下一个文件(去掉.tmp后缀)。
a1.sinks.k1.hdfs.idleTimeout =0
#输出的格式
a1.sinks.k1.hdfs.fileType=DataStream
# 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
source分为主动和被动源,本次使用的是主动源,如exec
被动源如JMS
如果sink为hdfs,那么必须在flume的服务器上有hadoop
使用命令:
bin/flume-ng agent --conf conf目录 --conf-file flume配置文件 --name a1(默认a1和配置文件中需相同) -Dflume.root.logger=INFO,console