在这里插入图片描述

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

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

视频讲解如下

【赵渝强老师】大数据交换引擎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)根据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

在这里插入图片描述

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

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

在这里插入图片描述

(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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

《从大数据到云原生系列课程》

(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.pswp.cn/diannao/91312.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91312.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91312.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++进阶-map的应用

目录 1.预备知识 2.map的补充知识 2.1map的插入方式 2.2访问键和值 2.3map::operator[]的补充 2.4另外一些map的成员函数的补充 3.map的应用实践-力扣刷题-前k个高频单词 3.1解法1 3.2解法2 3.3解法3 4.map的应用实践-力扣刷题-随机链表的复制 4.1C语言解法 4.2C解…

【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南

目录 一、NeRFStudio安装1.安装&#xff08;ubuntu系统&#xff09;2.安装&#xff08;windows系统&#xff09; 二、安装tinycudann三、Colmap安装与使用1. 安装依赖2. 安装colmap3.使用colmap3.1 可视化界面使用3.2 Nerfstudio命令行调用Colmap3.3 colmap结果不准时的修复3.4…

Mybatis05-动态sql

一、应用场景MyBatis 的 动态 SQL 是指根据不同的条件动态拼接生成 SQL 语句的能力。它的最大优势是&#xff1a;避免写多个 XML 映射语句、避免 SQL 冗余、提升代码复用性和可维护性。示例1&#xff1a;用户可以通过勾选框&#xff0c;勾选不同的数据进行批量删除&#xff0c;…

VSCODE 选中多行 需要同时按住alt键才可以

在 VS Code 中&#xff0c;如果你发现 必须按住 Alt 键才能选中多行&#xff08;即“列选择”或“块选择”模式&#xff09;&#xff0c;而直接拖动鼠标无法多选&#xff0c;可能是由于以下原因导致的&#xff1a;1. 检查是否启用了“列选择模式”VS Code 默认情况下&#xff1…

2025前端面试真题以及答案-不断整理中,问题来源于牛客真题

一、 项目内存泄露react与vue的渲染机制有哪些不同react fiber架构vue2与3&#xff0c;为什么用proxy代替defineproperty性能优化有哪些三栏布局实现方式重排与重绘一个对话聊天框如何减少重排&#xff08;我回答的是绝对定位&#xff0c;将聊天框定位在下面&#xff0c;类似于…

雷军的 IP 革命:人格化力量如何重塑商业规则|创客匠人

小米 YU7 发布会 3 分钟售罄 20 万台的奇迹&#xff0c;撕开了一个时代真相&#xff1a;当商业竞争进入深水区&#xff0c;决定胜负的不再是产品参数&#xff0c;而是创始人 IP 的人格穿透力。雷军仅凭个人影响力撬动数十亿级交易&#xff0c;这绝非偶然&#xff0c;而是人格化…

SpringBoot3:应对C10K并发挑战的优化指南

嘿&#xff0c;哥们&#xff01;还在为服务的并发量上不去而头疼吗&#xff1f;用户量一上来&#xff0c;CPU、内存就告急&#xff0c;接口响应慢得像蜗牛&#xff1f;别慌&#xff0c;今天我们就来盘一盘&#xff0c;怎么用最新的Spring Boot 3&#xff0c;把服务性能调教到极…

响应式编程入门教程第三节:ReactiveCommand 与 UI 交互

响应式编程入门教程第一节&#xff1a;揭秘 UniRx 核心 - ReactiveProperty - 让你的数据动起来&#xff01; 响应式编程入门教程第二节&#xff1a;构建 ObservableProperty&#xff1c;T&#xff1e; — 封装 ReactiveProperty 的高级用法 响应式编程入门教程第三节&#x…

500+技术栈覆盖:Web测试平台TestComplete的对象识别技术解析

在用户界面&#xff08;UI&#xff09;测试领域&#xff0c;传统的测试工具往往依赖于XPath或CSS选择器来定位页面元素。然而&#xff0c;在面对动态变化的界面、多语言支持或是跨越多种技术框架的应用时&#xff0c;这些传统方法常导致脚本失效&#xff0c;增加了维护成本。 …

研究人员利用提示注入漏洞绕过Meta的Llama防火墙防护

Trendyol应用安全团队发现了一系列绕过技术&#xff0c;使得Meta的Llama防火墙在面对复杂的提示注入攻击时防护失效。这一发现引发了人们对现有大语言模型&#xff08;LLM&#xff09;安全措施准备情况的担忧&#xff0c;并凸显出在企业日益将大语言模型嵌入工作流程时&#xf…

Shell 脚本系统学习 · 第5篇:多命令顺序执行的三种方式详解(`;`、``、`||`)

在日常的 Linux 运维与脚本编写中&#xff0c;我们经常需要依次执行多条命令。本篇将带你彻底搞懂三种命令顺序执行方式&#xff1a;;、&& 和 ||&#xff0c;并通过实用示例掌握它们的区别与应用场景。一、为什么要了解多命令执行方式&#xff1f; 在实际运维或脚本编写…

K8s存储系统(通俗易懂版)

Kubernetes中存储中有四个重要的概念&#xff1a;Volume、PersistentVolume PV、PersistentVolumeClaim PVC、StorageClass一、存储系统核心概念Volume&#xff08;卷&#xff09;定义&#xff1a;Kubernetes 中最基础的存储单元&#xff0c;用于将外部存储挂载到 Pod 中的容器…

小白学Python,标准库篇——随机库、正则表达式库

一、随机库1.随机生成数值在random库中可以随机生成数值的方法有uniform()、random()、randint()、randrange()等。&#xff08;1&#xff09;uniform()方法uniform(参数1, 参数2)方法用于生成参数1到参数2之间的随机小数&#xff0c;其中参数的类型都为数值类型。示例代码&…

Qt窗口:菜单栏

目录 一、窗口预览 二、菜单栏 快捷键 子菜单 分割线 图标 内存泄露 一、窗口预览 在前面几篇文章中&#xff0c;或者说&#xff0c;Qt初学阶段&#xff0c;接触到的都是QWidget&#xff0c;QWidget指控件&#xff0c;往往作为一个窗口的一部分出现。所谓的窗口&#x…

STM32裸机开发(中断,轮询,状态机)与freeRTOS

裸机&#xff1a;没有操作系统&#xff0c;程序是单流程的&#xff08;比如一个大循环里依次执行各个功能&#xff0c;或者用中断嵌套处理事件&#xff09;。优点是资源占用极少&#xff08;几乎不占 RAM/Flash&#xff09;、执行流程直观&#xff1b;但复杂项目里&#xff0c;…

电脑上如何查看WiFi密码

打开控制面板>点击网络和Internet在查看网络和共享中心找到网络状态和任务点击进去点击连接的WLAN在WLAN状态中点击无线属性在无线网络属性中点击安全&#xff0c;点击显示字符&#xff08;H&#xff09;就可以显示密码了

文心一言4.5企业级部署实战:多模态能力与Docker容器化测评

随着大语言模型在企业服务中的应用日益广泛&#xff0c;如何选择一款既能满足多模态创作需求&#xff0c;又具备良好企业级适配性的AI模型成为了关键问题。文心一言4.5作为百度最新开源的大模型&#xff0c;不仅在传统的文本处理上表现出色&#xff0c;更是在多模态理解和企业级…

VUE Promise基础语法

目录 异步和同步 异步的问题 new Promise语法 promise的状态 promise.then() Promise.resolve() Promise.reject() Promise.all() Promise.race() Promise.catch() Promise.finally() 异步和同步 同步模式下&#xff0c;代码按顺序执行&#xff0c;前一条执行完毕后…

用TensorFlow进行逻辑回归(六)

import tensorflow as tfimport numpy as npfrom tensorflow.keras.datasets import mnistimport time# MNIST数据集参数num_classes 10 # 数字0到9, 10类num_features 784 # 28*28# 训练参数learning_rate 0.01training_steps 1000batch_size 256display_step 50# 预处…

【HTTP版本演变】

在浏览器中输入URL并按回车之后会发生什么1. 输入URL并解析输入URL后&#xff0c;浏览器会解析出协议、主机、端口、路径等信息&#xff0c;并构造一个HTTP请求&#xff08;浏览器会根据请求头判断是否又HTTP缓存&#xff0c;并根据是否有缓存决定从服务器获取资源还是使用缓存…