一:Sqoop数据导入至Hive(原生API)
方式1-先复制mysql的表结构到Hive,然后再导入数据
1、先复制表结构到hive中再导入数据,将关系型数据的表结构复制到hive中
sqoop create-hive-table \
--connect jdbc:mysql://hadoop01:3306/userdb \
--table emp_add \
--username root \
--password 123456 \
--hive-table test.emp_add_sp
其中:
--table emp_add为mysql中的数据库userdb中的表。
--hive-table emp_add_sp 为hive中新建的表名称。
复制表结构默认分隔符是'\001'
2、从关系数据库导入文件到hive中
sqoop import \
--connect jdbc:mysql://hadoop01:3306/userdb \
--username root \
--password 123456 \
--table emp_add \
--hive-table test.emp_add_sp \
--hive-import \
--m 1
方式2:直接导入数据(建表 + 导入数据)
-- 1、使用hive默认分隔符 '\001'
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--table emp_conn \
--username root \
--password 123456 \
--hive-import \
--hive-database test \
--m 1
#从MySQL的userdb数据库的emp_conn表导入到hive的test数据库的emp_conn表
#如果多次导入,则会进行数据追加
#如果要覆盖操作,需要加参数:
--hive-overwrite
-- 2、使用指定分隔符 '\0'
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp_conn \
--hive-import \
--hive-database test \
--fields-terminated-by '\t' \
--m 1
二:Sqoop数据导入至Hive--HCatalog API
sqoop原生API和 HCatalog区别
#数据格式支持(这是实际中使用HCatalog的主要原因,否则还是原生的灵活一些)
Sqoop方式支持的数据格式较少;
HCatalog支持的数据格式多,包括RCFile, ORCFile, CSV, JSON和SequenceFile等格式。
#数据覆盖
Sqoop方式允许数据覆盖,HCatalog不允许数据覆盖,每次都只是追加。
#字段名匹配
Sqoop方式比较随意,不要求源表和目标表字段相同(字段名称和个数都可以不相同),它抽取的方式是将字段按顺序插入,比如目标表有3个字段,源表有一个字段,它会将数据插入到Hive表的第一个字段,其余字段为NULL。
但是HCatalog不同,源表和目标表字段名需要相同,字段个数可以不相等,如果字段名不同,抽取数据的时候会报NullPointerException错误。HCatalog抽取数据时,会将字段对应到相同字段名的字段上,哪怕字段个数不相等。
使用HCatalog支持ORC等数据格式
-- 手动在hive中建一张表
create table test.emp_hive
(
id int,
name string,
deg string,
salary int,
dept string
)
row format delimited fields terminated by '\t'
stored as orc;
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp \
--fields-terminated-by '\t' \
--hcatalog-database test \
--hcatalog-table emp_hive \
-m 1
# 博学谷IT 技术支持