开发者学堂课程【Sqoop 企业级大数据迁移方案实战:导入 Import--全量数据导入 Hive】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/718/detail/12836
导入 Import--全量数据导入 Hive
内容介绍:
一、 方式一:先复制表结构到 hive 中再导入数据
二、 方式二:直接复制表结构数据到 hive 中
sqoo p全量导入 mysql 表数据到 hive 数仓当中,针对 myhive 中进行数据的导入 sqoop 支持两种方式,第一种为先复制表结构在导入数据,他首先根据 mysql 当中表的当关信息,把表的字段、类型创建好,再 hive 中创建同样的数据的表,第二步再执行数据的导入,把数据从 mysql 中导入 hive 对应的数上 location 位于的路径下面。第二种方式比较直接,他可以一步完成表结构的复制和数据的导入,看上去第二种方式要更加方便一点。这两种方式相当于做了一个整合,第二种方式直接一步到位。
一、方式一:先复制表结构到 hive 中再导入数据
将关系型数据的表结构复制到 hive 中
bin/sqoop create-hive-table\
--connect jdbc:mysql://node-1:3306/sqoopdb\
--table emp_add\
(固源的地址信息表,来自于哪个层次及多少号)
--username root\
(用户名是 root )
--password hadoop\
(密码)
--hive-table test.emp _add _sp\
其中:
--table emp_add 为 mysql 中的数据库 sqoopdb 中的表
--hive-table test.emp _add _sp 为 hive 中新建的表名称
从关系数据库导入文件到 hive 中
首先复制表结构,在 mysql 关系型数据库当中有数据库和表,表当中有两种类型,在 hive 数仓当中,他也存在所谓的表,只不过他是一个面向分析的,他要干的第一件事情就是就是把表的字段有几个,什么顺序,什么类型复制过来。
首先使用 bin/sqoop 之后加的参数不是 import 而是 create-hive-table 创建 hive 表,要想把信息描述清楚,需要知道 mysql 的地址,用户名密码, mysql 数据库中哪个表等属性, hive 当中创建哪个数据库库哪个表。
把 emp_add(故源的地址信息表)打开,来自于哪个层次那个阶段多少号。把这个表复制到 hive 中。当前位于 test路径下即 use test,然后 show tables,发现当前并没有这个表。接下来看是否能把这个表复制过来。
打开脚本,从脚本中复制相关的为例,确保当中的 ip 端口,用户名等于本机环境保持一致,复制完之后打开 sqoop 的终端,这里做一个执行。如下,这样执行第一步,复制表结构,接下来我们需要关心能不能把表结构复制下来,并且以怎样的形式存在,因为 hive 和 mysql 类型不同,执行完成之后,输入 show tables 表名出现,接下来确定一下有没有数据,elect * from emp _add_sp,其中并没有数据,说明只复制了表结构过来,如果想看一下下来的字段类型,需要用 describe 命令(desc formatted)来查询一下表信息,表名叫做emp _add_sp,然后回车,发现表的原数据信息在 hive 中有四个字段 id-int、hno-string、street-string、city-string 字符串类型,说明表结构复制过来了,并且根据 hive 类型做了个改变,这样就完成了第一步表结构的复制。
但是表结构复制过来还没有数据,这时候需要进行第二步叫做把数据导入到 hive 当中,即把数据放入对应的 hive 路径下,通过刚才是云数据信息看到他所创建的这个表 location 位于 hdfs://node-1:9000/user/hive/warehouse/test.db/emp _add _sp 路径下,接下来我们先通过浏览器到这个路径看一下,
选择 user/hive/warehouse/test.db/emp _add _sp,发现下面根本没有文件,说明数据没有复制过来。
接下来执行导入数据的操作,导入到 hive-table test.emp _add _sp 表当中
从关系数据库导入文件到 hive 中
bin/sqoop import\
--connect jdbc:mysql://node-1:3306/sqoopdb\
--username root\
--password hadoop\
--table emp_add\
--hive-table test.emp _add _sp\
--hive-import\
(执行 hive 数据的导入)
--m 1
(如果不指定,默认一个)
从脚本中把这个命令进行复制,确保当中的 ip 没有问题之后打开 sqoop 做一个执行,这样开始进行一个数据导入到 hive 中的一个操作。第一点在于数据有没有导入成功有没有映射成功数据,第二点在于 hive 中会有什么分隔符存在( hive 解析时需要分隔符进行指定,默认的叫做-001),retrieved 5 records 接收到五条记录,下面显示 hive 导入完成,到处目录已经被删除,说明我们猜想在底层已经把数据导入,最终移动到 hive 应的路径下。
验证表中数据信息是否存在,首先表的结构复制过来了,在查询路径数据中进行刷新,发现文件已经复制过来了。做个对比,发现没有问题。
发现文件已经导入过来了,然后选择 download ,已经在 m 当中默认分隔符为逗号,那么在 hive 中分隔符为不可见分隔符,叫做-001,就是 hive 的默认分隔符,说明数据已经导入进来。
二、方式二:直接复制表结构数据到 hive 中
(一步完成表结构的复制和数据的导入)
bin/sqoop import\
--connect jdbc:mysql://node-1:3306/sqoopdb\
--username root\
--password hadoop\
--table emp_conn\
--hive-import\
--m 1
--hive database test
;(往 hive 的数据库中去导入)
emp_conn 即下图所示信息表
并没有指定在 hive 中创建的表名,打开脚本做相关的复制,,打开 sqoop 做一个执行,并没有知名创建的表的名字,说明他会自己进行创建。进行 show tables ,表名为 emp-conn ,即默认情况下表名与 mysql 中表名保持一致,直接 select * from emp_conn ,发现数据导入。
采用第一种方式时,复制表结构时可以不用他复制,比如说自己先在hive 中创建一个 hive 的表,在导入时分隔符自己指定,说明人为的干预度更大一些。第二种方式集成度更高一些。