Sqoop 数据迁移
Sqoop 数据迁移
- 一、Sqoop 概述
- 二、Sqoop 优势
- 三、Sqoop 的架构与工作机制
- 四、Sqoop Import 流程
- 五、Sqoop Export 流程
- 六、Sqoop 安装部署
- 6.1 下载解压
- 6.2 修改 Sqoop 配置文件
- 6.3 配置 Sqoop 环境变量
- 6.4 添加 MySQL 驱动包
- 6.5 测试运行 Sqoop
- 6.5.1 查看Sqoop命令语法
- 6.5.2 测试数据库连接
- 七、案例实践:Sqoop 迁移Hive出库数据
- 7.1 数据导出:Hive 导入 MySQL
- 7.2 数据导出:MySQL 导入 Hive
一、Sqoop 概述
Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS与Hadoop之间进行高效的大数据迁移。用户可以在Sqoop的帮助下,轻松地将RDBMS中的数据导入到Hadoop或者与其相关的系统(如HBase和Hive)中;同时也可以将数据从Hadoop系统导出到RDBMS。因此,可以说Sqoop就是一个桥梁,连接了RDBMS与Hadoop。

二、Sqoop 优势
-
Sqoop可以高效地、可控地利用资源,可以通过调整任务数来控制任务的并发度。另外它还可以配置数据库的访问时间。
-
Sqoop可以自动地完成数据库与Hadoop系统中数据类型的映射与转换,
-
Sqoop支持多种数据库,比如,MySQL、0racle和PostgreSQL等数据库。
三、Sqoop 的架构与工作机制
客户端提交脚本,调用Map Task ,将关系数据库导入到 Hadoop 平台的HDFS/HBase/Hive,同时也可以将 Hadoop 平台的HDFS/HBase/Hive数据通过 Map Task 导入到 关系数据库中。

四、Sqoop Import 流程

五、Sqoop Export 流程

六、Sqoop 安装部署
6.1 下载解压
下载地址:https://archive.apache.org/dist/sqoop/
上传到 /usr/local/,进行解压
[root@hadoop1 local]# tar -zxvf /usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
创建软连接
[root@hadoop1 local]# ln -s sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop

6.2 修改 Sqoop 配置文件
进入 Sqoop 的 conf 目录下修改 sqoop-env.sh 配置文件,修改内容如下:
将配置模板拷贝一份,命名为 sqoop-env.sh
[root@hadoop1 conf]# cp /usr/local/sqoop/conf/sqoop-env-template.sh /usr/local/sqoop/conf/sqoop-env.sh
编辑 sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
export ZOOCFGDIR=/usr/local/zookeeper
6.3 配置 Sqoop 环境变量
添加 Sqoop 的环境变量,添加内容如下:
[root@hadoop1 conf]# vim /etc/profile
添加如下内容:
# 添加 Sqoop 环境变量
SQOOP_HOME=/usr/local/sqoop
PATH=$SQOOP_HOME/bin:$PATH
export SQOOP_HOME PATH
更新环境
[root@hadoop1 conf]# source /etc/profile
6.4 添加 MySQL 驱动包
将对应的 MySQL 驱动包上传到 /usr/local/sqoop/lib 目录下

6.5 测试运行 Sqoop
6.5.1 查看Sqoop命令语法
在Sqoop安装目录下,使用help命令查看Sqoop的基本用法,具体操作如下:
[root@hadoop1 sqoop]# /usr/local/sqoop/bin/sqoop help

6.5.2 测试数据库连接
[root@hadoop1 bin]# /usr/local/sqoop/bin/sqoop list-databases --connect jdbc:mysql://192.168.220.151 --username hive --password hive

七、案例实践:Sqoop 迁移Hive出库数据
7.1 数据导出:Hive 导入 MySQL
- 准备 Hive 数据源
create table mean_temperature as select id, sum(temperature)/count(*) from temperature group by id;

- MySQL 建表
CREATE TABLE IF NOT EXISTS `mean_temperature`(
`id` VARCHAR(20) NOT NULL,
`average` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

- hive数据导出到 mysql 脚本
/usr/local/sqoop/bin/sqoop export \
--connect 'jdbc:mysql://hadoop1/hive?useUnicode=true&characterEncoding=utf-8' \
--username hive \
--password hive \
--table mean_temperature \
--export-dir /user/hive/warehouse/mydb/mean_temperature \
--input-fields-terminated-by "\001" \
-m 1;
出现如下报错:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ‘hive’@‘%’ to database ‘hive’

hive 用户只授权了 hadoop1 能够访问mysql,需求开启远程访问
修复方法:登录 root 用户,执行如下脚本
mysql> grant all on *.* to 'hive'@'%' identified by 'hive';
mysql> flush privileges;
再次执行如下脚本:
/usr/local/sqoop/bin/sqoop export \
--connect 'jdbc:mysql://hadoop1/hive?useUnicode=true&characterEncoding=utf-8' \
--username hive \
--password hive \
--table mean_temperature \
--export-dir /user/hive/warehouse/mydb/mean_temperature \
--input-fields-terminated-by "\001" \
-m 1;

在 mysql 查看 mean_temperature 表

7.2 数据导出:MySQL 导入 Hive
执行如下脚本:
/usr/local/sqoop/bin/sqoop import \
--connect 'jdbc:mysql://hadoop1/hive?useUnicode=true&characterEncoding=utf-8' \
--username hive \
--password hive \
--table mean_temperature \
--fields-terminated-by ',' \
--delete-target-dir \
-m 1 \
--hive-import \
--hive-database weather \
--hive-table ods_mean_temperature;

查看 Hive 数据库的 ods_mean_temperature
hive> select * from ods_mean_temperature limit 10;

可以看到 自动创建表 ods_mean_temperature 并有数据。
相关文章:
Sqoop 数据迁移
Sqoop 数据迁移 一、Sqoop 概述二、Sqoop 优势三、Sqoop 的架构与工作机制四、Sqoop Import 流程五、Sqoop Export 流程六、Sqoop 安装部署6.1 下载解压6.2 修改 Sqoop 配置文件6.3 配置 Sqoop 环境变量6.4 添加 MySQL 驱动包6.5 测试运行 Sqoop6.5.1 查看Sqoop命令语法6.5.2 测…...
【数据结构】排序算法系列——希尔排序(附源码+图解)
希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体…...
c++(继承、模板进阶)
一、模板进阶 1、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中…...
【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱
1. 引言 随着技术的飞速发展,人工智能(AI)已从学术研究的实验室走向现实应用的舞台,成为推动现代社会变革的核心动力之一。而在这一进程中,深度学习(Deep Learning)因其在大规模数据处理和复杂问题求解中的卓越表现,迅速崛起为人工智能的最前沿技术。深度学习的核心是…...
WebLogic 笔记汇总
WebLogic 笔记汇总 一、weblogic安装 1、创建用户和用户组 groupadd weblogicuseradd -g weblogic weblogic # 添加用户,并用-g参数来制定 web用户组passwd weblogic # passwd命令修改密码# 在文件末尾增加以下内容 cat >>/etc/security/limits.conf<<EOF web…...
leetcode:2710. 移除字符串中的尾随零(python3解法)
难度:简单 给你一个用字符串表示的正整数 num ,请你以字符串形式返回不含尾随零的整数 num 。 示例 1: 输入:num "51230100" 输出:"512301" 解释:整数 "51230100" 有 2 个尾…...
Python GUI入门详解-学习篇
一、简介 GUI就是图形用户界面的意思,在Python中使用PyQt可以快速搭建自己的应用,自己的程序看上去就会更加高大上。 有时候使用 python 做自动化运维操作,开发一个简单的应用程序非常方便。程序写好,每次都要通过命令行运行 pyt…...
QT5实现https的post请求(QNetworkAccessManager、QNetworkRequest和QNetworkReply)
QT5实现https的post请求 前言一、一定要有sslErrors处理1、问题经过2、代码示例 二、要利用抓包工具1、问题经过2、wireshark的使用3、利用wireshark查看服务器地址4、利用wireshark查看自己构建的请求报文 三、返回数据只能读一次1、问题描述2、部分代码 总结 前言 QNetworkA…...
vscode 使用git bash,路径分隔符缺少问题
window使用bash --login -i 使用bash时候,在系统自带的terminal里面进入,测试conda可以正常输出,但是在vscode里面输入conda发现有问题 bash: C:\Users\marswennaconda3\Scripts: No such file or directory实际路径应该要为 C:\Users\mars…...
F12抓包10:UI自动化 - Elements(元素)定位页面元素
课程大纲 1、前端基础 1.1 元素 元素是构成HTML文档的基本组成部分之一,定义了文档的结构和内容,比如段落、标题、链接等。 元素大致分为3种:基本结构、自闭合元素(self-closing element)、嵌套元素。 1、基本结构&…...
android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。
1、先上一个图:这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢,安装过一版最新的android studio,然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候,就报错了: Execution failed…...
SQL入门题
作者SQL入门小白,此栏仅是记录一些解题过程 1、题目 用户访问表users,记录了用户id(usr_id)和访问日期(log_date),求出连续3天以上访问的用户id。 2、解答过程 2.1数据准备 通过navicat创建数据…...
Python实战:实战练习案例汇总
Python实战:实战练习案例汇总 **Python世界系列****Python实践系列****Python语音处理系列** 本文逆序更新,汇总实践练习案例。 Python世界系列 Python世界:力扣题43大数相乘算法实践Python世界:求解满足某完全平方关系的整数实…...
zabbix之钉钉告警
钉钉告警设置 我们可以将同一个运維组的人员加入到同一个钉钉工作群中,当有异常出现后,Zabbix 将告警信息发送到钉钉的群里面,此时,群内所有的运维人员都能在第一时间看到这则告警详细。 Zabbix 监控系统默认没有开箱即用…...
《OpenCV计算机视觉》—— 对图片进行旋转的两种方法
文章目录 一、用numpy库中的方法对图片进行旋转二、用OpenCV库中的方法对图片进行旋转 一、用numpy库中的方法对图片进行旋转 numpy库中的 np.rot90 函数方法可以对图片进行旋转 代码实现如下: import cv2 import numpy as np# 读取图片 img cv2.imread(wechat.jp…...
Python 错误 ValueError 解析,实际错误实例详解 (一)
文章目录 前言Python 中错误 ValueError: No JSON object Could Be Decoded在 Python 中解码 JSON 对象将 JSON 字符串解码为 Python 对象将 Python 对象编码为 JSON 字符串Python 中错误 ValueError: Unsupported Pickle Protocol: 3Python 中的 Pickling 和 UnpicklingPython…...
[java][git]上传本地代码及更新代码到GitHub教程
上传本地代码及更新代码到GitHub教程 上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo "# Test" >> README.md 第三步:建立g…...
react antd table expandable defaultExpandAllRows 不生效问题
原因:defaultExpandAllRows只会在第一次渲染时触发 解决方案:渲染前判断table 的datasource 数据是否已准备好 {pageList.length > 0 ? (<TablerowSelection{rowSelection}columns{columns}dataSource{pageList}style{{ marginTop: 24 }}pagina…...
什么是领域驱动设计?
什么是领域驱动设计? 领域驱动设计(Domain-Driven Design,简称DDD)是一种面向对象的软件开发方法,它强调将软件系统的设计和实现过程与业务领域紧密结合,通过深入理解和建模业务领域,从而实现高…...
信息安全工程师(1)计算机网络分类
一、按分布范围分类 广域网(WAN): 定义:广域网的任务是提供长距离通信,运送主机所发送的数据。其覆盖范围通常是直径为几十千米到几千千米的区域,因此也被称为远程网。特点:连接广域网的各个结点…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
