今天学的是数据迁移工具Sqoop,关于flume,第二遍的时候再去学一下具体的使用。
- 了解Sqoop的结构、功能和一些大概情况
- 学习Sqoop的应用(数据导入、数据导出)
- 学习常用命令和参数
Sqoop概述
这是一个开源的工具,功能主要就是连接Hadoop(hive)与传统数据库(MySQL)间的数据互相传递。
其实就是将数据的导入和导出命令用MapReduce来实现。
应用案例
在Sqoop里面,数据的导入就是从关系数据库像HDFS中传输数据,用的是import;
导出就是从大数据集群向关系数据库里面导数据,使用export关键字。
以上代码就是在MySQL中生成数据,使用了随机的方式来创建,手法极其优秀,还重建了函数,我没能看明白。
第一节 导入数据
sqoop import \
--connect jdbc : mysql : // linux123 :3306 \
--username hive
--password 12345678
--table goodtbl
--target -dir /root /lagou #目标HDFS路径
--delete - target - dir #如果数据在目标路径已出现,那么再次运行就会报错
--num-mappers 1 #启动的map task数量,默认是4
--fields -terminated-by "\t" #文件分割符号
这三个都是数据的导入,第一个就是导入全部数据,第二个是导入查询的数据,第三个就是导入指定列,这三个知识都比较重要,属于Sqoop的必会知识。
多看多默写!
第二节 导出数据
首先,hive中要有一个表,依旧是先在MySQL中建表再导入到hive中:
在导出数据到MySQL之前,需要提前创建一个空的表。
其实格式都是差不多了。
上面说的都是全量数据导入,数据量会比较大,如果数据量小,则需要采取完全源数据抽取。而这种抽取,有时候是抽取发生变化的数据,简称CDC。
- 如何判断是否大量?
- 为何抽取发生变化的数据?
增量数据的导入一般有两种
- 基于递增列(append)
- 基于时间戳(LastModified)
下面只讲解:append的方式,这个比较常用
注意1 删除MySQL和Hive数据的方式
注意2
因为是增量的方式,所以把原有的create hive table换成incremental append;然后既然是追加数据,就要考虑参考的那一列,从哪开始。这两个就是接下来的check column和last value两段代码的任务了。最后一个m1就是起一个job的意思。
因为这个数据就是额外增加的,而last value已经固定了起点,那么下次再想接着上次增加怎么做呢?
就是下面这个call batchInsertTestData函数。
执行job
执行数据增量导入方式有两种,一种就是每次手动的去调last-value。当每天都需要新增数据时,这个方式就会显得比较呆。
另一种就是使用job,每天自动定时调度,解放双手
注意1:如何设定每日更新的参数
注意2:如何启动job和关闭job
下图第一行命令是将12345678写入这个pwd文件中。第二行是在hdfs里新建一个文件目录,第三行是将这个pwd文件放到这个文件目录中,第四行是改变这个目录的权限:400。
这个意思就是下次不用再输入密码了,直接使用这个就可以,怎么使用看下下图
这就是job的创建,有固定格式。执行和删除的代码比较简单。
常用函数
稍微了解一下就可,具体一些可以用时上网查阅