SQOOP的使用方法
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的使用方法的更多相关文章
- Hadoop数据收集与入库系统Flume与Sqoop
Hadoop提供了一个中央化的存储系统,其有利于进行集中式的数据分析与数据共享. Hadoop对存储格式没有要求.可以存储用户访问日志.产品信息以及网页数据等数据. 常见的两种数据来源.一种是分散的数 ...
- Sqoop-1.4.6 Merge源码分析与改造使其支持多个merge-key
Sqoop中提供了一个用于合并数据集的工具sqoop-merge.官方文档中的描述可以参考我的另一篇博客Sqoop-1.4.5用户手册. Merge的基本原理是,需要指定新数据集和老数据集的路径,根据 ...
- Hive速览
一.概述 Hive由Facebook开源,是一个构建在Hadoop之上的数据仓库工具 将结构化的数据映射成表 支持类SQL查询,Hive中称为HQL 1.读模式 2.Hive架构 3.使用Hive的原 ...
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- Hue整合Sqoop报空指针异常的解决方法
hue是一个Apache基金会下的一个开源图形化管理工具,使用python语言开发,使用的框架是Django.而sqoop也是Apache的一个开源工具,是使用Java语言开发,主要用于进行hdfs和 ...
- Hadoop生态圈-Sqoop部署以及基本使用方法
Hadoop生态圈-Sqoop部署以及基本使用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与 ...
- spark+hadoop+sqoop+hive平台bug解决方法
bug集锦 1. hadoop平台datanode无法启动: 原因: 由于多次hdfs namenode -format导致dfs/data/current/version中的cluserID与当前的 ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- [大数据之Sqoop] —— Sqoop初探
Sqoop是一款用于把关系型数据库中的数据导入到hdfs中或者hive中的工具,当然也支持把数据从hdfs或者hive导入到关系型数据库中. Sqoop也是基于Mapreduce来做的数据导入. 关于 ...
随机推荐
- C++使用OpenCV打印运行时间
代码 int64 tall = cv::getTickCount(); std::cout<< "time:" << (cv::getTickCount() ...
- JDOJ 1789: 高精度A+B
JDOJ 1789: 高精度A+B JDOJ传送门 洛谷 P1601 A+B Problem(高精) 洛谷传送门 Description 已知两个整数A.B 求A+B Input 第一行为A 第二行为 ...
- Python进阶-Ⅹ 正则表达式(RexEx)、re模块
1.正则表达式(RexEx)常用知识 2.python中re模块的初步使用 1).findall方法 ret = re.findall('a', 'eva egon yuan') # 返回所有满足匹配 ...
- 【转】K-Means聚类算法原理及实现
k-means 聚类算法原理: 1.从包含多个数据点的数据集 D 中随机取 k 个点,作为 k 个簇的各自的中心. 2.分别计算剩下的点到 k 个簇中心的相异度,将这些元素分别划归到相异度最低的簇.两 ...
- 学习vue_01
目录 vue 框架: 框架介绍 基础格式 插值表达式: 文本指令: 事件指令: 属性指令: 小结: js 补充(面向对象): vue 框架: --构建虚拟的DOM结构,(内存内改变对象)- 操作数据的 ...
- github git clone ssh协议 clone超慢解决方案,提高Github Clone速度
即使进行了fq吧但是git clone ssh协议就是慢 2kb/s你能忍,坚决不能忍. github git clone ssh协议 clone超慢解决方案 151.101.72.249 globa ...
- 性感VSCODE在线刷LeetCode的题
安装Nodejs并勾选添加到PATH VSCODE安装插件LeetCode 注册LeetCode账号(注意CN国区和国际区账号不通用),重启VSCODE并点左边栏那个LeetCode图标sign in ...
- 百度语音识别在ROS下的应用-导航
先去wiki下载百度的ros语音识别包:http://wiki.ros.org/baidu_speech 里面包含语音识别voice和speak的node节点,不过voice_node里面有一个小的错 ...
- linux 修改环境变量
直接用export命令:查看已有的环境变量 2.修改profile文件: #vi /etc/profile 在里面加入: export PATH="$PATH:/opt/au1200_rm/ ...
- W5500封装
W5500是韩国一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,W5500同时也是一颗工业级以太网控制芯片,最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图: