文章目录
- 数据采集工具Flume与 Sqoop
-
- 知识点01:思考
- 知识点02:目标
- 知识点03:Flume的功能与应用
- 知识点04:Flume的基本组成
- 知识点05:Flume的开发规则
- 知识点06:Flume开发测试
- 知识点07:常用Source:Exec
- 知识点08:常用Source:Taildir
- 知识点09:常用Channel:file和mem
- 知识点10:常用Sink:HDFS
- 知识点11:Sqoop的功能与应用
- 知识点12:Sqoop导入:HDFS
- 知识点13:Sqoop导入:Hive
- 知识点14:Sqoop导入:增量
- 知识点15:Sqoop导出:全量
- 知识点16:Sqoop导出:增量
- 知识点17:Sqoop Job
- 知识点18:Sqoop密码问题与脚本封装
数据采集工具Flume与 Sqoop
知识点01:思考
-
在线教育项目中的需求和模块是什么?
- 需求
- 基于不同维度的数据分析提高报名转化率
- 访问转咨询
- 意向转报名
- 基于不同维度的数据分析提高学员学习质量
- 考勤分析
- 基于不同维度的数据分析提高报名转化率
- 模块/主题
- 访问分析主题
- 咨询分析主题
- 意向分析主题
- 报名分析主题
- 考勤分析主题
- 需求
-
整个项目架构中使用到了哪些技术?
- 数据生成:MYSQL业务数据库系统
- 访问与咨询:客服系统
- 意向与报名:CRM系统
- 考勤分析:学员管理系统
- 数据采集:Sqoop
- 数据存储:Hive
- 数据处理:HiveSQL【MR】
- 数据应用:MySQL + FineBI
- 可视化交互工具:Hue
- 任务流调度系统:Oozie
- 集群管理工具:CM
- 版本控制工具:Git
- 数据生成:MYSQL业务数据库系统
-
常用的数据源有哪些?
- 业务数据
- 用户行为数据
- 爬虫数据
- 运维数据
- 第三方数据
知识点02:目标
- 学习Flume的使用
- 目标:怎么学习Flume的使用?
- Flume介绍:功能和应用场景
- Flume使用:基本使用,学习Flume的使用技巧
- 掌握Sqoop的使用
- 目标:掌握Sqoop所有导入导出的常用参数的使用
- Sqoop介绍:功能、基本原理、应用场景
- Sqoop使用:导入和导出
知识点03:Flume的功能与应用
-
目标:掌握Flume的功能与应用场景
- Flume是什么?
- 为什么要用Flume,什么场景下使用Flume?
-
路径
- step1:功能
- step2:特点
- step3:应用
-
实施
- 功能
- 数据采集:将数据从一个地方采集到另外一个地方
- 数据生成:业务存储位置中
- 需求:将各种不同的数据来源统一化采集到统一的数据存储中
- 数据存储:统一化存储
- 实现分布式实时数据流的数据采集,可以将各种各样不同数据源的数据实时采集到各种目标地中
- 数据采集:将数据从一个地方采集到另外一个地方
- 特点
- 实时采集:时效性非常高,数据一产生就立即可以被采集
- 功能全面:支持从各种地方采集数据,可以将采集到的数据写入各种目标地
- 采集:文件、网络端口
- 发送:HDFS、Hive、Hbase、Kafka……
- 允许自定义开发
- 开发相对简单:所有的功能在底层都已经封装了,只要开发一个配置文件,定义采集谁,发送到哪就可以
- 可以实现分布式采集:不是分布式工具,将Flume部署在多台机器,一起采集
- 应用
- 应用于实时文件、网络数据流采集场景
- 美团的Flume设计架构
- https://tech.meituan.com/2013/12/09/meituan-flume-log-system-architecture-and-design.html
- 功能
-
小结
- Flume的功能和应用场景是什么?
- 功能:实时的分布式数据流采集
- 应用:实时文件和网络数据流
知识点04:Flume的基本组成
-
目标:掌握Flume的基本组成
-
路径
- step1:Agent
- step2:Source
- step3:Channel
- step4:Sink
- step5:Event
-
实施
-
官方:flume.apache.org
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EACkcumN-1623125056317)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507095910117.png)]
- http://flume.apache.org/releases/content/1.7.0/FlumeUserGuide.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oUEkHbZh-1623125056318)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507100111078.png)]
-
Agent:一个Agent表示一个Flume程序,实现采集数据源的数据,将数据采集发送到目标地
- 将WebServer的日志采集以后写入HDFS
-
任何一个Agent实现数据采集,都必须由三个基本组件构成
- Source、Channel、Sink
-
Source:负责监听数据源的数据变化,如果数据源产生新的数据,就立即进行采集
- 负责实现数据采集
- 将数据源的每一行数据变成一个Event对象,发送给Channel
-
Channel:负责接收Source采集到的数据,供Sink来读取数据
- 采集数据的临时缓存的
-
Sink:负责从Channel中读取采集的数据,将数据写入目标地
- 最终实现数据发送的组件
-
Event:数据流传输的最小的封装的单元,将每一行封装为一个Event
-
结构
header:类似于一个Map集合存储,默认为空的,可以选择性在header放KV对,一些属性的配置等 body:类似于一个字节数组,存放真正的这条数据的内容
-
作用:实现每一条数据的封装
-
-
-
小结
- Flume中的Agent是什么,由什么组成?
- 一个Agent就是一个Flume程序
- 组成:Source、Channel、SInk
- Source、Channel、Sink的功能分别是什么?
- Source:采集数据
- Channel:缓存数据
- Sink:发送数据
- Flume中的Agent是什么,由什么组成?
知识点05:Flume的开发规则
-
目标:掌握Flume的基本开发规则
-
实施
-
step1:开发一个Flume的参数配置文件
- 需要在配置文件中定义Agent
- 定义Agent的名称
- 定义Source:从哪读取数据
- 定义Channel:将数据缓存在哪
- 定义Sink:将数据发送到哪
- 一个文件可以有多个Agent,具体区分每个Agent通过Agent名称来区分
- 需要在配置文件中定义Agent
-
step2:运行flume的agent程序,运行这个程序所在的文件,指定agent的名称即可
-
用法
flume-ng <command> [options]...
-
使用
flume-ng agent -c/--conf 指定Flume配置文件目录 --name/-n 指定Agent的名称 --conf-file/-f 指定要运行的文件
-
版本:
- flume-og:以前的老版本,见不到的
- flume-ng:现在使用的版本
-
-
-
小结
-
如何开发一个Flume程序?
-
step1:开发一个文件,定义Agent【名称、source、channel、sink】
-
step2:运行这个文件
flume-ng agent -c conf_dir -n agentName -f agentFile
-
-
知识点06:Flume开发测试
-
目标:实现Flume程序的开发测试
-
实施
-
需求:采集Hive的日志、临时缓存在内存中、将日志写入Flume的日志中并打印在命令行
-
source:采集一个文件数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cRaC1wna-1623125056319)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507103323742.png)]
- Exec Source:通过执行一条Linux命令来实现文件的动态采集
-
channel:Flume提供了各种channel用于缓存数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4m0CGSJ8-1623125056320)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507103901326.png)]
- mem channel:将数据缓存在内存中
-
sink:Flume提供了很多种sink
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2jL0Vsou-1623125056321)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507104151330.png)]
- Logger Sink:将数据写入日志中
-
-
开发
-
创建测试目录
cd /export/server/flume-1.6.0-cdh5.14.0-bin mkdir usercase
-
复制官方示例
cp conf/flume-conf.properties.template usercase/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
-
-
运行
flume-ng agent -c conf/ -f usercase/hive-mem-log.properties -n a1 -Dflume.root.logger=INFO,console
-
结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEeeMECa-1623125056322)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507104747650.png)]
-
-
小结
- 实现测试即可
知识点07:常用Source:Exec
-
目标:掌握Exec Source的功能与应用场景
-
路径
- step1:功能与应用场景
- step2:测试实现
-
实施
-
功能与应用场景
- 功能:通过执行一条Linux命令来实现数据动态采集
- 固定搭配tail -f命令来使用
- 增量采集
- 应用场景:实现动态监听采集单个文件的数据
- 缺点:如果日志是多个文件的动态变化
- 功能:通过执行一条Linux命令来实现数据动态采集
-
测试实现
- 需求:动态采集hiveserver的日志文件,输出在Flume的日志并打印在命令行中
- 开发:参考知识点06
-
-
小结
- Exec Source的功能与应用场景是什么?
- 功能:通过执行一条Linux命令来实现文件的数据采集
- 应用:动态监听单个文件
知识点08:常用Source:Taildir
-
目标:掌握Taildir Source的功能与应用场景
-
路径
- step1:功能与应用场景
- step2:测试实现
-
实施
-
功能与应用场景
-
应用场景
-
需求:当前日志文件是一天一个,需要每天将数据实时采集到HDFS上
-
数据:Linux
/tomcat/logs/2020-01-01.log 2020-01-02.log …… 2020-11-10.log
-
问题:能不能exec source进行采集?
- 不能,exec只能监听采集单个文件
-
解决:Taildir Source
-
-
功能:从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
- 开发 ```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
-
结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qhaLu8q5-1623125056323)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507112002320.png)]
-
元数据文件的功能:/export/server/flume-1.6.0-cdh5.14.0-bin/position/taildir_position.json
-
问题:如果Flume程序故障,重启Flume程序
-
-
-