import :Import a table from a database to HDFS
sqoop import 的本质是:就是MR程序
导入数据到HDFS
(1)把Oracle中的EMP表 导入到HDFS中
[root@bigdata11 conf]# sqoop import --connect jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SCOTT --password tiger --table EMP --target-dir /sqoop/import/emp1
在HDFS中查看输出的结果
(2)导入EMP表,指定导入的列
[root@bigdata11 conf]# sqoop import --connect jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SCOTT --password tiger --table EMP --columns ENAME,SAL --target-dir /sqoop/import/emp2
(3)导入Oracle中的订单表到HDFS中:sh用户 sales表(订单表:大约92万条数据)
[root@bigdata11 conf]# sqoop import --connect jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SH --password sh --table SALES --target-dir /sqoop/import/sales
错误日志:
ERROR tool.ImportTool: Error during import: No primary key could be found for table SALES. Please specify one with --split-by or perform a sequential import with '-m 1'
没有设置主键,需要在后面加入-m 1 ,表示设置一个分区
[root@bigdata11 conf]# sqoop import --connect jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SH --password sh --table SALES --target-dir /sqoop/import/sales1 -m 1
根据上图显示,只有一个分区
把MySQL中的card表导入到HDFS中,card表大概70万条数据
[root@bigdata11 ~]# sqoop import --connect jdbc:mysql://192.168.100.11:3306/Test_DB --username root --password 123123 --table card --target-dir /sqoop/import/card
在HDFS中查看
把Oracle中的EMP表导入到Hive中
首先,因为Hive中默认的数据库是default,为了测试需要在Hive中创建一个数据库test
hive> create database test;
Moved: 'hdfs://bigdata11:9000/user/hive/warehouse/test.db' to trash at: hdfs://bigdata11:9000/user/root/.Trash/Current
Moved: 'hdfs://bigdata11:9000/user/hive/warehouse/test.db' to trash at: hdfs://bigdata11:9000/user/root/.Trash/Current
OK
Time taken: 4.91 seconds
hive> show databases;
OK
default
test
[root@bigdata11 conf]# sqoop import --connect jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SCOTT --password tiger --table EMP -m 1 --hive-import --hive-database test
在Hive中查看结果
把Oracle中的EMP表导入到HBase(需要事先将表创建)
[root@bigdata11 conf]#sqoop import --connect jdbc:oracle:thin:@192.168.100.100:1521:orcl --username SCOTT --password tiger --table EMP --columns empno,ename,sal,deptno --hbase-table emp --hbase-row-key empno --column-family empinfo
在HBase中查看emp表
codegen:将关系数据库表映射为一个Java文件、Java class类、以及相关的jar包
实例:在Linux上新建目录 mkdir /root/sqoop
[root@bigdata11 conf]# sqoop codegen --connet jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SCOTT --password --table EMP --outdir /root/sqoop
create-hive-table: 生成与关系数据库表的表结构对应的HIVE表
实例:把Oracle中的EMP表创建在Hive中
[root@bigdata11 conf]# sqoop create-hive-table --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP --hive-table emphive
查看Hive中的emphive的表结构
eval:以快速地使用SQL语句对关系数据库进行操作,这可以使得在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。
示例:
[root@bigdata11 conf]# sqoop eval --connect jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SCOTT --password tiger --query 'select * from emp where deptno=10'
list-databases :List available databases on a server
对MySQL来说是列出所有MySQL的库名
[root@bigdata11 ~]# sqoop list-databases --connect jdbc:mysql://192.168.100.11:3306/ --username root --password 123123
对Oracle来说是列出当前数据库中所有的用户名
[root@bigdata11 ~]# sqoop list-databases --connect jdbc:oracle:thin:@192.168.100.100:1521/orcl --username SYSTEM --password password
export:从hdfs中导数据到关系数据库中
示例:将HDFS的emp表导入到MySQL 中
首先需要在MySQL中创建和HDFS中的emp一样的表结构
root@db 23:21: [sqoop]> create table emp(empno int,ename varchar(20),job varchar(20),mgr int,hiredate varchar(30),sal int,comm mm int,deptno int);
查看MySQL的表结构
执行导出操作:
[root@bigdata11 input]# sqoop export --connect jdbc:mysql://192.168.100.11:3306/sqoop --username root --password 123123 --table emp --export-dir /scott
在MySQL中查看emp表