当前位置:   article > 正文

用sqoop将mysql的数据导入到hive表中的两种方式(亲测)_sqoop从mysql导入数据到hive

sqoop从mysql导入数据到hive

1:先将mysql一张表的数据用sqoop导入到hdfs中

准备一张表
在这里插入图片描述
在这里插入图片描述

需求 将 bbs_product 表中的前100条数据导 导出来 只要id brand_id和 name 这3个字段
数据存在 hdfs 目录 /user/xuyou/sqoop/imp_bbs_product_sannpy_ 下

bin/sqoop import \
--connect jdbc:mysql://172.16.71.27:3306/babasport \
--username root \
--password root \
--query 'select id, brand_id,name from bbs_product where $CONDITIONS LIMIT 100' \
--target-dir /user/xuyou/sqoop/imp_bbs_product_sannpy_ \
--delete-target-dir \
--num-mappers 1 \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--fields-terminated-by '\t'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

ps: 如果导出的数据库是mysql 则可以添加一个 属性 --direct

  bin/sqoop import \
  --connect jdbc:mysql://172.16.71.27:3306/babasport \
  --username root \
  --password root \
  --query 'select id, brand_id,name from bbs_product  where $CONDITIONS LIMIT 100' \
  --target-dir /user/xuyou/sqoop/imp_bbs_product_sannpy_ \
  --delete-target-dir \
  --num-mappers 1 \
  --compress \
  --compression-codec org.apache.hadoop.io.compress.SnappyCodec \
  --direct \
  --fields-terminated-by '\t'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

加了 direct 属性在导出mysql数据库表中的数据会快一点 执行的是mysq自带的导出功能

第一次执行所需要的时间

在这里插入图片描述

第二次执行所需要的时间 (加了direct属性)

在这里插入图片描述

执行成功
在这里插入图片描述

2:启动hive 在hive中创建一张表

drop table if exists default.hive_bbs_product_snappy ;
create table default.hive_bbs_product_snappy(
 id int,
 brand_id int,
  name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

3:将hdfs中的数据导入到hive中

load data inpath '/user/xuyou/sqoop/imp_bbs_product_sannpy_' into table default.hive_bbs_product_snappy ;
  • 1

在这里插入图片描述

4:查询 hive_bbs_product_snappy 表

select * from hive_bbs_product_snappy;
  • 1

在这里插入图片描述

此时hdfs 中原数据没有了
  • 1

在这里插入图片描述

 然后进入hive的hdfs存储位置发现 
  • 1

在这里插入图片描述

注意 :sqoop 提供了 直接将mysql数据 导入 hive的 功能  底层 步骤就是以下步骤   
  • 1

5:直接将MySQL数据导入hive

创建一个文件 touch test.sql 编辑文件 vi test.sql

use default;
drop table if exists default.hive_bbs_product_snappy ;
create table default.hive_bbs_product_snappy(
id int,
brand_id int,
name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

在 启动hive的时候 执行 sql脚本

bin/hive -f /opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/test.sql
  • 1

在这里插入图片描述
在这里插入图片描述

执行sqoop直接导入hive的功能

bin/sqoop import \
--connect jdbc:mysql://172.16.71.27:3306/babasport \
--username root \
--password root \
--table bbs_product \
--fields-terminated-by '\t' \
--delete-target-dir \
--num-mappers 1 \
--hive-import \
--hive-database default \
--hive-table hive_bbs_product_snappy
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

看日志输出可以看出 在执行map任务之后 又执行了load data
在这里插入图片描述
查询 hive 数据
在这里插入图片描述
原文链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/822575
推荐阅读
相关标签
  

闽ICP备14008679号