Sqoop是个命令行工具,用来在Hadoop和rdbms之间传输数据。

以Hadoop的角度看待数据流向,从rdbms往Hadoop是导入用sqoop import命令,反之从hadoop往rdbms下发数据用sqoop export命令

以oracle hive为例子,命令举例:

sqoop import -D oraoop.jdbc.url.verbatim=true --hive-import --hive-overwrite --connect jdbc:oracle:thin:@192.168.1.10:1521:orcl --username usernamexx --password passwdxx --table WH_PRG.TB_JSQ_PRD_GRID_MDF -hive-database test --hive-table hivename  --fetch-size 5000 --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N' -m 1
sqoop export -D oraoop.jdbc.url.verbatim=true --connect "jdbc:oracle:thin:@192.168.1.10:1521:orcl" --username usernamexx --password passwdxx --table  ORACLETABLE  --export-dir /user/hive/warehouse/test.db/tablename/* --input-fields-terminated-by '\001' --input-lines-terminated-by '\n' --input-null-string '\\N' --input-null-non-string '\\N'   -m 1

注意:

oracle表名大写,hive表名保持和创建表时候的大小写,建表是大写,这儿就大写,建表时候小写,这儿就小写  

-m 1表示并行度,根据oracle库的性能自行决定

导入的时候是默认覆盖,如果hive中有同名表,会自动删除重建

导出的时候是追加,要先在oracle测建好空表,而且再次导入时候要把原来的内容清空,否则因为是追加数据会产生重复数据,字段顺序要对齐,否则可能产生列的错位

附1:Sqoop导入常规参数意思

参数 参数名称
others     插件命令附加参数
target-dir     导入HDFS的目标路径
delete-target-dir    如果指定目录存在,则先删除掉
fetch-size    从数据库中批量读取记录数
split-by    按照指定列去分割数据
columns        从表中导出指定的一组列的数据
null-string    字符串类型null时转义为
null-non-string    非字符串类型null时转义为
query    查询语句
where    查询条件
direct    使用直接导出模式(优化速度)
warehouse-dir    HDFS存放表的根路径
append        将数据追加到HDFS上一个已存在的数据集上
as-avrodatafile    将数据导入到Avro
as-sequencefile    将数据导入到SequenceFile
as-textfile    将数据导入到普通文本文件(默认)
boundary-query    边界查询,用于创建分片(InputSplit)
direct-split-size    分割输入stream的字节大小(在直接导入模式下)
inline-lob-limit    设置内联的LOB对象的大小
compress        启用压缩
compression-codec    指定Hadoop的codec方式(默认gzip)
incremental        mode模式
last-value        指定自从上次导入后列的最大值
connect            指定JDBC连接字符串
connection-manager    指定要使用的连接管理器类
driver            指定要使用的JDBC驱动类
username        设置认证用户名
password        设置认证密码
verbose            打印详细的运行信息
connection-param-file    可选,指定存储数据库连接参数的属性文件
hadoop-home        hadoop-home的路径
enclosed-by        字段值前后加上指定的字符
escaped-by        双引号作转义处理
fields-terminated-by    字段分隔符
lines-terminated-by    行分隔符
optionally-enclosed-by    强制给字段值前后都加上指定符号
mysql-delimiters    Mysql默认的分隔符
input-enclosed-by    对字段值前后指定的字符进行解析
input-escaped-by    对含有转义双引号的字段值作转义处理
input-escaped-by    导入使用的字段分隔符
input-lines-terminated-by    导入使用的行分隔符
input-optionally-enclosed-by    导入时强制给字段值前后都加上指定符号
bindir            生成的java文件、class文件及打包为JAR的JAR包文件输出路径
class-name        生成的Java文件指定的名称
jar-file        合并时引入的jar包
outdir    生成的java文件存放路径
package-name    包名
map-column-java    映射的数据类型
table    关系数据库表名
num-mappers    启动map的数量,默认是4个

附2:Sqoop的import工具抽数的几种情况
1. Hive表无分区,全量从Oracle中抽取数据到Hive的表中
sqoop import -D mapred.job.queue.name=root.myqueue    \
–connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase   \
–username jsz                                       \
–password 123456                                     \
–table  mys.test               \
–columns ID,NAME,AGE,SALARY,DATA_DATE \
-m 1                                                             \
–hive-table default.test  \
–create-hive-table \
–hive-drop-import-delims                                        \
–verbose                                                           \
–fetch-size 5000                                                \
–target-dir  /apps/testdata/default/test \
–delete-target-dir \
–hive-overwrite         \
–null-string ‘\\N’      \
–null-non-string ‘\\N’  \
–hive-import;
2. Hive表有分区,增量从Oracle中抽取数据到Hive表中:
sqoop import -D mapred.job.queue.name=root.myqueue   \
–connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase   \
–username jsz                                       \
–password 123456                                     \
–table  mys.test              \
–columns ID,NAME,AGE,SALARY,LCD \
-m 1                                          \
–hive-partition-key op_day                  \
–hive-partition-value 20160525               \
–where “lcd >= trunc(TO_DATE(‘20160525′,’YYYY-MM-DD’),’dd’) and lcd < trunc(TO_DATE(‘20160526′,’YYYY-MM-DD’),’dd’)”  \
–hive-table default.test_partition  \
–create-hive-table \
–hive-drop-import-delims                                        \
–verbose                                                           \
–fetch-size 5000                                                \
–target-dir  /apps/testdata/default/test_partition \
–delete-target-dir \
–hive-overwrite         \
–null-string ‘\\N’      \
–null-non-string ‘\\N’  \
–hive-import;
3.使用select语句:
sqoop import                            \
-D mapred.job.queue.name=root.myqueue      \
-D oracle.sessionTimeZone=America/Los_Angeles  \
–connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase    \
–username jsz   \
–password 123456  \
–query “select ID,NAME,AGE,SALARY,DATA_DATE from mys.test WHERE ID = ‘10086’ and \$CONDITIONS” \
–verbose  \
–fetch-size 5000       \
–hive-table default.test  \
–target-dir  /apps/testdata/default/test \
–delete-target-dir \
–fields-terminated-by ‘\001’      \
–lines-terminated-by ‘\n’      \
-m 1           \
–hive-import           \
–hive-overwrite           \
–null-string   ‘\\N’            \
–null-non-string  ‘\\N’           \
–hive-drop-import-delims

Sqoop的export工具导数的情况:

将Hive的数据导入Oracle,整个过程分为三步:

1) 删除Oracle表的历史数据
sqoop eval  -D mapred.job.queue.name=root.myqueue    \
–connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase  \
–username jsz    \
–password 123456  \
–verbose                       \
–e “delete from mys.test”
2) Hive导出到HDFS指定路径
hive -e “use default;set mapred.job.queue.name=root.myqueue;set hive.insert.into.multilevel.dirs=true;insert overwrite directory ‘/apps/testdata/default/test’ select id,name,age,salary,data_date from default.test;”
3) 将HDFS的数据导入到Oracle中
sqoop export    \
-D mapred.job.queue.name=root.myqueue     \
-D mapred.task.timeout=0     \
–connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase     \
–username jsz     \
–password 123456    \
–table mys.test     \
–columns ID,NAME,AGE,SALARY,DATA_DATE     \
–export-dir /apps/testdata/default/test     \
–verbose     \
–input-null-string ‘\\N’     \
–input-null-non-string ‘\\N’  \
–input-fields-terminated-by ‘\001’     \
–input-lines-terminated-by ‘\n’     \
-m 1

SQOOP的使用方法的更多相关文章

  1. Hadoop数据收集与入库系统Flume与Sqoop

    Hadoop提供了一个中央化的存储系统,其有利于进行集中式的数据分析与数据共享. Hadoop对存储格式没有要求.可以存储用户访问日志.产品信息以及网页数据等数据. 常见的两种数据来源.一种是分散的数 ...

  2. Sqoop-1.4.6 Merge源码分析与改造使其支持多个merge-key

    Sqoop中提供了一个用于合并数据集的工具sqoop-merge.官方文档中的描述可以参考我的另一篇博客Sqoop-1.4.5用户手册. Merge的基本原理是,需要指定新数据集和老数据集的路径,根据 ...

  3. Hive速览

    一.概述 Hive由Facebook开源,是一个构建在Hadoop之上的数据仓库工具 将结构化的数据映射成表 支持类SQL查询,Hive中称为HQL 1.读模式 2.Hive架构 3.使用Hive的原 ...

  4. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  5. Hue整合Sqoop报空指针异常的解决方法

    hue是一个Apache基金会下的一个开源图形化管理工具,使用python语言开发,使用的框架是Django.而sqoop也是Apache的一个开源工具,是使用Java语言开发,主要用于进行hdfs和 ...

  6. Hadoop生态圈-Sqoop部署以及基本使用方法

    Hadoop生态圈-Sqoop部署以及基本使用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与 ...

  7. spark+hadoop+sqoop+hive平台bug解决方法

    bug集锦 1. hadoop平台datanode无法启动: 原因: 由于多次hdfs namenode -format导致dfs/data/current/version中的cluserID与当前的 ...

  8. Hadoop学习笔记—18.Sqoop框架学习

    一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...

  9. [大数据之Sqoop] —— Sqoop初探

    Sqoop是一款用于把关系型数据库中的数据导入到hdfs中或者hive中的工具,当然也支持把数据从hdfs或者hive导入到关系型数据库中. Sqoop也是基于Mapreduce来做的数据导入. 关于 ...

随机推荐

  1. eth0: ERROR while getting interface flags: No such device的解决方法、Linux怎么修改IP以及ping不通的处理方法

    首先输入ifconfig命令查看当前的ip信息 发现没有eth0这个网卡设备,有ens33 接着输入命令:ifconfig ens33 192.168.2.110    --  修改临时ip地址,系统 ...

  2. 本地jar包在maven工程中pom引用

    背景   在使用Maven的过程中,经常碰到有些jar包在中央仓库没有的情况.如果公司有私服,那么就把jar包安装到私服上.如果没有私服,那就把jar包安装到本地Maven仓库.下面是如何把jar包导 ...

  3. 第一章 了解Web及网络基础

    第一章 了解Web及网络基础 Web建立基础.HTTP如何诞生发展 1.使用HTTP协议访问Web 在浏览器地址栏中输入URL之后过程: 1)DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地 ...

  4. 2019SDN上机第2次作业

    1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况 创建拓扑: 拓扑支持OpenFlo ...

  5. 挂载ESP(EFI)分区到Windows,并让资源管理器有权限读写

    如果你的磁盘精灵经常原地自爆,但你又想读写ESP分区的文件,那么请看此贴 1 //例子如下 diskpart //运行Diskpart工具 list disk //列出所有磁盘 sel disk // ...

  6. 通过扫码打开IOS的App Store下载APP(Android版暂时没找到解决方法)

    项目需求:扫码根据不同平台下载不同版本的APP.主要是ios和Android. 网上找了很多,前面判断平台的代码很容易找到,但是后面的就有些坑了.有的人的是根本跑不通.有的是代码补全. 下面是 微信扫 ...

  7. OAuth2、OpenID、SMAL 对比

    对比点 OAuth2.0 OpenID SMAL2 票据格式 JSON or SAML2 JSON XML 支持授权 Yes Yes Yes 支持认证 “伪认证” Yes Yes 创建年份 2005 ...

  8. 认识MicroBit

    MicroBit是BBC(英国广播公司),为孩子们推出一款开发板,或者叫控制板,可以简单地理解为通过这块电子板,可以控制接在其外围的电子模板,可以读入数据,也可以输出数据,模拟的或数字的数据.这样一来 ...

  9. 图解微信小程序---添加tabBar底部菜单,添加已做好轮播图操作

    图解微信小程序---添加tabBar底部菜单,添加已做好轮播图操作 什么是tabBar? 顶部或者底部tab栏如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以 ...

  10. Zookeeper到底是什么

    1. 什么是Zookeeper 用一句话对其进行定义就是:它是一套高吞吐的分布式协调系统.从中我们可以知道Zookeeper至少具有以下特点: 1.Zookeeper的主要作用是为分布式系统提供协调服 ...