flume 框架
flume 数据采集框架 和telnet相同,都是监听数据,采集数据
缺点:数据容易丢失,在机器死机就会丢失数据
是一个分布式的对日志进行海量数据收集框架。(就是把数据收集回来后加工下再发出去)
在hadoop0上部署一个flume agent(使用flume把数据从linux的文件夹上传到hdfs中)
总结:flume部署到每台服务器中去收集数据的,
--------------
配置文件如下
注明: (flume是单门采集数据的工具,不需要运行在hadoop之上,也不需要拷贝到子节点,之是在在安装flume机器上配置环境变量即可)
0. 配置环境变量 vim /etc/profile
export FLUME_HOME=/usr/local/work/flume
export PATH=.:$PATH:$FLUME_HOME/bin
之后: source /etc/profile
1.把apache-flume-1.4.0-bin.tar.gz和apache-flume-1.4.0-src.tar.gz在hadoop0上解压缩
解压: tar -zxvf apache-flume-1.4.0-bin.tar.gz
tar -zxvf apache-flume-1.4.0-src.tar.gz
重命名: mv apache-flume-1.4.0-bin flume
2.把解压缩后的apache-flume-1.4.0-src文件夹下的内容全部复制到apache-flume-1.4.0-bin文件夹中。(合并文件夹)
cp -rf apache-flume-1.4.0-src/* /usr/local/flume/ (命令要求中全是:10个都是 : y )
3.修改flume/conf 目录下的两个文件的名称(去掉文件的后缀),修改为:flume-env.sh 和 flume-conf.properties
查看:more flume-env.sh
其中在 vim flume-env.sh中设置了JAVA_HOME=/usr/local/jdk
保存退出
--------------------------------
命令行
[root@hadoop100 apache-1.4.0-bin]#hadoop fs -ls /
创建文件夹:
[root@hadoop100 apache-1.4.0-bin]#hadoop fs -mkdir /apache_logs
上传/apache_logs要有要分析的数据
hadoop fs -put /usr/local/haoma.dat /usr/local/flume/apache_logs
hadoop fs -put /usr/local/ziliao/date_2013_05_30.log /file/data20140302
(注意: 上传数据,data20140302就是新建的文件,装date_2013_05_30.log的内容的)
cmd下 hadoop0下删除日志:
删除hadoop上指定文件
hadoop fs –rm [文件地址]
hadoop fs –rm /user/t/ok.txt
删除hadoop上指定文件夹(包含子目录等)
hadoop fs –rm [目录地址]
hadoop fs –rmr /user/t
-------------------------------------------
4.1 在flume/conf目录下创建一个文件,叫做a1.conf,添加文件内容如下:
(或者 上传一个已经配置好的文件a1.conf 即可)
############################################################################################
简单例子:
配置 HDFS Sink时首先需要将
$HADOOP_HOME/hadoop-core-1.0.4.jar
和$HADOOP_HOME/lib/commons-configuration-1.6.jar
拷贝到$FLUME_HOME/lib/下
############################################################################################
地址栏输入:file:///C:/Users/Administrator/AppData/Local/Temp/Rar$EXa0.648/apache-flume-1.4.0-bin/docs/FlumeUserGuide.html#flume-sources
即可查看flume官方文档说明
=============================================================================================
#配置代理
#a1是一个代理名称,#a1 表示agent名称,s1是source的名称,sink1是sink的名称,c1是channel的名称
a1.sources = s1
a1.sinks = sink1
a1.channels = c1
#配置一个专用于从文件夹中读取数据的source
a1.sources.s1.type = spooldir #spooldir表示从文件夹读取数据
a1.sources.s1.spoolDir = /apache_logs #值apache_logs表示数据文件的目录
a1.sources.s1.fileSuffix=.abc #值.abc表示数据文件被处理完后,被重命名的文件名后缀
a1.sources.s1.channels = c1 #值c1表示source接收数据后送到的channel的名称
#配置一个专用于把输入写入到hdfs的sink
a1.sinks.sink1.type = hdfs #配置输出到HDFS中
a1.sinks.sink1.hdfs.path=hdfs://hadoop100:9000/apache_logs #值表示目的地
a4.sinks.k1.hdfs.filePrefix = events-
a4.sinks.k1.hdfs.rollCount = 0
a4.sinks.k1.hdfs.rollsize = 67108864
a4.sinks.k1.hdfs.rollInterval = 60
a1.sinks.sink1.hdfs.fileType=DataStream #值DataStream表示文件类型,不会被压缩
a1.sinks.sink1.hdfs.writeFormat=Text #针对DataStream,使用Text输出格式
a1.sinks.sink1.channel = c1 #值c1表示sink处理数据的来源
#配置一个内存中缓存处理的channel(寄存数据)
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000 (多大容量)
a1.channels.c1.transactionCapacity = 100 (写入次数)
--------------------------------------------------------
整理如下:
#定义agent名, source、channel、sink的名称
a4.sources = r1
a4.channels = c1
a4.sinks = k1
#具体定义source
a4.sources.r1.type = spooldir
a4.sources.r1.spoolDir = /usr/local/soft/logs #这路径是本地存放数据的位置
#具体定义channel
a4.channels.c1.type = memory
a4.channels.c1.capacity = 1000
a4.channels.c1.transactionCapacity = 100
a4.sources.r1.interceptors = i1
a4.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#具体定义sink
a4.sinks.k1.type = hdfs
a4.sinks.k1.hdfs.path = hdfs://master200:9000/flume/sms/%Y-%m-%d-%H:%M:%S #这是上传数据的内容位置,以时间来为数据文件命名
a4.sinks.k1.hdfs.filePrefix = events-
a4.sinks.k1.hdfs.rollCount = 0
a4.sinks.k1.hdfs.rollsize = 67108864
a4.sinks.k1.hdfs.rollInterval = 60
#######################
a4.sinks.k1.hdfs.fileType = DataStream #值DataStream表示文件类型,不会被压缩
#组装source、channel、sink
a4.sources.r1.channels = c1
a4.sinks.k1.channel = c1
--------------------------------
主节点机器上启动Flume : 在flume目录下执行:
启动Flume命令
bin/flume-ng agent -n a4 -c conf/ -f conf/flume.conf -Dflume.root.logger=INFO,console
# bin/flume-ng agent -n a4 -c conf/ -f conf/flume.conf -Xmx100m -Dflume.root.logger=INFO,console
要是执行不了,就重新启动hadoop :start-all.sh 再试试
#########################################################################################
见证效果 详解:
在命令行1窗口:启动上面flume命令之后,发现在运行状态下
(这时1窗口是监控本地.../logs有没有被存放进来数据,已被发现有数据存放时,就开始把数据按照路径上传到hdfs中),
这时 要另起一个命令行窗口2,在此开始上传数据(按照上面配置,来存放数据到logs里面,就被发现,这时窗口1就开始运行显示被上传数据信息),
这过程 就是flume的运行过程!
步骤一:窗口1命令行: 开启 bin/flume-ng agent -n a4 -c conf/ -f conf/flume.conf -Dflume.root.logger=INFO,console 开始监控logs有没有数据
步骤二:窗口2命令行:cp data2.dat /usr/local/work/logs 开始cp数据到logs
步骤三:查看窗口一显示数据变化(显示数据上传过程,即是成功!)
注意:
/usr/local/soft/logs #这路径是本地存放数据的位置
hdfs://master200:9000/flume/sms/%y-%m-%d #这是上传数据的内容位置,以时间来为数据文件命名
总结: 监控一个文件 窗口1命令: tail -F /文件 窗口2:命令: echo "1">>文件 在写窗口2时,窗口1就接收到窗口2的数据.
也可以监控一个端口
#########################################################################################
cmd下 hadoop0下删除日志
删除hadoop上指定文件
hadoop fs –rm [文件地址]
hadoop fs –rm /user/t/ok.txt
删除hadoop上指定文件夹(包含子目录等)
hadoop fs –rm [目录地址]
hadoop fs –rmr /user/t
cmd下操作 jconsole(电脑自带) 就打开java监视和管理控制台(ganglia,amban,hue等工具)
Ganglia是一个跨平台可扩展的,高 性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据存储和可 视化。它利用精心设计的数据结构和算法实现每节点间并发非常低的。它已移植到广泛的操作系统和处理器架构上,目前在世界各地成千上万的集群正在使用。
#测试flume安装配置是否成功
# Describe the source
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.bind = localhost
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
========================================================