热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sqoop安装和数据的导入导出

Sqoop安装和数据的导入导出1、Sqoop概述Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如:MySQL,

Sqoop安装和数据的导入导出


1、Sqoop概述

Sqoop 是Hadoop 和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如:MySQL,Oracle 到 Hadoop 的 HDFS,并从 Hadoop 的文件系统导出数据到关系数据库。由 Apache 软件基金会提供。

Sqoop:“SQL 到 Hadoop 和 Hadoop 到 SQL”。

这里写图片描述

Sqoop 工作机制是将导入或导出命令翻译成 mapreduce 程序来实现。
在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。

2、Sqoop安装

安装 sqoop 的前提是已经具备 java 和 hadoop 的环境。

修改配置文件:

cd $SQOOP_HOME/conf
mv sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
export HADOOP_COMMON_HOME=/root/apps/hadoop/
export HADOOP_MAPRED_HOME=/root/apps/hadoop/
export HIVE_HOME=/root/apps/hive
export Hbase_HOME=/root/apps/hbase
加入 mysql 的 jdbc 驱动包
cp /hive/lib/mysql-connector-java-5.1.28.jar $SQOOP_HOME/lib/

验证启动

bin/sqoop list-databases --connect jdbc:mysql://localhost:3306/ --
username root --password hadoop

本命令会列出所有 mysql 的数据库。到这里,整个 Sqoop 安装工作完成。

3、Sqoop导入

“导入工具”导入单个表从 RDBMS 到 HDFS。表中的每一行被视为 HDFS 的记录。所有记录都存储为文本文件的文本数据(或者 Avro、sequence 文件等二进制数据)。
下面的语法用于将数据导入 HDFS。

$ sqoop import (generic-args) (import-args)

Sqoop 测试表数据在 mysql 中创建数据库 sqoop,然后创建两张表: emp、emp_add 。

创建emp表和emp_add表并导入数据:

DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (`id` int(11) DEFAULT NULL,`name` varchar(100) DEFAULT NULL,`deg` varchar(100) DEFAULT NULL,`salary` int(11) DEFAULT NULL,`dept` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of 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');-- ----------------------------
-- Table structure for `emp_add`
-- ----------------------------
DROP TABLE IF EXISTS `emp_add`;
CREATE TABLE `emp_add` (`id` int(11) DEFAULT NULL,`hno` varchar(100) DEFAULT NULL,`street` varchar(100) DEFAULT NULL,`city` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of 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');

3.1、导入mysql数据到hdfs

下面的命令用于从 MySQL 数据库服务器中的 emp 表导入 hdfs

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/sqoopdb \
--username root \
--password root \
--target-dir /sqoopresult \
--table emp --m 1

–target-dir 指定导出数据存放至 hdfs 的目录
–m 指定MapReduce运行线程数

查看导入的数据:

1201,gopal,manager,50000,TP
1202,manisha,Proof reader,50000,TP
1203,khalil,php dev,30000,AC
1204,prasanth,php dev,30000,AC
1205,kranthi,admin,20000,TP

可以看出它会用逗号,分隔 emp 表的数据和字段。

3.2、导入 mysql 表数据到hive

将关系型数据的表结构复制到hive中:

bin/sqoop create-hive-table \
--connect jdbc:mysql://node-1:3306/sqoopdb \
--table emp_add \
--username root \
--password root \
--hive-table itcast.emp_add_sp

–table emp_add为mysql中的数据库sqoopdb中的表
–hive-table emp_add_sp 为hive中新建的表名称

从关系数据库导入文件到hive中:

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/sqoopdb \
--username root \
--password root \
--table emp_add \
--hive-table cheng_cheng.emp_add_sp \
--hive-import \
--m 1

3.3、导入表数据子集

–where 可以指定从关系数据库导入数据时的查询条件。它执行在各自的数据库服务器相应的 SQL 查询,并将结果存储在hdfs的目标目录。

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/sqoopdb \
--username root \
--password root \
--where "city ='sec-bad'" \
--target-dir /sqoop_wherequery \
--table emp_add --m 1

复杂查询条件:

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/sqoopdb \
--username root \
--password root \
--target-dir /sqoo_wherequerys \
--query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 1

3.4、增量导入

增量导入是仅导入新添加行的数据。

  • –check-column (col) 用来作为判断的列名,如 id
  • –incremental (mode) append:追加,比如对大于 last-value 指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加 last-value指定的日期之后的记录
  • –last-value (value) 指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值

新添加数据:

INSERT INTO `emp` VALUES ('1206', 'satish', 'grp', '20000', 'GR');
INSERT INTO `emp` VALUES ('1207', 'ss', 'cc', '1000', 'DF');
INSERT INTO `emp` VALUES ('1208', 'aa', 'cd', '12000', 'DC');

增量导入:

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/sqoopdb \
--username root \
--password root \
--target-dir /sqoopresult_zeng \
--table emp --m 1 \
--incremental append \
--check-column id \
--last-value 1205

4、Sqoop导出

将数据从 HDFS 导出到 RDBMS 数据库导出前,目标表必须存在于目标数据库中。
默认操作是从将文件中的数据使用INSERT语句插入到表中,更新模式下,是生成UPDATE语句更新表数据。

以下是 export 命令语法:

$ sqoop export (generic-args) (export-args)

导出hdfs数据到 mysql

数据是在hdfs中“/sqoopresult”目录中
在mysql中创建目标表:

CREATE TABLE `hdfs_to_emp` (`id` int(11) DEFAULT NULL,`name` varchar(100) DEFAULT NULL,`deg` varchar(100) DEFAULT NULL,`salary` int(11) DEFAULT NULL,`dept` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

执行导出命令:

bin/sqoop export \
--connect jdbc:mysql://node-1:3306/sqoopdb \
--username root \
--password root \
--table hdfs_to_emp \
--export-dir /sqoopresult/

导出结果

这里写图片描述

  • 1.列出mysql数据库中的所有数据库命令


bin/sqoop list-databases \
--connect jdbc:mysql://node-21:3306 \
--username root \
--password hadoop

  • 2.连接mysql并列出数据库中的表命令

bin/sqoop list-tables \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--username root \
--password hadoop

喜欢就点赞评论+关注吧

这里写图片描述

感谢阅读,希望能帮助到大家,谢谢大家的支持!


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • 前言折腾了一段时间hadoop的部署管理,写下此系列博客记录一下。为了避免各位做部署这种重复性的劳动,我已经把部署的步骤写成脚本,各位只需要按着本文把脚本执行完,整个环境基本就部署 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 我们有(据我所知)星型模式SQL数据库中的数据文件。该数据库有5个不同的文件,扩展名为 ... [详细]
  • 如何在mysqlshell命令中执行sql命令行本文介绍MySQL8.0shell子模块Util的两个导入特性importTableimport_table(JS和python版本 ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
  • Kylin 单节点安装
    软件环境Hadoop:2.7,3.1(sincev2.5)Hive:0.13-1.2.1HBase:1.1,2.0(sincev2.5)Spark(optional)2.3.0K ... [详细]
  • MapReduce工作流程最详细解释
    MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太 ... [详细]
  • Zookeeper为分布式环境提供灵活的协调基础架构。ZooKeeper框架支持许多当今最好的工业应用程序。我们将在本章中讨论ZooKeeper的一些最显着的应用。雅虎ZooKee ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
  • Java开发实战讲解!字节跳动三场技术面+HR面
    二、回顾整理阿里面试题基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。自我介绍JVM如何加载一个类的过程,双亲委派模型中有 ... [详细]
author-avatar
鬎瀰_418
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有