一、export

1、export概述

export工具将一组文件从HDFS导入到RDBMS。目标表必须已经存在于数据库中。根据用户指定的分隔符读取输入文件并将其解析为一组记录, 只有map;

[root@hadoop-senior sqoop-1.4.5-cdh5.3.6]# bin/sqoop help export

sqoop-export有三种模式:

    默认模式:将它们转换为一组将INSERT语句注入数据库的语句。

    更新模式:Sqoop将生成UPDATE替换数据库中现有记录的语句。

    调用模式:Sqoop将为每条记录创建一个存储过程调用。

2、语法参数

sqoop-export有两种语法:
sqoop export (generic-args) (export-args)
sqoop-export (generic-args) (export-args) ##常用参数:
--connect <jdbc-uri>:指定JDBC连接的数据库地址。
--connection-manager <class-name>:指定要使用的连接管理器类。
--driver <class-name>:手动指定要使用的JDBC驱动类。
--hadoop-mapred-home <dir>:指定$ HADOOP_MAPRED_HOME路径
--help:打印使用说明
--password-file:为包含认证密码的文件设置路径。
-P:从控制台读取密码。
--password <password>:设置验证密码。
--username <username>:设置验证用户名。
--verbose:在工作时打印更多信息。
--connection-param-file <filename>:提供连接参数的可选属性文件。
--relaxed-isolation:将连接事务隔离设置为未提交给映射器的读取。 ##验证参数
--validate:启用对复制数据的验证,仅支持单个表复制。
--validator <class-name>:指定要使用的验证程序类。
--validation-threshold <class-name>:指定要使用的验证阈值类。
--validation-failurehandler <class-name>:指定要使用的验证失败处理程序类。 ##导出控制参数
--columns <col,col,col…>:要导出到表格的列。
--direct:使用直接导出快速路径。
--export-dir <dir>:用于导出的HDFS源路径。
-m,--num-mappers <n>:使用n个mapper任务并行导出。
--table <table-name>:要填充的表。
--call <stored-proc-name>:存储过程调用。
--update-key <col-name>:锚点列用于更新。如果有多个列,请使用以逗号分隔的列列表。
--update-mode <mode>:指定在数据库中使用不匹配的键找到新行时如何执行更新。mode包含的updateonly默认值(默认)和allowinsert。
--input-null-string <null-string>:字符串列被解释为空的字符串。
--input-null-non-string <null-string>:要对非字符串列解释为空的字符串。
--staging-table <staging-table-name>:数据在插入目标表之前将在其中展开的表格。
--clear-staging-table:表示可以删除登台表中的任何数据。
--batch:使用批处理模式执行基础语句。 #############详解#############
一条导出语句中,必须有--export-dir参数和一个--table或者--call参数。这些指定要填充到数据库(或要调用的存储过程)的表以及HDFS中包含源数据的目录。 1、
--columns参数选择列并控制它们的排序。
默认情况下,表格中的所有列都被选中用于导出。以逗号为间隔选择和排列各个列。
例如:--columns "col1,col2,col3"
注意:--columns参数中不包含的列需要定义默认值或允许NULL值。否则,数据库将拒绝导入数据,从而导致sqoop导入失败。 2、
--num-mappers或-m 参数控制mapper任务的数量。默认情况下,Sqoop将为导出过程提供4个并行任务。
也可以根据目录中存在的文件数来控制mapper的数量。导出性能取决于并行度。
如果数据库已经在更新索引,调用触发器等方面遇到瓶颈,则额外的负载可能会降低性能。 3、
dircet模式
--direct参数来指定direct模式的代码路径。此项可能比标准JDBC的性能更高。 4、
字符串转换 --input-null-string和--input-null-non-string参数都是可选的。如果--input-null-string未指定,那么对于字符串类型的列,字符串“null”将被解释为空。如果--input-null-non-string未指定,则字符串“null”和空字符串将被解释为非字符串列的空值。 注意,除了由--input-null-non-string参数指定外,空字符串将始终被解释为非字符串列的空值。 5、
指定分段表 --staging-table选项充当用于分阶段导出数据的辅助表。 由于Sqoop将导出过程分解为多个事务,导致失败的导出作业可能导致部分数据被提交给数据库。这可能进一步导致后续作业由于在某些情况下插入冲突而失败,或导致其他数据中的重复数据。那么这种情况下就可以通过指定临时表来解决此问题,该阶段性数据最终在单个事务中移动到目标表中。 为了使用分段工具,您必须在运行导出作业之前创建分段表。该表必须在结构上与目标表相同。此表应该在导出作业运行之前为空,或者--clear-staging-table必须指定该选项。如果临时表包含数据并且指定了--clear-staging-table选项,则Sqoop将在开始导出作业之前删除分段表中所有数据。 注意:在将数据导入目标表之前支持暂存数据,但是不可用于--direct导出。--update-key更新现有数据的选项以及存储过程用于插入数据时调用导出时也不可用。 ##输入格式参数
--input-enclosed-by <char>:设置必需的字段封闭器。
--input-escaped-by <char>:设置输入转义字符。
--input-fields-terminated-by <char>:设置输入字段分隔符。
--input-lines-terminated-by <char>:设置输入的行尾字符。
--input-optionally-enclosed-by <char> 设置字段包含字符。 ##输出格式参数
--enclosed-by <char>:设置必需的字段包围字符。
--escaped-by <char>:设置转义字符。
--fields-terminated-by <char>:设置字段分隔符。
--lines-terminated-by <char>:设置行尾字符。
--mysql-delimiters:使用MySQL的默认分隔符集:fields:, lines:\n escaped-by:\ optional-enclosed-by:'。
--optionally-enclosed-by <char>:设置字段包含字符。 Sqoop会自动生成代码来解析和解释包含要导出到数据库的数据的文件记录。如果这些文件是使用非默认分隔符(以换行符分隔的记录的逗号分隔字段)创建的,则应该再次指定相同的分隔符,以便Sqoop可以解析您的文件。 如果指定了不正确的分隔符,则Sqoop将无法在每行中找到足够的列。这会导致导出mapper任务失败并抛出异常:ParseExceptions。 ##代码生成参数
--bindir <dir>:编译对象的输出目录。
--class-name <name>:设置生成的类名称。这覆盖--package-name。与之结合使用时--jar-file,设置输入类。
--jar-file <file>:禁用代码生成;使用指定的jar。
--outdir <dir>:生成代码的输出目录。
--package-name <name>:将自动生成的类放入此包中。
--map-column-java <m>:覆盖已配置列的从SQL类型到Java类型的默认映射。 如果要导出的记录是作为先前导入的结果生成的,则可以使用原始生成的类读取数据。在这种情况下指定--jar-file和--class-name避免指定分隔符。 现有生成的代码的使用与--update-key是不兼容的;更新模式导出需要新的代码生成来执行更新。也不能使用--jar-file参数,并且必须完全指定任何非默认分隔符。

二、export使用

1、从HDFS导入到mysql

##准备数据
[root@hadoop-senior ~]# touch /opt/datas/user.txt [root@hadoop-senior ~]# vim !$
12,beifeng,beifeng
13,xuanyun,xuanyu ##上传到hdfs
[root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -mkdir -p /user/root/sqoop/exp/user/ [root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -put /opt/datas/user.txt /user/root/sqoop/exp/user/ ##导入到mysql
bin/sqoop export \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--export-dir /user/root/sqoop/exp/user/ \
--num-mappers 1
##查询,已经导入了
mysql> select * from my_user;
+----+---------+---------+
| id | account | passwd |
+----+---------+---------+
| 1 | admin | admin |
| 2 | pu | 12345 |
| 3 | system | system |
| 4 | zxh | zxh |
| 5 | test | test |
| 6 | pudong | pudong |
| 7 | qiqi | qiqi |
| 12 | beifeng | beifeng |
| 13 | xuanyun | xuanyu |
+----+---------+---------+
9 rows in set (0.00 sec)

三、将RDBMS表中的数据导入到Hive表中

因为Hive数据存储在hdfs上,底层原理类似于hdfs-->RDBMS;

RDBMS—>HDFS—>Hive

先将数据导入到hdfs,再load data到hive;

##创建hive表,这里用SQL文件的方式
[root@hadoop-senior ~]# touch /opt/datas/imp-hive-user.sql
[root@hadoop-senior ~]# vim /opt/datas/imp-hive-user.sql
use default ;
drop table if exists user_hive ;
create table user_hive(
id int,
account string,
password string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ; [root@hadoop-senior hive-0.13.1-cdh5.3.6]# bin/hive -f /opt/datas/imp-hive-user.sql hive (default)> show tables;
user_hive ##将mysql数据导入到hive表中
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--fields-terminated-by '\t' \
--delete-target-dir \
--num-mappers 1 \
--hive-import \
--hive-database default \
--hive-table user_hive #在hive中查询,有数据了
hive (default)> select * from user_hive;
OK
user_hive.id user_hive.account user_hive.password
1 admin admin
2 pu 12345
3 system system
4 zxh zxh
5 test test
6 pudong pudong
7 qiqi qiqi
12 beifeng beifeng
13 xuanyun xuanyu
Time taken: 0.045 seconds, Fetched: 9 row(s)

四、导出Hive表中数据到RDBMS中

##创建mysql表
CREATE TABLE `my_user2` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`account` varchar(255) DEFAULT NULL,
`passwd` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
); mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| my_user |
| my_user2 |
+----------------+
2 rows in set (0.00 sec) ##导入到mysql
bin/sqoop export \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user2 \
--export-dir /user/hive/warehouse/user_hive \
--num-mappers 1 \
--input-fields-terminated-by '\t' ##mysql查询
mysql> select * from my_user2;
+----+---------+---------+
| id | account | passwd |
+----+---------+---------+
| 1 | admin | admin |
| 2 | pu | 12345 |
| 3 | system | system |
| 4 | zxh | zxh |
| 5 | test | test |
| 6 | pudong | pudong |
| 7 | qiqi | qiqi |
| 12 | beifeng | beifeng |
| 13 | xuanyun | xuanyu |
+----+---------+---------+
9 rows in set (0.00 sec)

1.131.15 Sqoop导出数据Export使用的更多相关文章

  1. sqoop导出数据

    export是HDFS里的文件导出到RDBMS的工具,不能从hive.hbase导出数据,且HDFS文件只能是文本格式.如果要把hive表数据导出到RDBMS,可以先把hive表通过查询写入到一个临时 ...

  2. sqoop导出数据|Hive|HDFS和脚本编写

    导出数据 在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用export关键字. HIVE/HDFS到RDBMS ...

  3. 大数据学习——sqoop导出数据

    把数据从hadoop导出到关系型数据库 将数据从HDFS导出到RDBMS数据库 导出前,目标表必须存在于目标数据库中. u  默认操作是从将文件中的数据使用INSERT语句插入到表中 u  更新模式下 ...

  4. 大数据学习之路又之从小白到用sqoop导出数据

    写这篇文章的目的是总结自己学习大数据的经验,以为自己走了很多弯路,从迷茫到清晰,真的花费了很多时间,希望这篇文章能帮助到后面学习的人. 一.配置思路 安装linux虚拟机--->创建三台虚拟机- ...

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

    一.导入导出数据库常用命令语句 1)列出mysql数据库中的所有数据库命令  #  sqoop list-databases --connect jdbc:mysql://localhost:3306 ...

  6. Sqooop- 使用Sqoop进行数据的导入导出

    Sqoop是Apache旗下的一个开源框架,专门用来做数据的导入和导出. 官网:https://sqoop.apache.org/ Sqoop的安装非常简单,只需要把下载下来的tar包解压设置两个环境 ...

  7. sqoop与PG库导入导出数据

    导入数据到Hive sqoop import --connect jdbc:postgresql://172.66.6.666/radar5g4h --username postgres --pass ...

  8. sqoop与hbase导入导出数据

    环境:sqoop1.4.6+hadoop2.6+hbase1.1+mysql5.7 说明: 1.文中的导入导出的表结构借鉴了网上的某篇博客 2.mysql导入hbase可以直接通过sqoop进行 3. ...

  9. 第3节 sqoop:6、sqoop的数据增量导入和数据导出

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

随机推荐

  1. Asp.Net Core 初探 (三)

    昨天失败的生产环境部署就先放着,明天再解决! 今天利用中午的空余时间看了一下Asp.net core 的Areas . 相对于Asp.net MVC5 以及之前的版本,asp.net core 的Ar ...

  2. iOS 浅赋值、深复制、全然复制的知识点梳理验证(附加归档解档)

    写于前: 在之前转载的一片文章中.文中对浅复制和深复制进行了具体的解读,同一时候还提到了深复制(one-level-deep copy).全然复制(true copy)的概念,并指出iOS开发中的深复 ...

  3. ubuntu安装rpm格式文件方法(转载)

    red hat 系统用rpm格式的文件安装软件   Debian系列用deb格式的文件安装软件 ubuntu安装软件是用deb格式的文件安装,ubuntu对于rpm格式的文件安装软件是: 先将rmp格 ...

  4. 使用UIWebView载入本地或远程server上的网页

    大家都知道,使用UIWebView载入本地或远程server上的网页,sdk提供了三个载入接口: - (void)loadRequest:(NSURLRequest *)request; - (voi ...

  5. 关于Darwin接入私有协议、私有SDK码流的讨论

          最近做到云视频/云监控的项目,跟团队伙伴讨论到一个架构问题,就是将私有协议的码流数据接入到Darwin,再通过Darwin对外提供高效的RTSP/RTP服务.说到私有协议接入Darwin, ...

  6. if __name__

     我们经常在python 程序中看到 if __name__ == '__main__' :这代表什么意思?    python中 模块是对象,并且所有的模块都有一个内置属性 __name__.一个模 ...

  7. c++的运算符的重载

    1 什么是c++运算符的重载 c++运算符的重载就是说对+.-.>.<等运算符进行重新定义,这样的话,除了基本的类型,所有的类都可以进行基本的运算了,用起来非常方便.特别是用在各种算法中. ...

  8. 基于BASYS2的VHDL程序——数字钟(改进版)

    扩展到时分秒.加了入调时电路,但不知道为什么有两个按键不好使.而且不知道以何种方式假如按键消抖电路,因为加入后会多个时钟控制一个信号,物理不可实现.调试电路待解决.还有,四个数目管中间的那两个圆点怎么 ...

  9. 扩散(diffusion)和弥散(dispersion)有什么区别

    作者:谢易正链接:https://www.zhihu.com/question/23914350/answer/177359196来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  10. http://www.cnblogs.com/yaozhenfa/archive/2015/06/14/4574898.html

    笔者这里采用的是mongoDB官网推荐使用.net驱动: http://mongodb.github.io/mongo-csharp-driver/2.0/getting_started/quick_ ...