目录
1、数据集成工具(采集,同步)
离线采集(批量采集)
1、Sqoop
2、DataX
3、Kettle
实时采集(增量采集)
1、Flume
2、Canal
3、OGG
查看mapreduce的运行日志
yarn logs -applicationId application_xxxxxxxx
2、sqoop
Apache的开源软件,主要用在HADOOP与传统的数据库(mysql)进行数据的传递。
1、数据吞吐量大:依赖hadoop集群可进行大批量的数据集成
2、没有可视化设计器
3、多种交互方式:命令行
4、部署不方便,依赖hadoop集群,使用sqoop要求数据传输的源要与大数据集群的所有节点进行通信。
5、适用场景:适用于能与大数据集群直接通信的关系数据库间的大批量数据传输
import和export导入导出在hadoop框架下看
RDBMS->Hadoop
3、架构
sqoop架构是hadoop生态系统的架构最简单的框架
sqoop由client端直接接入hadoop,任务通过解析生成对应的maprecue执行
4、sql脚本文件怎么执行
1、通过Navicat Premium,表的运行sql语句执行
2、mysql端,执行source /脚本地址
3、mysql -u root -p123456 student
导出sql语句
1、mysqldump -u root -p123456 student>/脚本地址
5、sqoop的使用
查看帮助:
sqoop import --help
编写脚本,文件以conf结尾
sqoop --options-file MySQLToHDFS.conf
注意事项:
1、--m 表示指定生成多少个Map任务,不是越多越好,因为MySQL Server的承载能力有限
2、当指定的Map任务数>1,那么需要结合--split-by参数,指定分割键,以确定每个map任务到底读取哪一部分数据,最好指定数值型的列,最好指定主键(或者分布均匀的列=>避免每个map任务处理的数据量差别过大)
3、如果指定的分割键数据分布不均,可能导致数据倾斜问题
4、分割的键最好指定数值型的,而且字段的类型为int、bigint这样的数值型
5、编写脚本的时候,注意:例如:--username参数,参数值不能和参数名同一行
6、运行的时候会报错InterruptedException,hadoop2.7.6自带的问题,忽略即可
7、实际上sqoop在读取mysql数据的时候,用的是JDBC的方式,所以当数据量大的时候,效率不是很高
8、sqoop底层通过MapReduce完成数据导入导出,只需要Map任务,不需要Reduce任务
9、每个Map任务会生成一个文件
6、增量到数据
–check-column
用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似.
注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时–check-column可以去指定多个列
–incremental
用来指定增量导入的模式,两种模式分别为Append和Lastmodified
–last-value
指定上一次导入中检查列指定字段最大值