本文档介绍如何使用Sqoop工具实现文件存储HDFS和关系型数据库MySQL之间的双向数据迁移。

背景信息 Sqoop是一款开源的工具,主要用于在Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据 。既可以将一个关系型数据库(MySQL 、Oracle 、Postgres等)中的数据导入HDFS中,也可以将HDFS的数据导入到关系型数据库中。 准备工作 现在Sqoop分为Sqoop1和Sqoop2,两个版本并不兼容。本案例选择使用sqoop1的稳定版本Sqoop 1.4.7 版本。

下载Sqoop 1.4.7 版本。 解压安装包。 tar -zxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /home/hadoop/ 配置环境变量。 执行vim /etc/profile命令,打开配置文件,添加如下内容。 export SQOOP_HOME=/home/hadoop/sqoop-1.4.7.bin__hadoop-2.6.0 export PATH=$PATH:$SQOOP_HOME/bin 执行source /etc/profile命令,使配置生效。 添加数据库驱动。 下载MySQL链接包。 wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar 将MySQL链接包存放到Sqoop安装目录的lib目录下。 cp mysql-connector-java-5.1.38.jar /home/hadoop/sqoop-1.4.7.bin__hadoop-2.6.0/lib/ 修改配置文件。 执行如下命令进入/home/hadoop/sqoop-1.4.7.bin__hadoop-2.6.0/conf目录。 cd /home/hadoop/sqoop-1.4.7.bin__hadoop-2.6.0/conf 执行如下命令复制sqoop-env-template.sh,并命名为sqoop-env.sh。 cp sqoop-env-template.sh sqoop-env.sh 执行vim sqoop-env.sh命令打开配置文件,添加如下内容。 export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.7.2 export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.7.2 export HIVE_HOME=/home/hadoop/hive-2.1.0 #若没有安装hive、hbase可不必添加此配置 export HBASE_HOME=/home/hadoop/hbase-1.2.2 #若没有安装hive、hbase可不必添加此配置 执行如下命令验证数据库是否连接成功。 sqoop list-databases --connect jdbc:mysql://

--username 'username' --password 'password' 参数 说明 dburi 数据库的访问连接,例如: jdbc:mysql://0.0.0.0:3306/。 username 数据库登录用户名。 password 用户密码。 如果回显信息中显示MySQL数据库的名称,则表示连接成功。 将MySQL的数据迁移到HDFS上 在集群Sqoop节点上,使用sqoop import命令将MySQL中的数据迁移到HDFS上。

此处以迁移MySQL中的employee表为例,employee表中已写入如下数据。 01,测试用户1,1990-01-01,男 02,测试用户2,1990-12-21,男 03,测试用户3,1990-05-20,男 04,测试用户4,1990-08-06,男 05,测试用户5,1991-12-01,女 执行以下命令迁移数据。 sqoop import --connect jdbc:mysql://172.x.x.x:3306/sqoop_migrate --username 'userid' --password 'userPW' --table employee --target-dir /mysql2sqoop/table/sqoop_migrate --num-mappers 1 --columns "e_id,e_name,e_birth,e_sex" --direct 命令格式:sqoop import --connect jdbc:mysql://

/

--username

--password

--table

--check-column --incremental

--last-value

--target-dir

参数说明如下所示,更多详情请参见Sqoop Import。

参数 说明 dburi 数据库的访问连接。例如:jdbc:mysql://172.x.x.x:3306/ 。如果您的访问连接中含有参数,则请加上单引号,例如:'jdbc:mysql://172.x.x.x.235:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。 dbname 数据库的名字,例如:user。 username 数据库登录用户名。 password 用户密码。 tablename MySQL数据库中表的名称。 col 迁移表中列的名称。 mode 该模式决定Sqoop如何定义哪些行为新的行。取值:append或lastmodified。 value 前一个导入中检查列的最大值。 hdfs-dir HDFS的写入目录,此处以/mysql2sqoop/table/sqoop_migrate为例。 检查迁移结果。 执行hadoop fs -ls /mysql2sqoop/table/sqoop_migrate命令,获取迁移文件,此处以part-m-00000为例。 Found 2 items -rwxrwxrwx 3 root root 0 2019-08-21 14:42 /mysql2sqoop/table/sqoop_migrate/_SUCCESS -rwxrwxrwx 3 root root 200 2019-08-21 14:42 /mysql2sqoop/table/sqoop_migrate/part-m-00000 执行hadoop fs -cat /mysql2sqoop/table/sqoop_migrate/part-m-00000命令查看文件中的内容。 如果part-m-00000文件中有如下内容,则表示迁移成功。

01,测试用户1,1990-01-01,男 02,测试用户2,1990-12-21,男 03,测试用户3,1990-05-20,男 04,测试用户4,1990-08-06,男 05,测试用户5,1991-12-01,女 将HDFS的数据迁移到MySQL上 将HDFS的数据迁移到MySQL上,需要先在MySQL上创建好对应HDFS数据结构的表,然后在集群Sqoop节点上使用sqoop export命令进行迁移。

此处以迁移HDFS上mysqltest.txt中的数据为例,mysqltest.txt中已写入如下数据。 6,测试用户6,2019-08-10,男 7,测试用户7,2019-08-11,男 8,测试用户8,2019-08-12,男 9,测试用户9,2019-08-13,女 10,测试用户10,2019-08-14,女 创建数据库。 create database sqoop_migrate; 使用已创建的数据库。 use sqoop_migrate; 创建表。 CREATE TABLE employee ( e_id varchar(20) NOT NULL DEFAULT '', e_name varchar(20) NOT NULL DEFAULT '', e_birth varchar(20) NOT NULL DEFAULT '', e_sex varchar(10) NOT NULL DEFAULT '', PRIMARY KEY (e_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 执行以下命令迁移数据。 sqoop export --connect jdbc:mysql://172.0.0.0:3306/sqoop_migrate --username 'userid' --password 'userPW' --num-mappers 1 --table employee --columns "e_id,e_name,e_birth,e_sex" --export-dir '/sqoop2mysql/table/mysqltest.txt' --fields-terminated-by ',' 迁移命令格式:sqoop export --connect jdbc:mysql://

/

--username

--password

--table

--export-dir

参数 说明 dburi 数据库的访问连接。例如:jdbc:mysql://172.x.x.x:3306/ 。如果您的访问连接中含有参数,则请加上单引号,例如:'jdbc:mysql://172.x.x.x.235:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。 dbname 数据库的名字,例如:user。 username 数据库登录用户名。 password 用户密码。 tablename MySQL数据库中表的名称。 hdfs-dir 存放待迁移数据的HDFS目录,此处以/sqoop2mysql/table/mysqltest.txt为例。 验证迁移结果。 执行以下命令进入数据库。 mysql -uroot -p 执行以下命令使用数据库。 use sqoop_migrate; 执行select * from employee;命令查看表数据。 如果表中有如下数据,则表示迁移成功。

...

| 6 | 测试用户6 | 2019-08-10 | 男 | | 7 | 测试用户7 | 2019-08-11 | 男 | | 8 | 测试用户8 | 2019-08-12 | 男 | | 9 | 测试用户9 | 2019-08-13 | 女 | | 10 | 测试用户10 | 2019-08-14 | 女 | +------+---------------+------------+-------+ 10 rows in set (0.00 sec) 将MySQL的数据迁移到Hive上 在集群Sqoop节点上使用sqoop import命令可以将MySQL上的数据迁移到Hive上。

此处以迁移MySQL中的employee表为例,employee表中已写入如下数据。 1,测试用户1,2019-08-10,男 2,测试用户2,2019-08-11,男 3,测试用户3,2019-08-12,男 4,测试用户4,2019-08-13,女 5,测试用户5,2019-08-14,女 执行以下命令迁移数据。 sqoop import --connect jdbc:mysql://172.0.0.0:3306/sqoop_migrate --username 'userid' --password 'PW' --table employee --hive-import --hive-database default --create-hive-table --hive-overwrite -m 1 ; 迁移命令格式:sqoop import --connect jdbc:mysql://

/

--username

--password

--table

--check-column --incremental

--last-value

--fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --target-dir

--hive-table

参数 说明 dburi 数据库的访问连接。例如:jdbc:mysql://172.x.x.x:3306/ 。如果您的访问连接中含有参数,则请加上单引号,例如:'jdbc:mysql://172.x.x.x.235:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。 dbname 数据库的名字,例如:user。 username 数据库登录用户名。 password 用户密码。 tablename MySQL数据库中表的名称。 col 迁移表中列的名称。 mode 该模式决定Sqoop如何定义哪些行为新的行。取值:append或lastmodified。 value 前一个导入中检查列的最大值。 hdfs-dir HDFS的写入目录。 hive-tablename 对应的Hive中的表名。 验证迁移结果。 执行select * from default.employee;命令查看表数据,如果表中有如下数据,则表示迁移成功。

1 测试用户1 2019-08-10 男 2 测试用户2 2019-08-11 男 3 测试用户3 2019-08-12 男 4 测试用户4 2019-08-13 女 5 测试用户5 2019-08-14 女 ... Time taken: 0.105 seconds, Fetched: 14 row(s) 将Hive的数据迁移到MySQL上 将Hive的数据迁移到MySQL上,需要先在MySQL上创建好对应Hive数据结构的表,然后在集群Sqoop节点上使用sqoop export命令进行迁移。

此处以迁移Hive上hive_test.txt中的数据为例,hive_test.txt中已写入如下数据。 1,测试用户1,2019-08-10,男 2,测试用户2,2019-08-11,男 3,测试用户3,2019-08-12,男 4,测试用户4,2019-08-13,女 5,测试用户5,2019-08-14,女 在MySQL上的sqoop_migrate库中创建好要导入的表。 use sqoop_migrate ; CREATE TABLE employeeOnHive( id VARCHAR(20), name VARCHAR(20) NOT NULL DEFAULT '', birth VARCHAR(20) NOT NULL DEFAULT '', sex VARCHAR(10) NOT NULL DEFAULT '', PRIMARY KEY(id) ); 执行以下命令迁移数据。 sqoop export --connect jdbc:mysql://172.0.0.0:3306/sqoop_migrate --username 'userid' --password 'userPW' --table employeeOnHive -m 1 --fields-terminated-by ',' --export-dir /user/hive/warehouse/employeeonhive 迁移命令格式:sqoop export --connect jdbc:mysql://

/

--username

--password

--table

--export-dir

--fields-terminated-by

参数 说明 dburi 数据库的访问连接。例如:jdbc:mysql://172.x.x.x:3306/ 。如果您的访问连接中含有参数,则请加上单引号,例如:'jdbc:mysql://172.x.x.x.235:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。 dbname 数据库的名字,例如:user。 username 数据库登录用户名。 password 用户密码。 tablename MySQL数据库中表的名称。 hive-dir 存放待迁移数据的HDFS目录,此处以/sqoop2mysql/table/mysqltest.txt为例。 Splitter Hive中表中数据分隔符。hive默认为“\001”。 验证迁移结果。 执行以下进入数据库。 mysql -uroot -p 执行以下命令使用数据库。 use sqoop_migrate; 执行select * from sqoop_migrate.employeeOnHive;命令查看表数据。 如果表中有如下数据,则表示迁移成功。

+----+---------------+------------+-----+ | id | name | birth | sex | +----+---------------+------------+-----+ | 1 | 测试用户1 | 2019-08-10 | 男 | | 2 | 测试用户2 | 2019-08-11 | 男 | | 3 | 测试用户3 | 2019-08-12 | 男 | | 4 | 测试用户4 | 2019-08-13 | 女 | | 5 | 测试用户5 | 2019-08-14 | 女 | +----+---------------+------------+-----+ 5 rows in set (0.00 sec)

阿里mysql连接数据库服务器配置_配置链接mysql数据库相关推荐

  1. ef mysql 读写分离_基于 EntityFramework 的数据库主从读写分离服务插件

    基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 之 ...

  2. mysql映射表_[玩转MySQL之四]MySQL缓存机制

    一.前言 在当今的各种系统中,缓存是对系统性能优化的重要手段.MySQL Query Cache(MySQL查询缓存)在MySQL Server中是默认打开的,但是网上各种资料以及有经验的DBA都建议 ...

  3. php mysql服务器配置_配置最新的PHP加MYSQL服务器

    通过一个小时的研究和设置.实现了最新的 PHP 5.0 + MYSQL 5.0 + WIN2003. 个人认为还是有必要写个教程出来.因为很多方面和老版本的不尽相同.说实话自己也是查阅了很多官方文档才 ...

  4. mysql停止主从_不停止mysql服务配置主从

    不影响主库线上的服务前提下,增加从库,前提是线上的主库配置中已经开启binlog并且指定了server-id. linux主192.168.0.70 版本Centos6.7 nginx1.10 php ...

  5. mysql安装原理_全面解读MySQL主从复制,从原理到安装配置

    为什么需要主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了 ...

  6. mysql二维数组vb_VBA链接MYSQL的帮助类

    本类模块是用于excel的VBA链接MYSQL的帮助类 在使用该类模块前请先安装mysql 8.0 数据库驱动 MySQL 8.0: Connector/ODBC 类模块代码 Dim strcn As ...

  7. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  8. java mysql mac 安装_最新版MySQL在MacOS上的安装与使用!

    在 MacOS 上安装最新版的 MySQL 有三种方法:使用 Docker 安装: 使用 Homebrew 运行 brew install mysql 安装: 使用安装包安装. 我们本文将采用最常规的 ...

  9. mysql workbench企业_甲骨文发布MySQL Workbench 6.0版本

    甲骨文近日发布了最新的MySQL Workbench 6.0,该版本的用户界面得到了重新设计并拥有新功能,从而简化MySQL数据库的开发.设计和管理. MySQL Workbench是世界上最流行的开 ...

最新文章

  1. OpenCV读写xml和yml文件
  2. Jquer学习之jQuery(function(){})与(function(){})(jQuery)之间的区别
  3. java面试 mysql分库分表_MySQL性能管理及架构设计(三):SQL查询优化、分库分表 - 完结篇...
  4. js 对象创建及其继承的方法
  5. 32位选择进位加法器_32位加减法器设计
  6. ASP.NET Core必备笔试题(含答案)
  7. Apache Camel的性能调整思路
  8. 框架模式和设计模式的区别
  9. jieba分词_wordcloud词云美化——jieba结巴中文分词(将长句拆分)
  10. 使用EditPlus运行C/C++
  11. MySQL:零基础学数据库要看哪些书?从入门到精通全书籍推荐!
  12. MAX485芯片收发详解 实现485通信
  13. 微信公众号 html样式,公众号模板制作精美,微信公众号素材管理的正文,可以写自己CSS 样式吗?...
  14. 世界各国与中国时差查询
  15. Simulink中步长、powergui采样时间、模块采样时间、控制周期的关系
  16. 机器人遛机器狗,估计不久能看到了
  17. JVM深入学习(十六)-垃圾回收器的分类和性能指标
  18. 计算机科学与技术社会实践活动,计算机科学与技术学院学生开展“食品安全行”社会实践活动...
  19. 计算机基础1模拟题,计算机基础模拟题1(有答案)
  20. POJ1163 The Triangle

热门文章

  1. ROP简单 ret2syscall
  2. 约瑟夫环(约瑟夫问题)求最后出列的人数
  3. 矢量旋度的散度恒为零
  4. codeforce 570 problem E 51Nod-1503-猪和回文
  5. C++ 播放音频流(PCM裸流)
  6. 用户权限项目预测分析
  7. DB2 导出数据文件
  8. 全部编程皆为Web编程
  9. 一步一步搞定InfoPath(02)--配置VSTA
  10. 透过现象看本质-使用vs.net第二天