导入表的所有字段

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操作之Oracle导入到HDFS的更多相关文章

  1. sqoop操作之ORACLE导入到HIVE

    导入表的所有字段 sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --passw ...

  2. sqoop工具从oracle导入数据2

    sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...

  3. 使用 sqoop 将mysql数据导入到hdfs(import)

    Sqoop 将mysql 数据导入到hdfs(import) 1.创建mysql表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` va ...

  4. 使用sqoop工具从oracle导入数据

    sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 从RDBMS中抽取出的数据可以被Ma ...

  5. 大数据之路week07--day07 (Sqoop 从mysql增量导入到HDFS)

    我们之前导入的都是全量导入,一次性全部导入,但是实际开发并不是这样,例如web端进行用户注册,mysql就增加了一条数据,但是HDFS中的数据并没有进行更新,但是又再全部导入一次又完全没有必要. 所以 ...

  6. sqoop命令,mysql导入到hdfs、hbase、hive

    1.测试MySQL连接 bin/sqoop list-databases --connect jdbc:mysql://192.168.1.187:3306/trade_dev --username ...

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

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

  8. Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中)

    一.说明: 将关系型数据库中的数据导入到 HDFS(包括 Hive, HBase) 中,如果导入的是 Hive,那么当 Hive 中没有对应表时,则自动创建. 二.操作 1.创建一张跟mysql中的i ...

  9. sqoop的使用之import导入到HDFS

    原文链接: https://www.toutiao.com/i6772128429614563843/ 首先我们已经安装好sqoop了,如果没有安装好参考文档<快速搭建CDH-Hadoop-Hi ...

随机推荐

  1. Linux IO模式-阻塞io、非阻塞io、多路复用io

    一 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进程的阻塞 - 文件描述符 - 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对3 ...

  2. vue 兼容360及safari的方法

    1. npm install --save-dev babel-polyfill 2.  main.js 中 import "babel-polyfill";        或者: ...

  3. C语言基础总结 分类: iOS学习 c语言基础 2015-06-11 10:08 23人阅读 评论(0) 收藏

    //欲练此功必先自宫!!!     //第一天:C语言的基础     //进制     //2进制, 10进制, 8进制, 16进制     //注:8进制数前加0, 16进制数前加0x        ...

  4. 计算 S=a+aa+aaa+aaaa+a.......a【转载】

    package java算法; import java.util.Scanner; /* * 计算 S=a+aa+aaa+aaaa+a.......a */ public class numadd { ...

  5. 51Nod 1072:威佐夫游戏 (威佐夫博奕)

    1072 威佐夫游戏  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数 ...

  6. Webform---母版页(Master Pages)

    母版页(Master Pages)为网站内的其他页面提供模版. Master Page 使您有能力为 web 应用程序中的所有页面(或页面组)创建一致的外观和行为. Master Page 为其他页面 ...

  7. 初次实践数据库--SQL Server2016

    初学数据库使用 安装了SQL Server2016的开发者版本,本来以为就可以愉快地开始数据库的挖坑了,发现开出来之后除了创建数据库.选择数据库以外,并没有什么操作. 后来才发现还需要再安装SSMS( ...

  8. ballerina 学习二十六 项目docker 部署&& 运行(二)

    ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...

  9. Aria2+yaaw+Chrome插件BaiduExporter实现百度网盘下载

    Aria2+yaaw+Chrome插件BaiduExporter实现百度网盘下载 这篇博客主要为了解决百度网盘下载限速以及linux等操作系统无百度客户端的问题.主要包括两个方面第一个是aria2的安 ...

  10. VSCODE includePath 中使用系统中的变量

    使用 ${env.ENVNAME}  这样只需要在 系统中加一个系统变量就可以. https://github.com/Microsoft/vscode-cpptools/issues/697