当前位置: 首页 > news >正文

【赵渝强老师】大数据交换引擎Sqoop

1

​Sqoop是SQL To Hadoop的简称,它是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(Oracle、MySQL等)间进行数据的传递。通过使用Sqoop可以将一个关系型数据库中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。Sqoop是基于MapReduce完成数据的交换,因此在使用Sqoop之前需要部署Hadoop环境;另一方面,由于Sqoop交换的是关系型数据库中的数据,因此底层需要JDBC驱动的支持。

Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。

image.png
点击这里查看视频讲解:【赵渝强老师】大数据交换引擎Sqoop

一、 准备Sqoop环境

Apache Sqoop的安装部署比较简单,直接解压后就可以使用。由于Sqoop底层需要JDBC的支持。因此需要将对应关系型数据库的JDBC Driver复制到Sqoop的lib目录下。这里将在bigdata111的虚拟主机上来完成安装和部署,并采集之前部署好的MySQL数据库中的数据。下面通过具体的步骤来演示Sqoop的部署。

(1)将Sqoop的安装包解压到/root/training目录。

tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ~/training/

(2)将Sqoop的目录进行重命名。

cd ~/training/
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop/

(3)将MySQL的JDBC Driver复制到Sqoop的lib目录下。

cp mysql-connector-java-5.1.43-bin.jar ~/training/sqoop/lib/

(4)编辑文件/root/.bash_profile设置Sqoop相应的环境变量。

SQOOP_HOME=/root/training/sqoop
export SQOOP_HOMEPATH=$SQOOP_HOME/bin:$PATH
export PATH

(5)生效环境变量。

source /root/.bash_profile

(6)启动Hadoop环境。

start-all.sh

(7)登录MySQL数据库执行下面的脚本建立测试数据。

create database if not exists demo;
use demo;create table emp 
(empno int primary key,
ename varchar(10),
job varchar(10),
mgr int,
hiredate varchar(10),
sal int,
comm int,
deptno int);create table dept
(deptno int primary key,
dname varchar(10),
loc varchar(10)
);insert into emp values(7369,'SMITH','CLERK',7902,'1980/12/17',800,0,20);
insert into emp values(7499,'ALLEN','SALESMAN',7698,'1981/2/20',1600,300,30);
insert into emp values(7521,'WARD','SALESMAN',7698,'1981/2/22',1250,500,30);
insert into emp values(7566,'JONES','MANAGER',7839,'1981/4/2',2975,0,20);
insert into emp values(7654,'MARTIN','SALESMAN',7698,'1981/9/28',1250,1400,30);
insert into emp values(7698,'BLAKE','MANAGER',7839,'1981/5/1',2850,0,30);
insert into emp values(7782,'CLARK','MANAGER',7839,'1981/6/9',2450,0,10);
insert into emp values(7788,'SCOTT','ANALYST',7566,'1987/4/19',3000,0,20);
insert into emp values(7839,'KING','PRESIDENT',-1,'1981/11/17',5000,0,10);
insert into emp values(7844,'TURNER','SALESMAN',7698,'1981/9/8',1500,0,30);
insert into emp values(7876,'ADAMS','CLERK',7788,'1987/5/23',1100,0,20);
insert into emp values(7900,'JAMES','CLERK',7698,'1981/12/3',950,0,30);
insert into emp values(7902,'FORD','ANALYST',7566,'1981/12/3',3000,0,20);
insert into emp values(7934,'MILLER','CLERK',7782,'1982/1/23',1300,0,10);insert into dept values(10,'ACCOUNTING','NEW YORK');
insert into dept values(20,'RESEARCH','DALLAS');
insert into dept values(30,'SALES','CHICAGO');
insert into dept values(40,'OPERATIONS','BOSTON');

二、 使用Sqoop完成数据交换

下面将通过具体的操作步骤来演示如何使用Sqoop完成与关系型数据库MySQL的数据交换。

(1)使用Sqoop执行一个简单的查询。这里将查询10号部门的员工姓名、职位、薪水和部门号,结果如下图所示。

sqoop eval --connect jdbc:mysql://localhost:3306/demo?useSSL=false \
--username root --password Welcome_1 --query \
"select ename,job,sal,deptno from emp where deptno=10"

2

(2)根据MySQL数据库中的表结构生成对应的Java Class。

sqoop codegen --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1 --table emp# 输出的日志如下所示:
2021-04-22 14:34:42,491 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /root/training/hadoop-3.1.2
Note: /tmp/sqoop-root/compile/2abad54ace6665327b12e83a02b14a8f/emp.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
2021-04-22 14:34:45,173 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/2abad54ace6665327b12e83a02b14a8f/emp.jar# 执行成功后,会自动将/tmp目录下生成的emp.java拷贝至当前目录,部分代码如下:
public class emp extends SqoopRecord  implements DBWritable, Writable {private final int PROTOCOL_VERSION = 3;public int getClassFormatVersion() { return PROTOCOL_VERSION; }public static interface FieldSetterCommand {void setField(Object value);  }  protected ResultSet __cur_result_set;private Map<String, FieldSetterCommand> setters = new HashMap<String, FieldSetterCommand>();private void init0() {setters.put("empno", new FieldSetterCommand() {@Overridepublic void setField(Object value) {emp.this.empno = (Integer)value;}});setters.put("ename", new FieldSetterCommand() {@Override# 这里可以看到emp类实现了Writable接口。按照开发MapReduce程序的要求,
# 该类可以作为MapReduce的Key或者Value。

(3)根据MySQL数据库中的表结构生成对应的Hive表结构。命令执行完成后,查看Hive中的表结构信息如下图所示。

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*sqoop create-hive-table --connect jdbc:mysql://localhost:3306/demo  \
--username root --password Welcome_1 --table emp --hive-table emphive

3

(4)将MySQL数据库中的emp表导入到HDFS。命令执行完成后,查看HDFS目录的内容,如下图所示。

sqoop import --connect jdbc:mysql://localhost:3306/demo  \
--username root --password Welcome_1 --table emp --target-dir /myempdata

4

(5)将HDFS的数据导出到MySQL数据库中。命令执行完成后,在MySQL中验证数据是否导入如下图所示。

# 先在MySQL中创建对应的表
create table mynewemp like emp;# 执行导入
sqoop export --connect jdbc:mysql://localhost:3306/demo  \
--username root --password Welcome_1 \
--table mynewemp --export-dir /myempdata

5

(6)将MySQL数据库中的所有表导入到HDFS。执行完成后默认将导入HDFS的/user/root目录,如下图所示。

sqoop import-all-tables --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1

6

(7)列出MySQL的所有数据库。命令执行完成后,如下图所示。

sqoop list-databases --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1

7

(8)列出MySQL数据库中所有的表,执行结果如下图所示。

sqoop list-tables --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1

8

(9)将MySQL表的数据导入HBase。

#进入HBase Shell创建表
create 'emp','empinfo'#执行导入
sqoop import --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1 --table emp \
--columns empno,ename,sal,deptno \
--hbase-table emp --hbase-row-key empno --column-family empinfo# Sqoop导入数据到HBase时,HBase的版本不能太高,建议使用HBase 1.3.6。
http://www.jsqmd.com/news/97572/

相关文章:

  • Excalidraw用户调研结果公布:90%满意度来自易用性
  • Flux.1 Kontext Dev终极指南:从零开始掌握开源AI图像编辑
  • JELOS:专为掌机打造的轻量级Linux操作系统
  • 17、网络服务与应用:比特币汇率查询、邮件获取与文本翻译
  • 18、利用 Microsoft Face API 进行图像人脸检测
  • GLM-4-32B-0414:重塑智能体技术栈的推理引擎革命
  • 如何快速配置Mesop Select组件默认值:新手开发者的完整指南
  • 12、数据序列化与文件处理实战
  • 3小时精通POCO C++库:从零开始的跨平台网络编程实战
  • palera1n越狱终极指南:从零开始解锁iOS设备完整教程
  • 15、密码学编程问题及解决方案
  • 16、密码学与网络服务:实用编程指南
  • 深入掌握Flutter网络请求:Dio与Provider架构完美融合实践
  • Blender版本管理技巧:从新手到高手的全流程指南
  • Typst数学排版精要:从对齐原理到实践优化
  • Docker环境下的VeraCrypt加密存储架构探索
  • React CSS Modules终极指南:轻松掌握组件样式封装技术
  • Z-Image: An Efficient Image Generation Foundation Model with Single-Stream Diffusion Transformer
  • 终极效率指南:PDFMathTranslate与Zotero完美整合方案
  • 现代前端复制技术的革命性突破:clipboard.js深度解析与实践指南
  • Wechaty v1.20.2终极指南:5大RPA功能让聊天机器人开发效率飙升300%
  • 为什么Langchain-Chatchat成为本地知识库问答标杆?
  • 解锁PS3全部潜能:webMAN MOD终极指南,打造完美游戏娱乐中心
  • Stressapptest专业指南:打造坚不可摧的系统稳定性防线
  • 终极指南:3步上手Quasar远程管理工具,轻松掌控Windows系统
  • 如何快速定制键盘布局:5分钟掌握终极在线编辑器使用技巧
  • PostCSS-CSSNext警告系统:3个实战场景深度解析与高效应对策略
  • 现代化存储系统架构设计与优化策略完整指南
  • Google Cloud语音与视觉AI:企业级智能应用架构深度解析
  • 开源Excalidraw镜像上线!支持AI绘图与实时协作的虚拟白板工具