Sqoop应用_导入测试

该文介绍了如何使用Sqoop工具将MySQL数据库中的数据导入到Hive中,包括创建Hive表,处理导入报错,设置Sqoop配置,以及执行多map条件查询导入HDFS的操作。同时,文章还展示了导入不同格式文件(如Parquet)的命令示例。
摘要由CSDN通过智能技术生成

准备测试数据

应用场景:

使用sqoop上传字典表数据到hive中与我们的数据进行关联查询。

以 商品表 为例:

-- 创建sqoop_db 数据库
create database sqoop_db default charset utf8 collate utf8_general_ci;

-- 导入SQL文件
mysql -uroot  -p sqoop_db < /public/data/goods_table.sql

file

eval 查看 sql 查询结果

# 没有where条件
sqoop eval \
--connect jdbc:mysql://nn1:3306/sqoop_db \
--username root \
--password 12345678 \
--query "select * from goods_table limit 10"

file

create-hive-table创建hive表

先启动hadoop集群

# 基于MySQL表创建hive表

sqoop create-hive-table \
--connect jdbc:mysql://nn1:3306/sqoop_db \
--username root \
--password 12345678 \
--table goods_table \
--hive-table hainiu.goods_table

报错:

file

修改sqoop配置文件

mv sqoop-env-template.sh  sqoop-env.sh

添加hadoop,hive,hbase等环境信息

export ZOOKEEPER_HOME=/usr/local/zookeeper
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
export HIVE_CONF_DIR=/usr/local/hive/conf

将hive-common-3.1.3.jar拷贝到sqoop的lib目录下

cp /usr/local/hive/lib/hive-common-3.1.3.jar  /usr/local/sqoop/lib

测试:

file

查看hive表是否创建成功

file

多map条件查询导入HDFS

语法 :

sqoop import \
--connect 数据库连接字符串 \
--username 数据库用户名 \
--password 数据库密码 \
--target-dir HDFS位置 \
--delete-target-dir \
--fields-terminated-by "\t" \
--num-mappers 3 \
--split-by 切分数据依据 \
--query 'select SQL where 查询条件 and $CONDITIONS'

参数解释 :

–query或–e 将查询结果的数据导入,使用时必须伴随参–target-dir,–hive-table,如果查询中有where条件,则条件后必须加上$CONDITIONS关键字

当sqoop使用–query+sql执行多个maptask并行运行导入数据时,每个maptask将执行一部分数据的导入,原始数据需要使用’–split-by 某个字段’来切分数据,不同的数据交给不同的maptask去处理。maptask执行sql副本时,需要在where条件中添加$CONDITIONS条件,这个是linux系统的变量,可以根据sqoop对边界条件的判断,来替换成不同的值,这就是说若split-by id,则sqoop会判断id的最小值和最大值判断id的整体区间,然后根据maptask的个数来进行区间拆分,每个maptask执行一定id区间范围的数值导入任务,如下为示意图。

file

导入文本文件

#用hainiu认证

sqoop import \
--connect jdbc:mysql://nn1:3306/sqoop_db"?useUnicode=true&characterEncoding=UTF-8" \
--username root \
--password 12345678 \
--target-dir /user/hainiu/sqoop/data/goods_1 \
--delete-target-dir \
--fields-terminated-by "\001" \
--num-mappers 4 \
--split-by id \
--query 'select * from goods_table where id < 10 and $CONDITIONS'

# 注意:
# --split-by: 一般都是数值型。
# -Dorg.apache.sqoop.splitter.allow_text_splitter=true: --split-by的是字符串也可以

查询结果 :

file

导入其他格式文件

# 导入不同格式,支持格式as-avrodatafile、as-parquetfile、as-sequencefile、as-textfile(默认格式)
# 多次导入时会报jar包已存在错误,请忽略,原因为sqoop读取源数据的schema文件创建的jar在前几次任务中已经创建了。

sqoop import \
--connect jdbc:mysql://nn1:3306/sqoop_db"?useUnicode=true&characterEncoding=UTF-8" \
--username root \
--password 12345678 \
--target-dir /user/hainiu/sqoop/data/goods_2_parquet \
--delete-target-dir \
--as-parquetfile \
--num-mappers 4 \
--split-by id \
--query 'select * from goods_table where id < 10 and $CONDITIONS'

结果:

e-target-dir
–as-parquetfile
–num-mappers 4
–split-by id
–query ‘select * from goods_table where id < 10 and $CONDITIONS’


结果:

![file](https://img-blog.csdnimg.cn/img_convert/ae811dee584f3ae69f25de3e258e5ca3.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值