大数据:Flume和Sqoop

Flume和Sqoop

一、Flume的功能与应用

1.功能

数据采集:将数据从一个地方采集到另一个地方
将数据进行了复制
大数据的数据采集:将各种需要处理的数据源复制到大数据仓库中

实现:实时数据流的数据采集,可以将不同各种数据源的数据采集到各种目标地
数据源:文件、网络端口
Flume:实时
目标地:HDFS、Hbase、Hive、Kafka

特点:
功能全面
所有的读取和写入的程序,都已经封装好了
只需要配置从哪读,写入哪里,就要可以实现采集

允许自定义开发
如果功能不能满足实际的业务需求,Flume提供各种接口,允许自定义开发
基于Java开发的应用程序

开发相对简单
所有功能都封装好了,只要调用即可
写一个配置文件:从哪读,都谁,写到哪去

可以实现分布式采集
分布式采集:每一台机器都可以用Flume进行采集
注意:Flume不是分布式架构

2.应用

应用于实时数据流采集场景
基于文件或者网络协议端口的数据流采集

美团的Flume设计架构

二、Flume的基本组成

在这里插入图片描述
Agent:每个Agent就是一个Flume的程序,每个Agent由三部分组成:source、Channel、Sink

Source:负责读取数据,Source会动态监听数据源,将数据源新增的数据实时采集变成Event数据流,将每个Event发送到Channel中

  • 每一条数据会变成一个Event
  • 实时监听数据源

Channel:临时缓存数据,将source发送过来的event的数据缓存起来 ,供Sink取数据
内存、文件(磁盘)

Sink:负责发送数据,从Channel中读取采集到的数据,将数据写入目标地
sink主动到Channel中读取数据

Event:用于构建每一条数据的对象,每一条数据就会变成一个Event,进行传递,最终写入目标
组成

  • head:定义一些KV属性和配置,默认head时空的
  • body:数据存在body中
    理解:
Event
Map head;
byte[] body; //每一条数据的字节流

三、Flume的开发规则:

step1:开发一个Flume的参数配置文件
properties格式的文件:

#step1:定义一个agent:agent的名称、定义source、channel、sink
#step2:定义source:读什么、读哪
#step3:定义channel:缓存在什么地方
#step4:定义sink:写入什么地方

step2:运行flume的agent程序

flume -ng
Usage:bin/flume-ng <command>[options]...

为什么叫Flume-ng?

  • flume-og:老的版本,架构非常麻烦,性能非常差,后不用了
  • flume-ng:现在用的版本
flume-ng agent -c <conf> -f <file> -n <name>

agent:表示要运行一个Flume程序

  • -c :指定Flume的配置文件目录
  • -f :要运行那个文件
  • -n :运行的agent的名字是什么

一个程序文件中可以有多个agent程序,通过名字来区别

四、Flume开发测试

需求:采集Hive的日志、临时缓存在内存中、将日志写入Flume的日志中并打印在命令中
source:采集一个文件数据

创建测试目录:

cd /export/server/flume-1.6.0-cdh5.14.0-bin
mkdir usercase

复制官方示例:

cp conf/flume-conf.properties.template usercase/hive-mem-log.properties

hive-mem-log.properties:采集hive的日志临时缓存在内存中最终打印在日志中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Exec Source

  • 执行一条Linux的命令来实现采集
  • 命令:搭配tail -f动态采集文件最新的内容
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

Chanel:Flume提供了各种channel应用缓存数据

  • memory channel将数据缓存在内存中
    在这里插入图片描述
    在这里插入图片描述
    Sink:Flume提供很多sink
  • Logger Sink 日志类型的Sink

开发配置文件hive-mem-log.properties

# The configuration file needs to define the sources, 
# the channels and the sinks.
# Sources, channels and sinks are defined per a1, 
# in this case called 'a1'

#define the agent
a1.sources = s1
a1.channels = c1
a1.sinks = k1

#define the source
a1.sources.s1.type = exec
a1.sources.s1.command = tail -f /export/server/hive-1.1.0-cdh5.14.0/logs/hiveserver2.log


#define the channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000

#define the sink
a1.sinks.k1.type = logger


#bond
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1

运行

#1.切换到指定目录
cd /export/server/flume-1.6.0-cdh5.14.0-bin/
#2.运行agent程序
flume-ng agent -c conf/ -f usercase/hive-mem-log.properties -n a1 -Dflume.root.logger=INFO,console
  • -Dflume.root.logger=INFO,console:将flume的日志打印在命令行

结果:
在这里插入图片描述

五、常用Source

1.Exec

功能:通过执行一条Linux命令来实现数据量动态采集

  • 固定搭配tail -F使用

应用场景:实现动态监听采集(单个文件)的数据

2.Taildir

功能:从Apache Flume1.7版本开始支持,动态监听采集多个文件

  • 如果用的是1.5或者1.6,遇到这个问题,需要自己手动编译这个功能

测试实现
需求:让Flume动态监听一个文件和一个目录下的所有文件

准备

cd /export/server/flume-1.6.0-cdh5.14.0-bin
mkdir position
mkdir -p /export/data/flume
echo " " >> /export/data/flume/bigdata01.txt
mkdir  -p /export/data/flume/bigdata

开发

cp usercase/hive-mem-log.properties usercase/taildir-mem-log.properties 

taildir-mem-log.properties

# define sourceName/channelName/sinkName for the agent 
a1.sources = s1
a1.channels = c1
a1.sinks = k1

# define the s1
a1.sources.s1.type = TAILDIR
#指定一个元数据记录文件
a1.sources.s1.positionFile = /export/server/flume-1.6.0-cdh5.14.0-bin/position/taildir_position.json
#将所有需要监控的数据源变成一个组,这个组内有两个数据源
a1.sources.s1.filegroups = f1 f2
#指定了f1是谁:监控一个文件
a1.sources.s1.filegroups.f1 = /export/data/flume/bigdata01.txt
#指定f1采集到的数据的header中包含一个KV对
a1.sources.s1.headers.f1.headerKey1 = value1
#指定f2是谁:监控一个目录下的所有文件
a1.sources.s1.filegroups.f2 = /export/data/flume/bigdata/.*
#指定f2采集到的数据的header中包含一个KV对
a1.sources.s1.headers.f2.headerKey1 = value2
a1.sources.s1.fileHeader = true 

# define the c1
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# def the k1
a1.sinks.k1.type = logger

#source、channel、sink bond
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1

运行

flume-ng agent -
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值