本文简单介绍Sqoop如下操作:

Import:

​ rdbms导入HDFS;

​ rdbms导入Hive;

​ rdbms导入Hbase;

Export:

​ Hive导出到rdbms;

​ Hbase导出到rdbms;

其中,rdbms以mysql数据库为例。

环境准备

mysql中建库、建表并插入测试数据:

create database userdb;
use userdb;create table emp(
id int(11) default null,
name varchar(100) default null,
deg varchar(100) default null,
salary int(11) default null,
dept varchar(10) default null,
create_time timestamp not null default current_timestamp,
update_time timestamp not null default current_timestamp on update current_timestamp,
is_delete bigint(20) default '1'
)
engine = innodb default charset=latin1;insert into emp(id,name,deg,salary,dept) values (1201,'gopal','manager',50000,'TP'),
(1202,'manisha','Proof reader',50000,'TP'),
(1203,'khalil','php dev',30000,'AC'),
(1204,'prasanth','php dev',30000,'AC'),
(1205,'kranthi','admin',20000,'TP');

一、Import

1. rdbms导入HDFS;

–target-dir: 指定目标路径

–delete-tartget-dir:如果目标路径存在,先删除

–fields-terminated-by: 指定字段间的分隔符

1.1 全表导入

需求:导出emp表到HDFS的/sqoop/import/emp

Sqoop命令行导入:

cd /hadoop/install/sqoop-1.4.6-cdh5.14.2/bin/sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table emp \
--delete-target-dir \
--target-dir /sqoop/import/emp \
--fields-terminated-by ',' \
-m 1

查看导入数据:

hdfs dfs -cat /sqoop/import/emp/part*1201,gopal,manager,50000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1202,manisha,Proof reader,50000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1203,khalil,php dev,30000,AC,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1204,prasanth,php dev,30000,AC,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1205,kranthi,admin,20000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1

1.2 where条件导入

Sqoop命令行导入:

cd /hadoop/install/sqoop-1.4.6-cdh5.14.2/bin/sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table emp \
--where "id=1202" \
--delete-target-dir \
--target-dir /sqoop/import/emp \
--fields-terminated-by ',' \
-m 1

查看导入数据:

hdfs dfs -cat /sqoop/import/emp/part*1202,manisha,Proof reader,50000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1

1.3 query子查询导入

当使用query导入时需要注意以下几点:

(1) 无需–table 参数

(2)需要where条件

(3)需要$CONDITIONS,java程序用于拼接其他代码

Sqoop命令行导入:

cd /hadoop/install/sqoop-1.4.6-cdh5.14.2/bin/sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--query 'select * from emp where 1=1 and $CONDITIONS' \
--delete-target-dir \
--target-dir /sqoop/import/emp \
--fields-terminated-by ',' \
-m 1

查看导入数据:

hdfs dfs -cat /sqoop/import/emp/part*1201,gopal,manager,50000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1202,manisha,Proof reader,50000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1203,khalil,php dev,30000,AC,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1204,prasanth,php dev,30000,AC,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1205,kranthi,admin,20000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1

2. rdbms导入Hive;

拷贝Hive jar包到Sqoop 的lib目录:

cp /hadoop/install/hive-1.1.0-cdh5.14.0/lib/hive-exec-1.1.0-cdh5.14.2.jar /hadoop/install/sqoop-1.4.6-cdh5.14.2/lib/

创建Hive表:

Hive表如不创建,导入时自动创建mysql中同构表。

大家可以根据实际情况创建,此文选择不创建。

Sqoop命令行导入:

cd /hadoop/install/sqoop-1.4.6-cdh5.14.2/bin/sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table emp \
--hive-import \
--hive-table test.emp_hive \
--fields-terminated-by ',' \
-m 1

查看导入数据:

select id, name, salary from test.emp_hive;+-------+-----------+---------+--+
|  id   |   name    | salary  |
+-------+-----------+---------+--+
| 1201  | gopal     | 50000   |
| 1202  | manisha   | 50000   |
| 1203  | khalil    | 30000   |
| 1204  | prasanth  | 30000   |
| 1205  | kranthi   | 20000   |
+-------+-----------+---------+--+

3. rdbms导入Hbase;

修改sqoop-env.sh

#添加Hbase环境变量#set the path to where bin/hbase is available
export HBASE_HOME=/hadoop/install/hbase-1.2.0-cdh5.14.2

Sqoop命令行导入:

cd /hadoop/install/sqoop-1.4.6-cdh5.14.2/bin/sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table emp \
--columns "id,name,deg,salary,dept,create_time,update_time,is_delete" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "emp_hbase" \
--split-by id \
-m 1

查看导入数据:

scan 'emp_hbase'

二、 Export

1. Hive导出到rdbms;

HDFS中 /sqoop/import/emp/part-m-00000 如下数据:

1203,khalil,php dev,30000,AC,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1204,prasanth,php dev,30000,AC,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1
1205,kranthi,admin,20000,TP,2020-02-21 00:15:24.0,2020-02-21 00:15:24.0,1

mysql创建表:

create table emp_exp(
id int(11) default null,
name varchar(100) default null,
deg varchar(100) default null,
salary int(11) default null,
dept varchar(10) default null,
create_time timestamp not null default current_timestamp,
update_time timestamp not null default current_timestamp on update current_timestamp,
is_delete bigint(20) default '1'
)
engine = innodb default charset=latin1;

Sqoop命令行导入:

cd /hadoop/install/sqoop-1.4.6-cdh5.14.2/bin/sqoop export \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table emp_exp \
--export-dir /sqoop/import/emp/part-m-00000 \
--input-fields-terminated-by ","

查看导入数据:

select id,name,salary from emp_exp;
+------+----------+--------+
| id   | name     | salary |
+------+----------+--------+
| 1205 | kranthi  |  20000 |
| 1201 | gopal    |  50000 |
| 1202 | manisha  |  50000 |
| 1203 | khalil   |  30000 |
| 1204 | prasanth |  30000 |
+------+----------+--------+

2. Hbase导出到rdbms;

因Sqoop不能识别Hfile,所以采用如下方式导出:

Hbase -> Hive外部表 -> Hive内部表 -> rdbms

创建Hive外部表:

create external table test.hbase2mysql
(id int,name string,deg string,salary int,dept string,create_time string,update_time string,is_delete int)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties ("hbase.columns.mapping" = ":key,info:name,info:deg,info:salary,info:dept,info:create_time,info:update_time,info:is_delete")
tblproperties ("hbase.table.name" = "emp_hbase",
"hbase.mapred.output.outputtable" = "hbase2mysql");

创建Hive内部表,并插入数据:

create table test.hive2mysql as select * from test.hbase2mysql;

Sqoop命令行导入:

cd /hadoop/install/sqoop-1.4.6-cdh5.14.2/bin/sqoop export \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table emp_exp \
--export-dir /user/hive/warehouse/test.db/hive2mysql \
--input-fields-terminated-by '\001' \
--input-null-string '\\N' \
--input-null-non-string '\\N'

查看导入数据:

select id,name,salary from emp_exp;
+------+----------+--------+
| id   | name     | salary |
+------+----------+--------+
| 1205 | kranthi  |  20000 |
| 1201 | gopal    |  50000 |
| 1202 | manisha  |  50000 |
| 1203 | khalil   |  30000 |
| 1204 | prasanth |  30000 |
+------+----------+--------+

总结:

Sqoop具有丰富的参数,因篇幅原因,本文不能全部列举。
实际运用中,可以使用sqoop import help或者sqoop export help 查看参数。

【Sqoop】sqoop导入导出相关推荐

  1. Hadoop sqoop数据导入导出工具安装

    进入sqoop的conf目录,将sqoop-site-template.xml文件重命名为sqoop-site.xml,并修改如下内容:

  2. Sqoop导入导出的时候总是出现等待5分钟的问题解决办法

    25.25.27 Sqoop导入导出的时候总是出现等待5分钟的问题解决办法: HDP3.1 中的 YARN 的 timeline server 默认使用内置的 HBase,不知道为什么,总是过几天就挂 ...

  3. 利用sqoop将hive数据导入导出数据到mysql

    http://niuzhenxin.iteye.com/blog/1726414 运行环境  centos 5.6   hadoop  hive sqoop是让hadoop技术支持的clouder公司 ...

  4. sqoop增量导入hdfs和导出

    增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...

  5. mysql数据与Hadoop之间导入导出之Sqoop实例

    前面介绍了sqoop1.4.6的 如何将mysql数据导入Hadoop之Sqoop安装,下面就介绍两者间的数据互通的简单使用命令. 显示mysql数据库的信息,一般sqoop安装测试用 sqoop l ...

  6. Sqoop导入导出基本操作

    Sqoop基本操作 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql-)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...

  7. 如何完美解决Sqoop导入导出MySQL数据错位问题

    我发现小伙伴们在使用Sqoop把数据从MySQL导入到Hive的过程中经常会遇到数据错位的问题,虽然最后都是通过添加参数的方法来解决这个问题,但是我认为这并不是一个完美的解决方案,所以花了一点时间研究 ...

  8. 大数据基础(二)hadoop, mave, hbase, hive, sqoop在ubuntu 14.04.04下的安装和sqoop与hdfs,hive,mysql导入导出

    hadoop, mave, hbase, hive, sqoop在ubuntu 14.04.04下的安装 2016.05.15 本文测试环境: hadoop2.6.2 ubuntu 14.04.04 ...

  9. Sqoop数据的导入导出与job作业

    1. Sqoop导入数据 站在hadoop的立场看: import:数据导入.RDBMS----->Hadoop export:数据导出.Hadoop---->RDBMS 创建表 SET ...

  10. Sqoop安装部署和数据的导入导出案例详解

    目录 一.概述 二.Sqoop的工作机制 三.Sqoop1与Sqoop2架构对比 四.Sqoop安装部署 五.Sqoop的数据导入 1. 列举出所有的数据库 2. 准备表数据 3. 导入数据库表数据到 ...

最新文章

  1. [shell]简单的shell提示和参数脚本
  2. 清华团队将Transformer用到3D点云分割
  3. Metasploit从文件中读取目标地址
  4. tomcat配置一个线程来调试ThreadLocal的代码问题
  5. vue cli 脚手架上多页面开发 支持webpack2.x
  6. UOJ #576. 积的第K小数
  7. 【活动(北京)】Global Azure Bootcamp
  8. Onedark风格配色方案
  9. elementUI 下拉框隐藏时触发相关事件(下拉框下拉显示时不触发)
  10. 四、 vSphere 6.7 U1(四):部署VCSA
  11. 【Eclipse】Eclipse使用技巧
  12. Spring JdbcTemplate 多参数查询,以及like模糊查询处理方式
  13. CAJ格式文件怎么转换为PDF格式
  14. Elasticsearch中keyword和numeric对性能的影响分析
  15. PyG利用MessagePassing搭建GCN实现节点分类
  16. LintCode 1144.范围加法之二
  17. 小学计算机网络信息安全教案,黑教版信息技术五年级上册第十五课《网络信息安全》教案.doc...
  18. Java 小白 设计加油站类和汽车类,加油站提供一个给车加油的方法,参数为剩余汽油数量。每次执行加油方法,汽车的剩余数量都会加2
  19. 《异星歧途》,特别有意思的一个故事
  20. UVA12627:Erratic Expansion(奇怪的气球膨胀)

热门文章

  1. [每日一题] OCP1z0-047 :2013-07-13 oracle 10g正则表达式 REGEXP_LIKE 用法
  2. Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现
  3. FlexForAndroid:文件读写
  4. [转载]Qt之模型/视图(实时更新数据)
  5. ubuntu使用python opencv_Ubuntu中“利用Opencv + python进行特征匹配”的环境搭建
  6. redis未授权反弹shell
  7. 去中心化交易所如何“惊世骇俗”?
  8. java 基础 泛型
  9. 图表(Chart Graph)你真的用对了吗?
  10. 云上持续交付实践系列1 --- java 篇