Sqoop的基本操作,以及导入Oracle和MySQL中的数据到Hive、HDFS、HBase

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表

 

 

### 使用Sqoop在头歌实践教学平台进行数据导入 #### 安装与配置Apache Sqoop 为了能够在头歌实践教学平台上成功执行Sqoop数据导入操作,首先需要完成Apache Sqoop的安装基本配置。这涉及几个必要的前提条件[^2]: - Java环境已正确设置并可用。 - Hadoop集群已经搭建完毕并且正常工作。 - MySQL或其他关系型数据库服务正在运行。 接着按照官方文档中的说明来下载、解压、配置环境变量,并验证安装是否成功。 #### 准备连接参数文件 对于具体的SQL到HDFS数据传输任务来说,准备一个包含必要连接信息的属性文件是非常重要的。该文件通常会指定目标MySQL服务器的信息以及其他一些选项,例如表名、字段分隔符等[^3]: ```properties mysql.username=root mysql.password=your_password_here mysql.host=hadoop102 mysql.port=3306 mysql.database.import=gmall import_out_dir=/user/hive/warehouse/gmall_imported_data ``` 请注意替换`your_password_here`为你自己的密码,并调整其他路径以适应实际需求。 #### 编写Shell脚本调用Sqoop命令 创建一个新的shell脚本来简化整个过程。此脚本将会读取前面提到的那个`.properties`文件作为输入源之一,并构建最终用于启动作业的实际sqoop命令字符串。这里给出一段简单的例子: ```bash #!/bin/bash # Load properties file into environment variables. source /path/to/sqoop.properties # Construct the sqoop command line arguments from these values. SQOOP_CMD="\ sqoop import \ --connect jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.database.import} \ --username ${mysql.username} \ --password ${mysql.password}" echo "Executing: $SQOOP_CMD" eval "$SQOOP_CMD" ``` 这段代码片段展示了如何利用Bash Shell特性加载外部定义好的键值对集合,从而动态拼接出完整的Sqoop指令集。这样做不仅提高了可维护性灵活性,还减少了硬编码带来的错误风险。 #### 执行数据导入 最后一步就是提交上述编写的批处理程序给YARN ResourceManager去调度资源分配情况下的MapReduce Job了。如果一切顺利的话,在不久之后就可以看到来自RDBMS的新鲜记录被安全地存储到了分布式文件系统当中去了! 通过这种方式可以在头歌实验环境中有效地练习基于Sqoop框架的大规模结构化资料搬运技能[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值