Hive学习(9)使用sqoop将Hive与MySQL与HDFS数据迁移 双向

Hive与MySQL数据迁移 双向(干货)

前提Hive与MySQL中有两张同结构表(可不同名)master执行

检测Sqoop与MySQL连通性
sqoop list-databases --connect jdbc:mysql://slave2:3306/ --username root --password 123456

Hive数据迁移至MySQL

① sqoop export --connect
② jdbc:mysql://slave2:3306/copyy \ <-slave2表示mysql所在主机名或IP/copyy表示MySQL表所在数据库名->
③ --table sc \ <-sc表示MySQL中接受迁移数据的表名->
④ --username root --password 123456
⑤ --fields-terminated-by ‘|’ \ <-‘|’表示分隔符,应与hive表定义时的分隔符一致->
⑥ --export-dir /user/hive_remote/warehouse/hongya.db/sc <-/…/sc表示要迁移的表在hdfs中的存储路径-><eg通过show create table sc;可知sc在hdfs的存储路径>

MySQL数据迁移至Hive

①sqoop import --connect
②jdbc:mysql://slave2:3306/copy \ <-slave2表示mysql所在主机名或IP/copyy表示MySQL表所在数据库名->
③–username root --password 123456
④–table sc \ <-sc表示MySQL中迁移数据的表名->
⑤–hive-import --hive-overwrite
⑦ --hive-table hongya.sc \ <-hongya.sc表示数据迁移的表名,加上所在库名前缀->
⑧ --fields-terminated-by ‘|’ \ <-‘|’表示分隔符,应与最初hive表定义时的分隔符一致->
⑨ --split-by grade <-mysql表若无主键,不加则出错;grade表示表最后一列属性名->

MySQL中文乱码解决

首先MySQL中的数据库和库中的表均应为UTF8格式
用show create database copyy 可查看编码格式

重建copyy库,格式为uft8:create database copyy character set utf8;

use copyy在copyy库中建utf8格式表
create table xx(name string,age int) ENGINE=InnoDB DEFAULT CHARSET=uft8;

MySQL–》HIVE 转为parquet文件格式导入

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:mysql://(IP地址):3306/interface \
--username root \
--password root \
--table etl_test1 \
--split-by id \
--num-mappers 1 \
--as-parquetfile \
--hive-import \
--hive-database cfdp \
--hive-table etl_test1 

MySQL–》HIVE(HDFS) 语句条件加载数据

背景说明:当利用Sqoop从MySQL等关系型数据库中抽取数据到Hive或HDFS时,加载到Hive或HDFS的数据需要有一个加载时间戳,以便于后续加载的数据做更新比对。

可以进行一些where语句简单的筛选
也可以根据日期等字段进行增量导入

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:mysql://(IP地址):3306/interface \
--username root \
--password root  \
--split-by id \
--target-dir /user/hive/warehouse/cfdp.db/etl_test1 \
--delete-target-dir \
--fields-terminated-by "\t" \
--query "select *,now() as sync_date from etl_test1 where \$CONDITIONS" \

--连接以上语句使用,但是没有权限(项目中),故把数据加载至HDFS该表的文件中即可
--hive-import \
--hive-overwrite \
--hive-table etl_test1

注意:

–query后跟的查询语句可以是单引号引起来,也可以是双引号,无论何种引号都必须加上$CONDITIONS;但当用双引号引用时,必须在$CONDITIONS前加上反斜杠即$CONDITIONS;

查询中的select语句要按照对应RDB的语法,例如本例中是Oracle的语法去写的,获取当前系统时间作为时间戳,在使用Oracle中的sysdate函数

后续会持续更新,如有问题请留言讨论

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值