导入表的所有字段

sqoop import --connect jdbc:oracle:thin:@192.168.1.100:1521:ORCL \
--username SCOTT --password tiger \
--table EMP -m 1;

查看执行结果:

hadoop fs -cat /user/hadoop/EMP/part-m-00000

7369,SMITH,CLERK,7902,1980-12-17 00:00:00.0,800,null,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00.0,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22 00:00:00.0,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02 00:00:00.0,2975,null,20
……

说明:
1)默认导入到HDFS的路径是:/user/hadoop(用户名)/EMP (表名),如果EMP目录已经存在,则报错;
需要先删除已经存在的目录:hadoop fs -rmr /user/hadoop/EMP;
如果相同的命令导入多次,也会报错的,需要先删除已经存在的目录;
2)-m 1表示使用几个map任务处理,sqoop默认采用4个map任务,有几个任务在HDFS的执行结果中就有几个part-m;
3)sqoop默认从数据库导入到HDFS的分隔符是逗号;
4)空列的值使用null;
5)sqoop中的map数设置原则:一个表的数据抽取不超过3分钟,否则就增加map数;

  

导入表的指定字段并指定目标地址

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password  tiger \
--table EMP  \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir EMP_COLUMN  -m 1;

查看执行结果:

hadoop fs -cat /user/hadoop/EMP_COLUMN/part-m-00000

7369,SMITH,CLERK,800,null
7499,ALLEN,SALESMAN,1600,300
7521,WARD,SALESMAN,1250,500
7566,JONES,MANAGER,2975,null
7654,MARTIN,SALESMAN,1250,1400
......

说明:
1)通过--target-dir指定导入到HDFS的具体位置;
2)通过--columns指定需要导入的列;

导入表的指定字段并指定目标地址使用指定的分隔符 

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP  \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir EMP_COLUMN_SPLIT \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '' --null-non-string '0'  -m 2;

查看执行结果:

hadoop fs -ls /user/hadoop/EMP_COLUMN_SPLIT

/user/hadoop/EMP_COLUMN_SPLIT/_SUCCESS
/user/hadoop/EMP_COLUMN_SPLIT/_logs
/user/hadoop/EMP_COLUMN_SPLIT/part-m-00000
/user/hadoop/EMP_COLUMN_SPLIT/part-m-00001  hadoop fs -cat /user/hadoop/EMP_COLUMN_SPLIT/part-m-00001
7654    MARTIN  SALESMAN        1250    1400
7698    BLAKE   MANAGER 2850    0
7782    CLARK   MANAGER 2450    0
7788    SCOTT   ANALYST 3000    0
7839    KING    PRESIDENT       5000    0
7844    TURNER  SALESMAN        1500    0

由于这里使用了2个map任务,所以在hdfs的文件中就有了2个part; 由于COMM是NUMBER类型,所以HDFS中就是0。
说明:
1)--null-string '': 当string类型的字段为空时,使用''代替
2)--null-non-string 0 : 当非string类型的字段为空时,使用0代替,项目中不常使用这个配置。
3)--fields-terminated-by '\t':字段之间采用tab分隔
4)--lines-terminated-by '\n':行之间采用回车分隔

  

根据条件导入数据

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP  \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir EMP_COLUMN_WHERE \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--where 'SAL>2000' \
--null-string '' --null-non-string '0'  -m 1 ;

查看执行结果:

hadoop fs -cat /user/hadoop/EMP_COLUMN_WHERE/part-m-00000

7566 JONES MANAGER 2975 0
7698 BLAKE MANAGER 2850 0
7782 CLARK MANAGER 2450 0
7788 SCOTT ANALYST 3000 0
7839 KING PRESIDENT 5000 0
7902 FORD ANALYST 3000 0

  

保护数据库密码方式

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT  \
--target-dir EMP_COLUMN_PASSWORD1 \
--table EMP -m 1 \
-P;

Enter password:

在执行时通过命令行交互的方式输入密码;

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT \
--table EMP \
--target-dir EMP_COLUMN_PASSWORD2 \
--password-file /home/hadoop/my-sqoop-password  -m 1 ;

可以将密码放置到一个文件中,并且设置这个文件只针对某些人可读、可写权限,也能起到密码安全的作用;

更改导入文件格式

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP -m 1 \
--target-dir EMP_SEQUENCEFILE \
--as-sequencefile ;
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP -m 1 \
--target-dir EMP_AVRODATAFILE \
--as-avrodatafile  ;

增量数据导入

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP -m 1 \
--target-dir EMP_APPEND \
--incremental append \
--check-column EMPNO \
--last-value 7788  ;

只导入数据 empno>7788(并不包括7788)的数据,可实现增量导入

查看执行结果:hadoop fs -cat /user/hadoop/EMP_APPEND/part-m-00000

7839,KING,PRESIDENT,null,1981-11-17,5000,null,10
7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23,1100,null,20
7900,JAMES,CLERK,7698,1981-12-03,950,null,30
7902,FORD,ANALYST,7566,1981-12-03,3000,null,20
7934,MILLER,CLERK,7782,1982-01-23,1300,null,10

导入没有主键的表到HDFS中

以上的案例导出的表是有主键的,下面来演示一个没有主键的表的导出操作。以表SALGRADE为例

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table SALGRADE  \
--target-dir SALGRADE \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '' --null-non-string '0'  -m 2;

报错:
ERROR tool.ImportTool: Error during import: No primary key could be found for table SALGRADE. Please specify one with 
--split-by or perform a sequential import with '-m 1'.
原因是没有找到主键,详见《数据库导入到HDFS原理》,解决办法如下:
1)添加主键;
2)使用--split-by ' GRADE';
3)使用-m 1,m为几那么在HDFS上就会生成几个文件,就不存在按照字段拆分多个任务的问题;

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table SALGRADE  \
--target-dir SALGRADE \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--split-by 'GRADE' --null-string '' --null-non-string '0'  -m 2;

查看执行结果:
hadoop fs -ls /user/hadoop/SALGRADE

/user/hadoop/SALGRADE/_SUCCESS
/user/hadoop/SALGRADE/_logs
/user/hadoop/SALGRADE/part-m-00000
/user/hadoop/SALGRADE/part-m-00001    hadoop fs -cat /user/hadoop/SALGRADE/part-m-00000
1       700     1200
2       1201    1400

 

文件脚本导入命令

命令太长,不便查看,将命令写到文件中去:emp.opt
/home/hadoop/luogankun/workspace/shell/sqoop下创建emp.opt

import
--connect
jdbc:oracle:thin:@192.168.1.100:1521:ORCL
--username
SCOTT
--password
tiger
--table
EMP
--target-dir
EMP_OPTIONS_FILE
-m
2

执行脚本:

cd  /home/hadoop/luogankun/workspace/shell/sqoop
sqoop --options-file ./emp.opt
分类: sqoop
标签: sqoop

sqoop操作之Oracle导入到HDFS相关推荐

  1. oracle clob 查询换行,sqoop clob从Oracle导入到hive   回车换行导致记录增多

    sqoop clob从Oracle导入到hive   回车换行导致记录增多 发布时间:2020-06-27 02:45:01 来源:51CTO 阅读:3159 作者:jackwxh sqoop imp ...

  2. Sqoop将MySQL数据导入到HDFS和Hive中

    一.将数据从mysql导入 HDFS sqoop import --connect jdbc:mysql://192.168.76.1:3306/workflow --username root -- ...

  3. 利用Sqoop在数据库和Hive、HDFS之间做ETL操作

    文章目录 @[toc] 目录: 一.利用Sqoop,从Oracle到HDFS 二.利用Sqoop,从Oracle到Hive 三.遇到的问题 目录: 一.利用Sqoop,从Oracle到HDFS 第一步 ...

  4. python etl工具 sqoop hive_python脚本 用sqoop把mysql数据导入hive

    转:https://blog.csdn.net/wulantian/article/details/53064123 用python把mysql数据库的数据导入到hive中,该过程主要是通过pytho ...

  5. 数据如何导入oracle数据库,如何用Oracle导入导出工具来实现Oracle数据库移植?

    Oracle数据库作为目前市场的主流数据库之一,许多应用都在其上进行开发,由于Oracle数据库更新换代的原因和不同的应用程序提供商,可能会造成在一个单位的应用中存在Oracle的几种版本,如Orac ...

  6. oracle数据库读取工具,用Oracle导入导出工具实现Oracle数据库移植

    用Oracle导入导出工具实现Oracle数据库移植.很不错的方法,建议使用![@more@] 用Oracle导入导出工具实现Oracle数据库移植 Oracle数据库作为目前市场的主流数据库之一,许 ...

  7. sqoop从mysql导入数据到hdfs_利用Sqoop将数据从数据库导入到HDFS

    基本使用 如下面这个shell脚本: #Oracle的连接字符串,其中包含了Oracle的地址,SID,和端口号 CONNECTURL=jdbc:oracle:thin:@20.135.60.21:1 ...

  8. Sqoop快速入门【导入数据到HDFS与导出数据到数据库】

    1.Sqoop概述 Sqoop - "SQL到Hadoop和Hadoop到SQL" sqoop是apache旗下一款"Hadoop和关系数据库服务器之间传送数据" ...

  9. 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据

    通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据\ 下文将重点说明通过Sqoop实现Mysql与HDFS互导数据,Mysql与Hbase,Oracle与Hbase的互 ...

最新文章

  1. 新疆弃光量下降14% 弃光问题仍然难解
  2. HttpRequest 与HttpWebRequest 有什么区别
  3. python实现dns欺骗_DNS欺骗攻击
  4. [C++11]final关键字的使用
  5. Python | 程序从列表中删除范围内的所有元素
  6. [数据库]---mysql数据库 使用binlog+canal或binlake进行数据库的复制
  7. 【英语学习】【Level 07】U01 Making friends L2 A new friend from the past
  8. php文本框长度限制,php截取富文本框中的固定长度的字符
  9. 云栖大会「云计算产业升级峰会」免费抢票啦!
  10. 光盘刻录大师刻录flac_Mac DVDRipper Pro(DVD光盘刻录软件)v9.0.1版
  11. 停车场管理系统软件详细设计说明书
  12. AEAI CRM 客户关系管理系统项目介绍
  13. 鹰式价差matlab,期权的价差(2):比例价差、圣诞树型价差
  14. 一分钟教你搞定chrome的安装---redhat7.6如何安装谷歌浏览器
  15. 金融学系列之 Inflation Money Remit
  16. C++ 面向对象、内存管理
  17. cocos creator 角色扮演RPG游戏 动态创建动画,附8方向设置
  18. Java_持久层_MyBatis
  19. 谷歌紧急修复今年已遭利用的第9个0day
  20. idea 打开项目所有java类变成咖啡图标 打开类上面是0110图标

热门文章

  1. 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记
  2. Vue项目 开启gzip
  3. 剑指offer--旋转数组的最小数字
  4. java 数组存入数据库_Java中关于二维数组的理解与使用
  5. Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
  6. 小白兔生小白兔-菲波拉契数列问题
  7. mailto发送邮件
  8. Tomcat 配置 login 和 gas
  9. 多线程——线程间的同步通信
  10. liunx系统不能登陆的问题