zoukankan      html  css  js  c++  java
  • Hive入门--4.flume-数据收集工具

    Flume简介


      flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

      flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

    这里写图片描述

    Flume安装

    1. 解压 flume安装包到 /itcast/ 目录下


    tar -zxvf /*flume安装包*/ /itcast/

    2. 修改 flume配置文件:

    2.1 flume-env.sh

    修改文件名称:

    mv flume-env.sh.template flume-env.sh

    添加java_home,保证flume所使用的jdk和hdfs是一样的(可以使用 echo JAVA_HOME 查看当前机器所使用的javaHome所在路径)

    2.2 编写agent配置文件a4.conf

    定义agent名, source、channel、sink的名称


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

    具体定义source


    a4.sources.r1.type = spooldir #具体实现类是通过反射加载的
    a4.sources.r1.spoolDir = /root/logs #监听这个目录

    具体定义channel


    a4.channels.c1.type = memory #
    a4.channels.c1.capacity = 10000 #多少条数据进行一次发送
    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://ns1/flume/%Y%m%d #根据时间动态生成
    a4.sinks.k1.hdfs.filePrefix = events- #产生日志的前缀
    a4.sinks.k1.hdfs.fileType = DataStream #纯文本方式接收

    不按照条数生成文件


    a4.sinks.k1.hdfs.rollCount = 0 #多少条flush成1个文件

    HDFS上的文件达到128M时生成一个文件


    a4.sinks.k1.hdfs.rollSize = 134217728 #文件达到多大时flush成一个文件

    HDFS上的文件达到60秒生成一个文件


    a4.sinks.k1.hdfs.rollInterval = 60 #flush成一个文件的时间间隔

    组装source、channel、sink


    a4.sources.r1.channels = c1
    a4.sinks.k1.channel = c1

    3. 启动flume


    先切换到 /itcast/apache-flume-1.5.0-bin/ 目录下:

    输入命令:

    bin/flume-ng agent -n a4 -c conf -f conf a4.conf -Dflume.root.logger=INFO,console

    命令解释:

    这里写图片描述


    启动后有可能遇到如下的错误,这里一一列举出来,出错的童鞋对号入座:


    错误1:
    这里写图片描述

    解决:说明缺少jar包,拷贝 /itcast/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar/itcast/apache-flume-1.5.0-bin/lib/ 文件夹下

    使用scp命令:
    这里写图片描述


    错误2:
    这里写图片描述


    解决:说明缺少jar包,拷贝/itcast/hadoop-2.6.0/share/hadoop/common/lib/commons-configuration-.jar/itcast/apache-flume-1.5.0-bin/lib/文件夹下
    这里写图片描述


    错误3:
    这里写图片描述

    解决:将/itcast/hadoop-2.6.0/share/hadoop/common/lib/ hadoop-auth-2.6.0.jar拷贝到flume/lib目录下


    错误4:
    这里写图片描述

    解决:在 /root目录下创建logs目录 :mkdir /root/logs


    错误5:

    这里写图片描述


    解决:告知flume ns1的配置信息

    1)拷贝core-site.xml和 hdfs-site.xml到flume的conf目录下

    scp /itcast/hadoop-2.6.0/etc/hadoop/{core-site.xml, hdfs-site.xml}  
    
    192.168.1.204:/itcast/apache-flume-1.5.0-bin/conf

    2)修改/etc/hosts 文件,让该主机知道itcast01 和itcast02的IP地址

    添加itcast01 和itcast02 ip和主机名的映射

    3)拷贝hadoop-hdfs-2.6.0.jar

    这里写图片描述


    如果出现如下的内容并且显示在不断滚动,说明没问题了,flume启动成功!
    启动成功之后的样子应该是这样的:

    3.1 写入测试

    现在如果向 /root/logs 目录下丢进文件,flume则会将这个文件下的内容写入hdfs中

    先执行命令:

        bin/flume-ng agent -n a4 -c conf -f conf/a4.conf 
        -Dflume.root.logger=INFO,console

    启动flume之后,将日志文件 access_2013_05_30.log 放到 logs 文件夹下:
    这里写图片描述

    这里写图片描述
    通过网页查看hdfs,发现多了一个目录 /flume ,在这个目录下的文件有 20160618 ,说明文件是以时间命名的
    这里写图片描述
    /flume/20160618 这个文件夹下

    这里写图片描述

    问题:为什么生成的是3个文件,我写入的不是1个吗?而且这3个文件大小加起来刚好等于日志文件access_2013_05_30.log的大小


    原因:这里sink设置了每60秒滚动写入一次或者当缓冲区文件大小达到134217728字节(128M)时进行滚动写入。

    通过计算时间,写入总共花费几分钟,那势必第二个滚动选项是无法满足的,所以文件每60s的时候刚刚读入了一部分,接着就被写入hdfs中了。

    4.flume的另外一种配置


    source—exec
    channel—memory
    sink—logger


    启动方式和之前的一样,只是读入的配置文件不同:

    bin/flume-ng agent -n a2 -f /home/hadoop/a2.conf -c conf -Dflume.root.logger=INFO,console

    a2.conf配置文件:

    定义agent名, source、channel、sink的名称


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

    具体定义source


    a2.sources.r1.type = exec
    a2.sources.r1.command = tail -F /home/hadoop/a.log

    具体定义channel


    a2.channels.c1.type = memory
    a2.channels.c1.capacity = 1000
    a2.channels.c1.transactionCapacity = 100

    具体定义sink


    a2.sinks.k1.type = logger

    组装source、channel、sink


    a2.sources.r1.channels = c1
    a2.sinks.k1.channel = c1

    监控当有数据写入这个log文件中时,flume将这些数据采集并打印在控制台上
    a) 就像tail –F file 命令一样

        # echo 111111 >> log
        # echo 222222 >> log
        # echo 333333 >> log

    以阻塞形式打印,向log文件中追加记录
    这里写图片描述

    b) 以a2.conf配置文件运行flume
    将a2.conf文件拷贝到flume/conf 目录下
    在/root目录下创建文件log

    运行命令:

        bin/flume-ng agent -n a2 -f /itcast/apache-flume-1.5.0-bin/conf/a2.conf 
        -c conf -Dflume.root.logger=INFO,console
  • 相关阅读:
    数据分析之可反复与独立样本的T-Test分析
    朗朗上口的两幅对联
    mysql编码、数据表编码查看和改动总结
    2014-04-19编程之美初赛题目及答案解析
    测试集群模式安装实施Hadoop
    笔记:常用排序算法
    笔记:常用排序算法
    安装Redis并测试
    常见架构风格举例总结
    转载:PostgreSQL SQL的性能提升
  • 原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/5932839.html
Copyright © 2011-2022 走看看