用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'

在这里插入图片描述

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'

加了 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' ;

在这里插入图片描述

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

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

在这里插入图片描述

4:查询 hive_bbs_product_snappy 表

select * from hive_bbs_product_snappy;

在这里插入图片描述

此时hdfs 中原数据没有了

在这里插入图片描述

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

在这里插入图片描述

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

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' ;

在这里插入图片描述

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

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

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

执行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

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

猜你喜欢

转载自blog.csdn.net/qq_38617531/article/details/87179936
今日推荐