flume 框架

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

========================================================

发布了15 篇原创文章 · 获赞 0 · 访问量 242

猜你喜欢

转载自blog.csdn.net/u011521584/article/details/104633545