1.flume
1.1.功能:
- 实时采集分布式数据流
1.2.应用
- 采集实时文件和网络数据流
1.3. flume的基本组成
- Agent(source->channel->sink)
- 一个Agent就是一个Flume程序
1.3.1 source(采集):
数据监听,新数据一产生就立即采集,并且将每一行数据封装成一个Event对象发给channel
注:Event:数据流传输时最小的封装单元,每行数据封装成一个Event
- 常用source分类:
1.exec source
作用:运行一条Linux命令实现单个文件的动态监听采集,固定搭配tail -f 使用
缺点:如果日志是多个文件的动态变化,则无法采集
2.taildir source
作用:实施多个文件的动态监听,将上次采集数据结束的位置保存在JSON文件中,方便下次进行增量采集
缺点:flume1.7才开始支持此功能,如果用的是1.5或者1.6,遇到这个问题,需要自己手动编译这个功能
3.Kafka Source:
作用:监听读取Kafka数据
4.Spooldir Source:、
作用:监控一个目录,只要这个目录中产生一个文件,就会全量采集一个文件
缺点:不能动态监控文件,被采集的文件不能发生变化
1.3.2 channel(缓存):
负责接收source采集的数据,供sink读取(临时缓存数据)
- 常用channel:
1.mem
作用:将数据缓存在内存
特点:性能相对较高,但空间小,安全系数低
2.file
作用:将数据缓存在磁盘
特点:空间大,安全性高,但性能较差(读写慢)
1.3.3 sink(发送):
从channel读取采集的数据并写入目的地
- HDFS sink
作用:将数据写入HDFS中,可指定分区和文件大小
使用场景:离线文件归档,代替Hive Sink
2.sqoop
- 作用:离线数据库采集数据的工具,用于实现MySQL等RDBMS数据库(关系型数据库)与HDFS之间的数据导入导出
注:这里的导入导出是相对于HDFS来说的 - 本质:底层就是MapReduce(Input、Map、Output),将Sqoop的程序转换成MR程序提交给YARN,实现分布式采集
- 特点:
1.必须依赖Hadoop:MR+YARN
2.离线数据采集,只适用于离线业务平台 - 使用场景:
1.数据迁移:将历史数据存储到HDFS中
特点:全量采集,每次采集所有数据
2.数据同步:定期将更新的数据采集到数仓中
特点:只同步采集新数据(新增or更新)
2.1. 导入HDFS的常用选项有哪些?
- 2.1.1 连接数据库
–connect 连接JDBC地址
–username 用户名
–password 密码
–table 连接表名
–columns 指定列
–where 指定行
-e/–query 执行SQL语句 - 2.1.2 连接HDFS
–target-dir指定连接目录 - 2.1.3 其他
–fields-terminated-by 指定分隔符
–delete-target-dir 提前删除已存在输出目录
-m 指定map的个数
2.2. 导入Hive的方式有几种?
- 方式一:直接导入
–hive-import 申明导入Hive表
–hive-database 指定Hive的数据库
–hive-table 指定导入哪张表 - 方式二:hcatalog方式
–hcatalog-database
–hcatalog-table
2.3. 增量导入的方式有几种?
- 2.3.1 自带的方式
- append
要求:必须有自增的列
特点:只能采集新增的数据 - lastmodifield
- 要求:必须时间列
- 特点:既能采集新增的,也能采集更新的数据
- 2.3.2 特殊方式
- 通过字段主动过滤来实现
create_time,update_time,每次输出的目录不能一样
2.4. 导出的选项有哪些?
- 2.4.1 HDFS
–export-dir 指定导出目录 - 2.4.2 Hive
–hcatalog-database 指定Hive的数据库
–hcatalog-table 指定Hive的表
2.5. 增量导出的方式有几种,各自的特点是什么?
- upateonly:只能增量导出更新的数据
- allowerinsert:既可以导出更新的,也可以导出新增的数据