sqoop导出数据到mysql_大数据实操篇 No.6Sqoop 部署及使用

Apache Sqoop简介

2704ed26f97f7a0620d0aae00a27d27c.png

Sqoop是一款开源的工具,主要用于hdfs(hive)与结构化的数据库(例如:关系型数据库mysql)之间,进行高效的传输批量数据。

注意在官网还有一个版本:Sqoop2,这个Sqoop2官方说明不适用于生产环境部署。

Sqoop原理:将导入或导出命令转换成mapreduce程序,实现数据导入导出。在转换出的mapreduce中主要是对inputformat和outputformat进行定制。

Sqoop安装部署

下载解压

到官网进行下载:http://sqoop.apache.org/

笔者下载的是:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/

修改配置文件

进入conf目录,修改sqoop-env.sh

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

$ vi sqoop-env.sh

笔者这里只配置Hadoop和Hive的路径

#Set path to where bin/hadoop is availableexport HADOOP_COMMON_HOME=$HADOOP_HOME#Set path to where hadoop-*-core.jar is availableexport HADOOP_MAPRED_HOME=$HADOOP_HOME#set the path to where bin/hbase is available#export HBASE_HOME=#Set the path to where bin/hive is availableexport HIVE_HOME=$HIVE_HOME#Set the path for where zookeper config dir is#export ZOOCFGDIR=
Mysql安装配置

Mysql安装

笔者用sqoop将hive的数据导出到mysql,所以这里安装mysql,安装方法略。

放置jdbc驱动

放置mysql的jdbc jar包到sqoop的lib目录下,笔者用的是下面这个版本

mysql-connector-java-5.1.47.jar

注意:sqoop是在执行命令的时候指定mysql的配置参数。不需要单独配置 。

验证安装结果

sqoop直接用命令检查

$ bin/sqoop help

Sqoop使用

参考官方指南:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html

启动sqoop查看数据库

list-databases

$ sqoop list-databases --connect jdbc:mysql://webapp200:3306/ --username root --password 000000

导入数据

导入数据:指从非大数据集群(RDBMS)向大数据集群(HDFS、HIVE、HBASE)中传输数据。关键字import。

RDBMS到HDFS

  • 全部导入

$ bin/sqoop import \--connect jdbc:mysql://webapp200:3306/offlinecalc \--username root \--password 000000 \--table country \--target-dir /user/country \--num-mappers 1 \--fields-terminated-by "\t"
  • 查询导入

$ bin/sqoop import \--connect jdbc:mysql://webapp200:3306/offlinecalc \--username root \--password 000000 \--target-dir /user/country \--num-mappers 1 \--fields-terminated-by "\t" \--query 'select name,count from country where busidate<=getdate() and $CONDITIONS;'

注意:$CONDITIONS保证数据顺序的一个变量,在开启多个mappers(例如:--num-mappers 3)时,可以保证传输到hdfs上的数据顺序不乱。

如果query使用双引号,则需对$CONDITIONS做转义,在前面加“\”

\$CONDITIONS
  • 导入指定的列

$ bin/sqoop import \--connect jdbc:mysql://webapp200:3306/offlinecalc \--username root \--password 000000 \--table country \--columns name,count \--target-dir /user/country \--num-mappers 1 \--fields-terminated-by "\t"
  • 条件筛选导入数据

$ bin/sqoop import \--connect jdbc:mysql://webapp200:3306/offlinecalc \--username root \--password 000000 \--table country \--where "id=1" \--target-dir /user/country \--num-mappers 1 \--fields-terminated-by "\t"

注:“导入指定的列”和“条件筛选导入数据”可以结合使用

RDBMS到HIVE

$ bin/sqoop import \--connect jdbc:mysql://webapp200:3306/offlinecalc \--username root \--password 000000 \--table country \--num-mappers 1 \--hive-import \--fields-terminated-by "\t" \--hive-table country_hive

注意:这里是分两步实现:先导到hdfs,再迁移到hive;第一步默认临时目录是/user/[用户名]/表名

RDBMS到HBASE

$ bin/sqoop import \--connect jdbc:mysql://webapp200:3306/offlinecalc \--username root \--password 000000 \--table country \--columns "id,name,sex" \--columns-family "info" \--hbase-create-table \--hbase-row-key "id" \--hbase-table "hbase_country" \--num-mappers 1 \--split-by id

-- split-by id 按id字段切分工作单元

注意:sqoop和hbase之间的版本问题,例如:sqoop1.4.6只支持HBase1.0.1之前的版本自动创建HBase表的功能。

导出数据

导出数据:指从大数据集群(HDFS、HIVE)向非大数据集群(RDBMS)中传输数据。关键字export。

HIVE/HDFS到RDBMS

$ bin/sqoop export \--connect jdbc:mysql://webapp200:3306/offlinecalc \--username root \--password 000000 \--table country \--num-mappers 1 \--export-dir /user/hive/warehouse/country_hive \--input-fields-terminated-by "\t"

Hive和hdfs两者命令一样;

--export-dir /user/hive/warehouse/country_hive \ 为hive目录或者hdfs目录。

脚本打包

使用opt格式的文件打包sqoop命令,然后执行

创建一个.opt文件

$ touch exportdata.opt

编写sqoop脚本

$ vi /opt/shell/covid19/exportdata.opt

脚本如下(以下脚本是笔者在环境中使用过的)

export--connectjdbc:mysql://webapp200:3306/offline--usernameroot--password000000--tablet_infectstatistics--num-mappers1--export-dir/user/hive/warehouse/covid19count.db/t_infectstatistics/cty=china--input-fields-terminated-by","--update-modeallowinsert--update-keycountry,area

注意格式:每个属性与属性值必须换行,不能有任何空格。

执行脚本文件

$ sqoop --options-file /opt/shell/covid19/exportdata.opt

以上脚本可用crontab、azkaban、oozie等定时任务框架进行调用,设置定时执行。

Azkaban案例:创建job文件:sqoop.job

type=commandcommand=sqoop --options-file /opt/shell/covid19/exportdata.opt

sqoop.job文件和exportdata.opt文件一起压缩成zip包,导入到azkaban中进行任务设置,即可执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值