【Sqoop】sqoop导入导出
本文简单介绍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导入导出相关推荐
- Hadoop sqoop数据导入导出工具安装
进入sqoop的conf目录,将sqoop-site-template.xml文件重命名为sqoop-site.xml,并修改如下内容:
- Sqoop导入导出的时候总是出现等待5分钟的问题解决办法
25.25.27 Sqoop导入导出的时候总是出现等待5分钟的问题解决办法: HDP3.1 中的 YARN 的 timeline server 默认使用内置的 HBase,不知道为什么,总是过几天就挂 ...
- 利用sqoop将hive数据导入导出数据到mysql
http://niuzhenxin.iteye.com/blog/1726414 运行环境 centos 5.6 hadoop hive sqoop是让hadoop技术支持的clouder公司 ...
- sqoop增量导入hdfs和导出
增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...
- mysql数据与Hadoop之间导入导出之Sqoop实例
前面介绍了sqoop1.4.6的 如何将mysql数据导入Hadoop之Sqoop安装,下面就介绍两者间的数据互通的简单使用命令. 显示mysql数据库的信息,一般sqoop安装测试用 sqoop l ...
- Sqoop导入导出基本操作
Sqoop基本操作 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql-)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- 如何完美解决Sqoop导入导出MySQL数据错位问题
我发现小伙伴们在使用Sqoop把数据从MySQL导入到Hive的过程中经常会遇到数据错位的问题,虽然最后都是通过添加参数的方法来解决这个问题,但是我认为这并不是一个完美的解决方案,所以花了一点时间研究 ...
- 大数据基础(二)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 ...
- Sqoop数据的导入导出与job作业
1. Sqoop导入数据 站在hadoop的立场看: import:数据导入.RDBMS----->Hadoop export:数据导出.Hadoop---->RDBMS 创建表 SET ...
- Sqoop安装部署和数据的导入导出案例详解
目录 一.概述 二.Sqoop的工作机制 三.Sqoop1与Sqoop2架构对比 四.Sqoop安装部署 五.Sqoop的数据导入 1. 列举出所有的数据库 2. 准备表数据 3. 导入数据库表数据到 ...
最新文章
- [shell]简单的shell提示和参数脚本
- 清华团队将Transformer用到3D点云分割
- Metasploit从文件中读取目标地址
- tomcat配置一个线程来调试ThreadLocal的代码问题
- vue cli 脚手架上多页面开发 支持webpack2.x
- UOJ #576. 积的第K小数
- 【活动(北京)】Global Azure Bootcamp
- Onedark风格配色方案
- elementUI 下拉框隐藏时触发相关事件(下拉框下拉显示时不触发)
- 四、	vSphere 6.7 U1(四):部署VCSA
- 【Eclipse】Eclipse使用技巧
- Spring JdbcTemplate 多参数查询,以及like模糊查询处理方式
- CAJ格式文件怎么转换为PDF格式
- Elasticsearch中keyword和numeric对性能的影响分析
- PyG利用MessagePassing搭建GCN实现节点分类
- LintCode 1144.范围加法之二
- 小学计算机网络信息安全教案,黑教版信息技术五年级上册第十五课《网络信息安全》教案.doc...
- Java 小白 设计加油站类和汽车类,加油站提供一个给车加油的方法,参数为剩余汽油数量。每次执行加油方法,汽车的剩余数量都会加2
- 《异星歧途》,特别有意思的一个故事
- UVA12627:Erratic Expansion(奇怪的气球膨胀)
热门文章
- [每日一题] OCP1z0-047 :2013-07-13 oracle 10g正则表达式 REGEXP_LIKE 用法
- Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现
- FlexForAndroid:文件读写
- [转载]Qt之模型/视图(实时更新数据)
- ubuntu使用python opencv_Ubuntu中“利用Opencv + python进行特征匹配”的环境搭建
- redis未授权反弹shell
- 去中心化交易所如何“惊世骇俗”?
- java 基础 泛型
- 图表(Chart Graph)你真的用对了吗?
- 云上持续交付实践系列1 --- java 篇