IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据技术应用 sqoop数据迁移 -> 正文阅读

[大数据]大数据技术应用 sqoop数据迁移

??????? 在实际开发中,有时候需要将HDFSHive上的数据导出传统关系型数据库中(如MySQL、Oracle等),或者将传统关系型数据库中的数据导入HDFSHive上,如果通过人工手动进行数据迁移的话,就会显得非常麻烦。为此,可使用Apache提供的Sqoop工具进行数据迁移。

Sqoop简介

Sqoop是Apache的一款开源工具,Sqoop主要用于在Hadoop和关系数据库或大型机之间传输数据,可以使用Sqoop工具将数据从关系数据库管理系统导入(import)到Hadoop分布式文件系统中,或者将Hadoop中的数据转换导出(export)到关系数据库管理系统

Sqoop原理

Sqoop是传统关系型数据库服务器与Hadoop间进行数据同步的工具,其底层利用MapReduce并行计算模型以批处理方式加快数据传输速度,并且具有较好的容错性功能,工作流程如下所示

?Sqoop关系型数据库Hadoop之间的数据桥梁,这个桥梁的重要组件是Sqoop连接器,它用于实现与各种关系型数据库的连接,从而实现数据的导入导出操作。

?1.导入原理

在导入数据之前,Sqoop使用JDBC检查导入的数据表,检索出表中的所有列以及列的SQL数据类型,并将这些SQL类型映射为Java数据类型,在转换后的MapReduce应用中使用这些对应的Java类型来保存字段的值,Sqoop的代码生成器使用这些信息来创建对应表的类,用于保存从表中抽取的记录。

2.导出原理

在导出数据前,Sqoop会根据目标表的定义生成一个Java类,这个生成的类能够从文本中解析出记录数据,并能够向表中插入类型合适的值,然后启动一个MapReduce作业,从HDFS中读取源数据文件,使用生成的类解析出记录,并且执行选定的导出方法。

sqoop的安装配置

1.? Sqoop的下载安装

我们使用的都是sqoop-1.4.6来进行安装配置

2.? Sqoop的配置

修改sqoop-env.sh配置文件,添加Hadoop环境

export HADOOP_COMMON_HOME=/export/servers/hadoop-2.7.4

export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.7.4

export HIVE_HOME=/export/servers/apache-hive-1.2.1-bin

修改profile文件,添加Sqoop环境

export SQOOP_HOME=/export/servers/sqoop-1.4.6

export PATH=$PATH:$SQOOP_HOME/bin:

mysql-connector-java-5.1.32.jar包上传至Sqoop解压包目录的lib目录下

3.? Sqoop的效果测试

执行Sqoop相关指令来验证Sqoop的执行效果

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

? ?????????? --password 123456

Sqoop指令使用方法查询

Sqoop作为一款工具,开发者只需掌握工具的使用方式,它提供了一系列的工具指令,来进行数据的导入、导出操作等,开发人员只需输入sqoop help帮助指令查看帮助文档,如下所示。

?执行Sqoop相关指令时,需要指定各种指令参数,可以使用“sqoop help command”指令来进行查看。例如查看数据导入import指令使用方式,可以使用“sqoop help import”指令进行查看,如下图所示。

?MySQL表数据导入HDFS

Sqoop数据导入import)是将关系型数据库中的单个表数据导入到HDFSHive等具有Hadoop分布式存储结构的文件系统中,表中的每一行都被视为一条记录,所有记录默认以文本文件格式进行逐行存储,还可以以二进制形式存储,例如Avro文件格式、序列文件格式(SequenceFile)。

1.? 创建MySQL数据表emp

? DROP TABLE IF EXISTS `emp`;

? CREATE TABLE `emp` (

???? `id` int(11) NOT NULL,

???? `name` varchar(100) DEFAULT NULL,

???? `deg` varchar(100) DEFAULT NULL,

???? `salary` int(11) DEFAULT NULL,

???? `dept` varchar(10) DEFAULT NULL,

????? PRIMARY KEY (`id`)

? );

2.? MySQL数据表emp插入数据

INSERT INTO `emp` VALUES ('1201', 'gopal', 'manager', '50000', 'TP');

? INSERT INTO `emp` VALUES ('1202', 'manisha', 'Proof reader', '50000', 'TP');

? INSERT INTO `emp` VALUES ('1203', 'khalil', 'php dev', '30000', 'AC');

? INSERT INTO `emp` VALUES ('1204', 'prasanth', 'php dev', '30000', 'AC');

? INSERT INTO `emp` VALUES ('1205', 'kranthi', 'admin', '20000', 'TP');

3.? 创建MySQL数据表emp_add

? DROP TABLE IF EXISTS `emp_add`;

? CREATE TABLE `emp_add` (

???? `id` int(11) NOT NULL,

???? `hno` varchar(100) DEFAULT NULL,

???? `street` varchar(100) DEFAULT NULL,

???? `city` varchar(100) DEFAULT NULL,

???? PRIMARY KEY (`id`)

? );

4.? MySQL数据表emp_add插入数据

INSERT INTO `emp_add` VALUES ('1201', '288A', 'vgiri', 'jublee');

? INSERT INTO `emp_add` VALUES ('1202', '108I', 'aoc', 'sec-bad');

? INSERT INTO `emp_add` VALUES ('1203', '144Z', 'pgutta', 'hyd');

? INSERT INTO `emp_add` VALUES ('1204', '78B', 'old city', 'sec-bad');

? INSERT INTO `emp_add` VALUES ('1205', '720X', 'hitec', 'sec-bad');

5.? 将表emp的数据导入到HDFS文件系统

sqoop import \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root \

--password 123456 \

--target-dir /sqoopresult \

--table emp \

--num-mappers 1

6.? 通过HDFS UI界面查看数据结果文件

?7.? 使用相关指令,查看导入后的文件内容

?增量导入

?当MySQL中的数据发生新增修改变化,需要更新HDFS上对应的数据时,就可以使用Sqoop增量导入功能,Sqoop目前支持两种增量导入模式:append模式和lastmodified模式。

1.append模式

?主要针对INSERT新增数据的增量导入。

2.lastmodified模式

?主要针对UPDATE修改数据的增量导入。

1.? 向数据表emp进行增量导入

$ sqoop import \

? --connect jdbc:mysql://hadoop01:3306/userdb \

? --username root \

? --password 123456 \

? --target-dir /sqoopresult \

? --table emp \

? --num-mappers 1 \

? --incremental append \

? --check-column id \

? --last-value 1205

2.? HDFS UI界面查看增量导入结果

?3.? 执行“hadoop fs –cat”命令查看结果数据

MySQL表数据导入Hive

1.? 将表emp_add中的数据导入Hive

$ sqoop import \

? --connect jdbc:mysql://hadoop01:3306/userdb \

? --username root \

? --password 123456 \

? --table emp_add \

? --hive-table itcast.emp_add_sp \

? --create-hive-table \

? --hive-import \

? --num-mappers 1

2.? Hive客户端查看Hive数据仓库表数据

3.? HDFS UI界面查看结果文件

?MySQL表数据子集导入

? 在实际业务中,有时候开发人员可能需要只针对部分数据进行导入操作。针对上述需求,可以使用Sqoop提供的“--where和“--query参数,先进行数据过滤,然后再将满足条件的数据进行导入。

1. --where”参数对表emp_add数据进行过滤

$ sqoop import \

? --connect jdbc:mysql://hadoop01:3306/userdb \

? --username root \

? --password 123456 \

? --where "city ='sec-bad'" \

? --target-dir /wherequery \

? --table emp_add \

? --num-mappers 1

2.? 执行“hadoop fs -cat”指令,查看结果文件

3.? “--query”参数对表emp的数据进行过滤

$ sqoop import \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root \

--password 123456 \

--target-dir /wherequery2 \

--query 'SELECT id,name,deg FROM emp WHERE id>1203 AND $CONDITIONS' \

--num-mappers 1

4.? 执行“hadoop fs -cat”指令,查看结果文件

?Sqoop数据导出

Sqoop导出导入是相反的操作,也就是将HDFSHiveHbase文件系统数据仓库中的数据导出关系型数据库中,在导出操作之前,目标表必须存在目标数据库中,否则在执行导出操作时会失败。

Sqoop数据导出

1.? 创建MySQL数据表

DROP TABLE IF EXISTS `emp_export`;

? CREATE TABLE `emp_export` (

???? `id` int(11) NOT NULL,

???? `name` varchar(100) DEFAULT NULL,

???? `deg` varchar(100) DEFAULT NULL,

???? `salary` int(11) DEFAULT NULL,

???? `dept` varchar(10) DEFAULT NULL,

????? PRIMARY KEY (`id`)

?? );

2.? part-m-00000文件进行导出操作

? $ sqoop export \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root \

--password 123456 \

--table emp_export \

--export-dir /sqoopresult

3.? 查看MySQL数据表

1.? append模式

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:22:42  更:2022-09-13 11:23:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:18:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码