前置

Sqoop的作用:
RDBMS <==> Hadoop (关系型数据库与Hadoop生态圈中的存储框架,结合Sqoop做导入导出操作)

在生产环境上,数据库中的文件是一部分,除此之外的文件与日志才是大头、对我们而言是十分重要的,但是会有如下的问题:

* 文件与日志是无法用Sqoop进行操作的
通常日志采集框架有:Flume、Logstash、Beat(这3个都可以进行收集,Beat更轻量级,主流还是Flume)

Flume概述 & 架构

概述

官网:http://flume.apache.org/ <http://flume.apache.org/>

官网介绍
Flume是一个分布式、可靠的、可用的服务
能够高效的去收集数据、聚合数据、移动数据
适用场景:处理大批量的log data(是一个日志收集的工具)
Flume是一个简单的而又灵活的架构基于流式的数据流(通常情况下Flume + Kafka + 流式处理引擎进行打造)
当出现故障的时候,可以故障转移,有重新恢复的机制

Flume的组件
collecting: source(源端)
aggregating: tmp storage(中间端,临时存储的地方)
moving: target(移动到目的点去)
从源端进行收集,聚合到一个地方(临时存储),最后移动到最终的目的地去

Flume在使用过程当中,默认就支持使用压缩;存储格式也是支持的;负载均衡也是OK的
使用的时候不需要开发任何代码,只要写一个配置文件把Agent配置一下就OK了
在有些场景是需要配置多个Agent让其组合起来使用

架构



组件Agent的组成

* Source 收集(从外部的服务器上把数据收集过来)
* Channel 聚合(收集过来以后,先放到channel里面)
* Sink 移动(然后,通过Sink将Channel里面的数据拿过来,写到外面去,典型的就是HDFS)
Flume发展的两个阶段:
Flume是由Cloudera公司所提出来的

* OG(老一代)
* NG(新一代)
组件介绍

三个组件对应的分类(只列举了常见的):

*
Flume Sources:

* Avro Source
avro和thrift都是序列化常用的一种机制
* Thrift Source
* Exec Source
就是命令行这种的,linux中tail -F这类的就可以用Exec Source这类的来作为source
* JMS Source(用的不多)
* Spooling Directory Sourc
比如说,你要监控某一个日志的时候:
使用Exec Source的tail -F只能指定到某一个文件上面去
如果要指定到某一个文件夹上面去,怎么办呢?
就是使用Spooling Directory Source
* Taildir Source
在1.6版本里,是没有这个的;在1.7版本里才有了这个
这个Source的功能是十分强大的:Exec是一个文件、Spooling是一个文件夹
那么如果我想监控一个文件夹下面的一个文件怎么办呢?
既监控一个文件夹下面新增的文件,也可以支持一个文件夹下面已有文件内容的append
这样就可以采用Taildir Source,综合了Exec和Spooling两者的功能
* Kafka Source
* NetCat TCP Source
即我们所熟知的nc命令
* Custom Source
如果没有满足需求的话,可以自己定义去实现一个Source;不过用的很少,基本都满足了
*
Flume Sink:

* HDFS Sink
* Hive Sink
* Logger Sink
即写到控制台
* Avro Sink
* Thrift Sink
* HBase Sink
HBaseSink / AsyncHBaseSink
分为同步和异步2种方式进行写
* ElasticSearchSink
* Kafka Sink
* HTTP Sink
* Custom Sinke
自定义Sink
*
Flume Channels:

* Memory Channels
如果内存足够的话,就丢到内存中去
* JDBC Channels
* Kafka Channels
* File Channels
这种方式,就会把文件写到磁盘上面去,这样对磁盘的压力就会稍微大一些
提出疑问
为什么Source的数据要先到Channels再到Sink呢??放一个Channel的目的是什么??
目的是为了缓冲
比如Java IO里面、MapReduce、Spark
Shuffle,在写数据的时候都是先写到buffer里面,buffer满了,再然后flush到磁盘上面去
这样做,能减少与磁盘的交互次数,减少IO,提升性能

环境搭建

所使用的版本:flume-ng-1.6.0-cdh5.7.0

要求:

* Java Runtime Environment - Java 1.8 or later
* Memory - Sufficient memory for configurations used by sources, channels or
sinks
内存要足够;尤其是对于channel而言,如果使用的是Memory Channels,那么内存必须要足够
* Disk Space - Sufficient disk space for configurations used by channels or
sinks
磁盘空间要大
* Directory Permissions - Read/Write permissions for directories used by agent
权限要有,因为从一个地方收集数据然后再写到磁盘上面去,必须要有足够的权限
步骤:

* 解压flume到/opt/app目录下
* 修改conf/flume-env.sh
添加export JAVA_HOME=/opt/app/jdk1.8.0_45
* 配置环境变量

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信