学习记录8 Hadoop生态圈技术栈(六)

今天学的是数据迁移工具Sqoop,关于flume,第二遍的时候再去学一下具体的使用。

  1. 了解Sqoop的结构、功能和一些大概情况
  2. 学习Sqoop的应用(数据导入、数据导出)
  3. 学习常用命令和参数

Sqoop概述

这是一个开源的工具,功能主要就是连接Hadoop(hive)与传统数据库(MySQL)间的数据互相传递。
其实就是将数据的导入和导出命令用MapReduce来实现。

应用案例

在Sqoop里面,数据的导入就是从关系数据库像HDFS中传输数据,用的是import;
导出就是从大数据集群向关系数据库里面导数据,使用export关键字。

image.png

image.png

以上代码就是在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"  #文件分割符号
image.png

image.png

这三个都是数据的导入,第一个就是导入全部数据,第二个是导入查询的数据,第三个就是导入指定列,这三个知识都比较重要,属于Sqoop的必会知识。
多看多默写!
第二节 导出数据
首先,hive中要有一个表,依旧是先在MySQL中建表再导入到hive中:

image.png

在导出数据到MySQL之前,需要提前创建一个空的表。
image.png

其实格式都是差不多了。
上面说的都是全量数据导入,数据量会比较大,如果数据量小,则需要采取完全源数据抽取。而这种抽取,有时候是抽取发生变化的数据,简称CDC。

  1. 如何判断是否大量?
  2. 为何抽取发生变化的数据?

增量数据的导入一般有两种

  1. 基于递增列(append)
  2. 基于时间戳(LastModified)
    下面只讲解:append的方式,这个比较常用
    注意1 删除MySQL和Hive数据的方式
    注意2
    image.png

    因为是增量的方式,所以把原有的create hive table换成incremental append;然后既然是追加数据,就要考虑参考的那一列,从哪开始。这两个就是接下来的check column和last value两段代码的任务了。最后一个m1就是起一个job的意思。
    image.png

    因为这个数据就是额外增加的,而last value已经固定了起点,那么下次再想接着上次增加怎么做呢?
    就是下面这个call batchInsertTestData函数。
    image.png

    执行job
    执行数据增量导入方式有两种,一种就是每次手动的去调last-value。当每天都需要新增数据时,这个方式就会显得比较呆。
    另一种就是使用job,每天自动定时调度,解放双手
    注意1:如何设定每日更新的参数
    注意2:如何启动job和关闭job
    下图第一行命令是将12345678写入这个pwd文件中。第二行是在hdfs里新建一个文件目录,第三行是将这个pwd文件放到这个文件目录中,第四行是改变这个目录的权限:400。
    这个意思就是下次不用再输入密码了,直接使用这个就可以,怎么使用看下下图
    image.png

    这就是job的创建,有固定格式。执行和删除的代码比较简单。
    image.png

    image.png

    常用函数
    稍微了解一下就可,具体一些可以用时上网查阅
    image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容