实现MySQL-->HDFS;MySQL-->Hive;Hive-->HDFS;HDFS-->MySQL的数据迁移

news/2024/5/20 4:09:27 标签: mysql, 数据库, sql, hive, hdfs

实现MySQL-->HDFS;MySQL-->Hive;Hive-->HDFS;HDFS-->MySQL的数据迁移

      • 一. Apache Sqoop介绍
      • 二.Sqoop安装
        • 2.1安装Sqoop
        • 2.2解压Sqoop
        • 2.3配置Sqoop
        • 2.4.加入sql>mysql的jdbc驱动包
        • 2.5. 设置ACCUMULO_HOME环境变量
        • 2.5. 验证启动,显示版本号
        • 2.6.显示MySQL中的数据库
      • 三.Sqoop导入
        • 3.1. 加载测试数据到MySQL(创建表)
        • 3.2. 全量导入MySQL表数据到HDFS
        • 3.3.全量导入MySQL表数据到HIVE
      • 四.Sqoop导出
        • 4.1.模块开发--数据导出
        • 4.2. Sqoop 导出项目数据
        • 4.3.Hive-->HDFS
        • 4.4.HDFS-->Mysql

一. Apache Sqoop介绍

  1. Apache Sqoop是在Hadoop生态体系和RDBMS体系之间传送数据的一种工具。来自于Apache软件基金会提供。
  2. Sqoop工作机制是将导入或导出命令翻译成mapreduce程序来实现。在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
  3. Hadoop生态系统包括:HDFS、Hive、Hbase等
    RDBMS体系包括:MySql、Oracle、DB2等
  4. Sqoop可以理解为:“SQL 到 Hadoop 和 Hadoop 到SQL”。

在这里插入图片描述
在这里插入图片描述
站在Apache立场看待数据流转问题,可以分为数据的导入导出:
Import:数据导入。RDBMS----->Hadoop
Export:数据导出。Hadoop---->RDBMS

二.Sqoop安装

2.1安装Sqoop

当前系统环境
1.	hadoop-2.7.5
2.	jdk1.8.0_141(node03)
3.	apache-hive-2.1.1-bin
4.	MySql(node03)

在这里插入图片描述

2.2解压Sqoop

cd /export/softwares
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C ../servers/
cd /export/servers/ 
ls

在这里插入图片描述

2.3配置Sqoop

cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf
cp   sqoop-env-template.sh   sqoop-env.sh
vim sqoop-env.sh
export HADOOP_COMMON_HOME=/export/servers/hadoop-2.7.5 
export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.7.5 

在这里插入图片描述

sql>mysqljdbc_50">2.4.加入sql>mysql的jdbc驱动包

cp /export/servers/apache-hive-2.1.1-bin/lib/sql>mysql-connector-java-5.1.38.jar  /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/

ll /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/sql>mysql-connector-java-5.1.38.jar

在这里插入图片描述

2.5. 设置ACCUMULO_HOME环境变量

mkdir -p /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/accumulo
mkdir -p /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/hcat
vim /etc/profile
export ACCUMULO_HOME=/export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/accumulo
export HCAT_HOME=/export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/hcat

在这里插入图片描述

source /etc/profile 

2.5. 验证启动,显示版本号

cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha 
bin/sqoop-version 

在这里插入图片描述

2.6.显示MySQL中的数据库

#启动MySQL
/etc/init.d/sql>mysqld start  
#本命令会列出所有sql>mysql数据库。
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
bin/sqoop list-databases --connect jdbc:sql>mysql://localhost:3306/ \
 --username root --password 123456 

在这里插入图片描述

三.Sqoop导入

3.1. 加载测试数据到MySQL(创建表)

请添加图片描述

在这里插入图片描述

3.2. 全量导入MySQL表数据到HDFS

cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
bin/sqoop import \
--connect jdbc:sql>mysql://node03:3306/dress \   #刚创建数据库名字
--username root \                            #用户名
--password 123456 \                          #密码
--delete-target-dir \
--target-dir /sqoopdressresult \
--fields-terminated-by '\t' \
--table dress_customer \
--m 1


#--target-dir用来指定导出数据存放至HDFS的目录,此目录事先不能存在
#--fields-terminated-by '\t' \   #分隔符为 /t
#--m 1    #并行度为1



在这里插入图片描述

查看导入结果

hdfs dfs -cat /sqoopdressresult/part-m-00000 

在这里插入图片描述
并行度参数–m测试

cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
bin/sqoop import \
--connect jdbc:sql>mysql://node03:3306/dress \
--username root \
--password 123456 \
--delete-target-dir \
--target-dir /sqoopdressresult2 \
--fields-terminated-by '\t' \
--split-by identity \
--table dress_customer \
--m 2 
#--m 2    #并行度为2
#--split-by  identity \  #按照 identity 字段进行拆分

查看结果

hdfs dfs -cat /sqoopdressresult2/part-m-00000
hdfs dfs -cat /sqoopdressresult2/part-m-00001
hdfs dfs -cat /sqoopdressresult2/part-m-00002
hdfs dfs -cat /sqoopdressresult2/part-m-00003

在这里插入图片描述

3.3.全量导入MySQL表数据到HIVE

将关系型数据的表结构复制到hive
create database if not exists dress; 
use dress; 
show tables; 

请添加图片描述

cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha 
bin/sqoop create-hive-table \
--connect jdbc:sql>mysql://node03:3306/dress \
--table dress_customer \
--username root \
--password 123456 \
--hive-table dress.dress_customer_sp 


# --table dress_customer为sql>mysql中的数据库dress中的表。   
# --hive-table dress_customer_sp 为hive中新建的表名称。

请添加图片描述

desc formatted dress_customer_sp;

请添加图片描述

cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
bin/sqoop import \
--connect jdbc:sql>mysql://node03:3306/dress \
--username root \
--password 123456 \
--table dress_customer \
--hive-table dress.dress_customer_sp  \
--hive-import \
--m 1

请添加图片描述

use dress;
select * from dress_customer_sp;

请添加图片描述
至此,已将MySQL数据库中的表导入到hive

四.Sqoop导出

4.1.模块开发–数据导出

在这里插入图片描述

4.2. Sqoop 导出项目数据

将数据从Hadoop生态体系导出到RDBMS数据库导出前,目标表必须存在于目标数据库中。
export有三种模式:
默认模式:是从将文件中的数据使用INSERT语句插入到表中。
更新模式:Sqoop将生成UPDATE替换数据库中现有记录的语句。
调用模式:Sqoop将为每条记录创建一个存储过程调用。

  1. Sqoop支持直接从Hive表到RDBMS表的导出操作,也支持HDFS到RDBMS表的操作,鉴于此,有如下两种方案:
  • 从Hive表到RDBMS表的直接导出:
    效率较高,相当于直接在Hive表与RDBMS表的进行数据更新,但无法做精细的控制。
  • 从Hive到HDFS再到RDBMS表的导出:
    需要先将数据从Hive表导出到HDFS,再从HDFS将数据导入到RDBMS。虽然比直接导出多了一步操作,但是可以实现对数据的更精准的操作,特别是在从Hive表导出到HDFS时,可以进一步对数据进行字段筛选、字段加工、数据过滤操作, 从而使得HDFS上的数据更“接近”或等于将来实际要导入RDBMS表的数据,提高导出速度。

4.3.Hive–>HDFS

导出dress_customer_sp表数据到HDFS

insert overwrite directory '/dress/export/dress_customer_hdfs'
row format delimited fields terminated by '\001' STORED AS textfile
select custname,identity,sex,college,phone,custype,createtime from dress_customer_sp;

# /dress/export/dress_customer_hdfs 为导入HDFS的目录
# select custname,identity,sex,college,phone,custype,createtime from dress_customer_sp; 可以根据自己的需求对数据进入筛选(SQl语句)

请添加图片描述
请添加图片描述
查看
请添加图片描述

sql_248">4.4.HDFS–>Mysql

先创建目标表 dress_customer_hdfs

cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
bin/sqoop export \
--connect jdbc:sql>mysql://192.168.174.120:3306/dress \
--username root --password 123456 \
--table dress_customer_hdfs \
--fields-terminated-by '\001' \
--columns custname,identity,sex,college,phone,custype,createtime \
--export-dir /dress/export/dress_customer_hdfs

# --table dress_customer_hdfs 表示你要导入的目标表
# columns custname,identity,sex,college,phone,custype,createtime 
表的字段
# --export-dir /dress/export/dress_customer_hdfs 表示你要导的HDFS源文件目录

导入成功
请添加图片描述
查看数据库dress_customer_hdfs表(可能中文显示为??)
请添加图片描述
修改sql>mysql的编码格式配置

#查看编码格式
 show variables like 'character%';

请添加图片描述

vim /etc/my.cnf 
 
#在[sql>mysqld]上面加入下面几句话 
[client]  
default-character-set=utf8 
  
在[sql>mysqld]最下面加入下面几句话 
default-storage-engine=INNODB  
character-set-server=utf8  
collation-server=utf8_general_ci

重启MySQL

#centos6
service sql>mysql restart

#centos7
systemctl restart sql>mysqld


http://www.niftyadmin.cn/n/1813607.html

相关文章

C#如何在控制台应用程序中加入配置文件

C#如何在控制台应用程序中加入配置文件 一、在控制台程序中加入xml文档命名为App.config(记住一定要起这个名字&#xff0c;否则不能访问)文件的内容如下&#xff1a; <?xml version"1.0" encoding"utf-8" ?><configuration><appSettings…

java 基础面试

java 基础面试 java 基础面试java 基础面试1.集合set (是无序的&#xff0c;不重复的数据)map2.重载重写的区别3.int、Integer自动拆箱、装箱介绍4、值传递和引用传递5、和equal的区别6、String 和 StringBuffer,StringBuilder 的区别是什么7、接口和抽象类的区别8、Java的基本…

程序员是“逻辑人”

据我观察&#xff0c;在软件开发者身上的所有“坏毛病”中&#xff0c;最严重的可能是&#xff1a;我们自以为是典型用户。我们对电脑如痴如醉&#xff1b;我们对它的工作原理了解甚多&#xff1b;我们甚至建议亲朋好友应该如何使用电脑。我们是专家&#xff01;谁还能比我们这…

Gallery3D的使用

*******************************************重写Gallery类用于定义控件样式等****************************************** public class GalleryFlow extends Gallery{//相机类 private Camera mCamera new Camera(); //最大转动角度 private int mMaxRotationAngle 90…

计算机视觉常用链接

跟OpenCV相关的&#xff1a; http://opencv.org/ 2012年7月4日随着opencv2.4.2版本的发布&#xff0c;opencv更改了其最新的官方网站地址。 http://www.opencvchina.com/ 好像12年才有这个论坛的&#xff0c;比较新。里面有针对《learning opencv》这本书的视频讲解&#xff0c…

解决idea导入项目子模块maven不会自动导包

idea导入项目子模块maven不会自动导包 第一步&#xff1a;看看这里有没有勾选 第二步&#xff1a;检查发现子模块没有导入maven项目 第三步&#xff1a;导入maven项目

Java中toArray的用法探究(java数组与list转换)

转载原文地址&#xff1a; http://blog.csdn.net/guopengzhang/article/details/5497875 一&#xff0e; Incident import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List<String>…

zju1058 Currency Exchange

题意&#xff1a;一个人打算在五个国家之间进行旅游&#xff08;一个国家可以去多次,比如:A->B->C->D->B&#xff09;,国家之间的钱之间都有汇率&#xff0c;求如果这人在旅途中不花钱&#xff0c;只进行钱的转换&#xff0c;最后的钱变为多少 输入&#xff1a;第一…