zoukankan      html  css  js  c++  java
  • Flume(二)【入门】

    一.安装部署

    下载安装包,解压,分发多节点

    1.安装地址

    (1) Flume官网:http://flume.apache.org/

    (2)文档查看:http://flume.apache.org/FlumeUserGuide.html

    (3)下载:http://archive.apache.org/dist/flume/

    2.安装步骤

    (1)将apache-flume-1.9.0-bin.tar.gz上传到linux的/opt/software目录下

    (2)解压apache-flume-1.9.0-bin.tar.gz到/opt/module/目录下

    tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/
    

    (3)修改apache-flume-1.9.0-bin的名称为flume

    mv /opt/module/apache-flume-1.9.0-bin /opt/module/flume
    

    (4)将lib文件夹下的guava-11.0.2.jar删除以兼容Hadoop 3.1.3,否则报错

    rm /opt/module/flume/lib/guava-11.0.2.jar
    

    二.入门案例

    1.官方案例(nestat->logger)

    需求:使用Flume监听一个端口,收集该端口数据,并打印到控制台。

    需求分析

    步骤

    1)安装netcat工具

    [atguigu@hadoop102 software]$ sudo yum install -y nc
    

    2)判断44444端口是否被占用

    [atguigu@hadoop102 flume-telnet]$ sudo netstat -tunlp | grep 44444
    

    3)创建Flume Agent配置文件flume-netcat-logger.conf

    在opt/modult/flume目录下创建job目录用来存放flume agent的配置文件,在job文件夹下创建flume-netcat-logger.conf。

    [atguigu@hadoop102 flume]$ mkdir job
    [atguigu@hadoop102 flume]$ cd job/
    [atguigu@hadoop102 job]$ vim flume-netcat-logger.conf
    

    在flume-netcat-logger.conf添加如下内容

    添加内容如下:
    # 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
    

    注:配置文件来源于官方手册http://flume.apache.org/FlumeUserGuide.html

    配置文件解析

    4)先开启flume监听端口

    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console
    

    缩写形式

    [atguigu@hadoop102 flume]$ bin/flume-ng agent -c conf/ -n a1 -f job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console
    

    参数说明

    ​ --conf/-c:表示配置文件存储在conf/目录

    ​ --name/-n:表示给agent起名为a1

    ​ --conf-file/-f:flume本次启动读取的配置文件是在job文件夹下的flume-telnet.conf文件。

    ​ -Dflume.root.logger=INFO,console :-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error。

    5)使用netcat工具向本机的44444端口发送内容

    [atguigu@hadoop102 ~]$ nc localhost 44444
    hello 
    flume
    

    6)在Flume监听页面观察数据接收情况

    2.实时监控单个追加文件(exec->hdfs)

    需求:实时监控Hive日志,并上传到HDFS中

    需求分析

    步骤

    1)创建flume-file-hdfs.conf文件

    注:要想读取Linux系统中的文件,就得按照Linux命令的规则执行命令。由于Hive日志在Linux系统中所以读取文件的类型选择:exec即execute执行的意思。表示执行Linux命令来读取文件。

    添加一下内容:

    # Name the components on this agent
    a2.sources = r2
    a2.sinks = k2
    a2.channels = c2
    
    # Describe/configure the source
    a2.sources.r2.type = exec
    a2.sources.r2.command = tail -F /opt/module/hive/logs/hive.log
    a2.sources.r2.shell = /bin/bash -c
    
    # Describe the sink
    a2.sinks.k2.type = hdfs
    a2.sinks.k2.hdfs.path = hdfs://hadoop102:9820/flume/%Y%m%d/%H
    #上传文件的前缀
    a2.sinks.k2.hdfs.filePrefix = logs-
    #是否对时间戳取整
    a2.sinks.k2.hdfs.round = true
    #多少时间单位创建一个新的文件夹
    a2.sinks.k2.hdfs.roundValue = 1
    #重新定义时间单位
    a2.sinks.k2.hdfs.roundUnit = hour
    #是否使用本地时间戳
    a2.sinks.k2.hdfs.useLocalTimeStamp = true
    #积攒多少个Event才flush到HDFS一次
    a2.sinks.k2.hdfs.batchSize = 100
    #设置文件类型,可支持压缩
    a2.sinks.k2.hdfs.fileType = DataStream
    #多久生成一个新的文件
    a2.sinks.k2.hdfs.rollInterval = 60
    #设置每个文件的滚动大小
    a2.sinks.k2.hdfs.rollSize = 134217700
    #文件的滚动与Event数量无关
    a2.sinks.k2.hdfs.rollCount = 0
    
    # Use a channel which buffers events in memory
    a2.channels.c2.type = memory
    a2.channels.c2.capacity = 1000
    a2.channels.c2.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a2.sources.r2.channels = c2
    a2.sinks.k2.channel = c2
    

    配置文件解析

    2)运行Flume agent

    [atguigu@hadoop102 flume]$ bin/flume-ng agent -c conf/ --n a2 -f  job/flume-file-hdfs.conf
    

    3)启动hdfs集群和hive

    [atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
    [atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
    [atguigu@hadoop102 hive]$ bin/hive
    hive (default)>
    

    4)查看hdfs的上文件

    3.实时监控目录下多个新文件(spooldir->hdfs)

    案例需求:使用Flume监听整个目录的文件,并上传至HDFS

    需求分析

    步骤

    1)创建配置文件flume-dir-hdfs.conf

    添加一下内容

    a3.sources = r3
    a3.sinks = k3
    a3.channels = c3
    
    # Describe/configure the source
    a3.sources.r3.type = spooldir
    a3.sources.r3.spoolDir = /opt/module/testdata
    a3.sources.r3.fileSuffix = .COMPLETED
    a3.sources.r3.fileHeader = true
    #忽略所有以.tmp结尾的文件,不上传
    a3.sources.r3.ignorePattern = ([^ ]*.tmp)
    
    # Describe the sink
    a3.sinks.k3.type = hdfs
    a3.sinks.k3.hdfs.path = hdfs://hadoop102:9820/flume/upload/%Y%m%d/%H
    #上传文件的前缀
    a3.sinks.k3.hdfs.filePrefix = upload-
    #是否按照时间滚动文件夹
    a3.sinks.k3.hdfs.round = true
    #多少时间单位创建一个新的文件夹
    a3.sinks.k3.hdfs.roundValue = 1
    #重新定义时间单位
    a3.sinks.k3.hdfs.roundUnit = hour
    #是否使用本地时间戳
    a3.sinks.k3.hdfs.useLocalTimeStamp = true
    #积攒多少个Event才flush到HDFS一次
    a3.sinks.k3.hdfs.batchSize = 100
    #设置文件类型,可支持压缩
    a3.sinks.k3.hdfs.fileType = DataStream
    #多久生成一个新的文件
    a3.sinks.k3.hdfs.rollInterval = 60
    #设置每个文件的滚动大小大概是128M
    a3.sinks.k3.hdfs.rollSize = 134217700
    #文件的滚动与Event数量无关
    a3.sinks.k3.hdfs.rollCount = 0
    
    # Use a channel which buffers events in memory
    a3.channels.c3.type = memory
    a3.channels.c3.capacity = 1000
    a3.channels.c3.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a3.sources.r3.channels = c3
    a3.sinks.k3.channel = c3
    

    配置文件解析

    2)启动监控文件夹命令

    [atguigu@hadoop102 flume]$ bin/flume-ng agent -c conf/ -n a3 -f job/flume-dir-hdfs.conf
    

    3)向testdata文件夹中添加文件

    观察文件名

    4)查看hdfs上数据

    注意

    1. 在监控目录下的文件修改文件名的会,会再次上传,所以不要持续改动
      2)上传成功后文件会以.complted结尾,
      3)同名文件上传两次会导致任务挂掉,第二次的文件不会上传,需要删除第二次的同名文件

    4.实时监控目录下的多个追加文件(Taildir->hdfs)

    ​ Exec source适用于监控一个实时追加的文件,不能实现断点续传;Spooldir Source适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步;而Taildir Source适合用于监听多个实时追加的文件,并且能够实现断点续传

    案例需求:使用Flume监听整个目录的实时追加文件,并上传至HDFS

    需求分析

    步骤

    1)创建配置文件flume-taildir-hdfs.conf

    添加一下内容:

    # Name the components on this agent
    a4.sources = r3
    a4.sinks = k3
    a4.channels = c3
    
    # Describe/configure the source
    a4.sources.r3.type = TAILDIR
    a4.sources.r3.positionFile = /opt/module/flume/tail_dir.json
    a4.sources.r3.filegroups = f1 f2
    a4.sources.r3.filegroups.f1 = /opt/module/flume/files/.*file.*
    a4.sources.r3.filegroups.f2 = /opt/module/flume/files/.*log.*
    
    # Describe the sink
    a4.sinks.k3.type = hdfs
    a4.sinks.k3.hdfs.path = hdfs://hadoop102:9820/flume/upload2/%Y%m%d/%H
    #上传文件的前缀
    a4.sinks.k3.hdfs.filePrefix = upload-
    #是否按照时间滚动文件夹
    a4.sinks.k3.hdfs.round = true
    #多少时间单位创建一个新的文件夹
    a4.sinks.k3.hdfs.roundValue = 1
    #重新定义时间单位
    a4.sinks.k3.hdfs.roundUnit = hour
    #是否使用本地时间戳
    a4.sinks.k3.hdfs.useLocalTimeStamp = true
    #积攒多少个Event才flush到HDFS一次
    a4.sinks.k3.hdfs.batchSize = 100
    #设置文件类型,可支持压缩
    a4.sinks.k3.hdfs.fileType = DataStream
    #多久生成一个新的文件
    a4.sinks.k3.hdfs.rollInterval = 60
    #设置每个文件的滚动大小大概是128M
    a4.sinks.k3.hdfs.rollSize = 134217700
    #文件的滚动与Event数量无关
    a4.sinks.k3.hdfs.rollCount = 0
    
    # Use a channel which buffers events in memory
    a4.channels.c3.type = memory
    a4.channels.c3.capacity = 1000
    a4.channels.c3.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a4.sources.r3.channels = c3
    a4.sinks.k3.channel = c3
    

    配置文件解析

    2)启动监控文件夹命令

    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a3 --conf-file job/flume-taildir-hdfs.conf
    

    3)向files文件夹追加内容

    在opt/module/flume创建files文件夹,添加文件

    [atguigu@hadoop102 flume]$ mkdir files
    [atguigu@hadoop102 files]$ echo hello >> file1.txt
    [atguigu@hadoop102 files]$ echo atguigu >> file2.txt
    

    4)查看hdfs

    Taildir

    Taildir Source维护了一个json格式的position File,其会定期的往position File中更新每个文件读取到的最新的位置,因此能够实现断点续传。Position File的格式如下:
    

    {"inode":2496272,"pos":12,"file":"/opt/module/flume/files/file1.txt"}

    {"inode":2496275,"pos":12,"file":"/opt/module/flume/files/file2.txt"}

    注:Linux中储存文件元数据的区域就叫做inode,每个inode都有一个号码,操作系统用inode号码来识别不同的文件,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。

    三.FAQ

    1.注意hdfs的端口,ip别配置错误否则导致连接异常

    2.注意flume1.9的lib包的guava包可能和hadoop中的冲突,以高版本的为准

  • 相关阅读:
    MySQL基础之 逻辑运算符
    MySQL基础之 如何删除主键
    MySQL基础之 AUTO_INCREMENT
    MySQL基础之 支持的数据类型
    TiDB数据库集群安装以及注意事项
    PgSQL基础之 pgsql与mysql的简单区别
    PgSQL基础之 安装postgresql数据系统
    SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-003-示例项目用到的类及配置文件
    SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-002-Controller的requestMapping、model
    SPRING IN ACTION 第4版笔记-第五章Building Spring web applications-001-SpringMVC介绍
  • 原文地址:https://www.cnblogs.com/wh984763176/p/13233134.html
Copyright © 2011-2022 走看看