栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Sqoop

Sqoop

一、概述

Sqoop 是 Apache 旗下一款“ Hadoop 和关系数据库服务器之间传送数据 ”的工具,实现大数据平台与关系型数据库之间的数据迁移。

导入 import:关系型数据库导入数据到大数据平台

导出 export:大数据平台数据导出到关系型数据库

Sqoop的本质是一个命令行工具,将数据迁移的命令转化为MR程序。传统MR程序的输入输出都是HDFS,Sqoop底层只需重新定义输入 InputFormat 和输出 OutputFormat,以实现从关系型数据库读取数据和向关系型数据库写入数据。

二、安装

安装包下载地址:Index of /dist/sqoophttp://archive.apache.org/dist/sqoop/

安装步骤:

1、下载安装包并解压

2、进入conf目录,将sqoop-env-template.sh修改为sqoop-env.sh

        mv sqoop-env-template.sh sqoop-env.sh

3、修改sqoop-env.sh

        写入HADOOP_COMMON_HOME、HADOOP_MAPRED_HOME

        Hbase_HOME、HIVE_HOME、ZOOCFGDIR

        其中 ZOOCFGDIR 的路径是Zookeeper的conf目录

        export ZOOCFGDIR=/home/hadoop/apps/zookeeper-3.4.10/conf

4、将mysql驱动包添加到 lib 目录下

5、配置环境变量

6、验证  sqoop version

三、Sqoop的基本命令

sqoop help 查看 sqoop 支持哪些命令

sqoop help command 查看具体命令的使用。其实没啥用,用的时候根据需求搜博客就行了,只需要知道sqoop可以实现哪些功能,可以大致看懂命令含义就行。

四、数据导入

Sqoop可以将RDBMS的数据导入到HDFS、Hive、Hbase ...

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

常用参数

--connect                        数据库链接url
--username                     数据库的用户名
--password                     数据库的密码
--table                             要导出数据的mysql数据库表
-m                                   MapTask的个数
--target-dir                      导出数据在HDFS上的存储目录
--fields-terminated-by     每条记录中字段之间的分隔符(HDFS上数据的分隔符))                  --columns                       指定查询列(需要与--where 一起使用)
--where                           查询SQL的where条件
--query                            查询SQL

1、导入数据到HDFS

        Sqoop从RDBMS导入单个表到HDFS。表中每一行被看做HDFS的记录。所有记录都存储为文本文件的文本数据。

普通导入

        导入mysql库中的help_keyword的数据到HDFS上的默认路径:/user/hadoop/help_keyword

sqoop import  
--connect jdbc:mysql://hadoop02:3306/mysql  
--username root  
--password root  
--table help_keyword  
-m 1

指定分隔符和导入路径

sqoop import  
--connect jdbc:mysql://hadoop02:3306/mysql  
--username root  
--password root  
--table help_keyword  
--target-dir /user/hadoop11/my_help_keyword1  
--fields-terminated-by 't'  
-m 2

带where条件

sqoop import  
--connect jdbc:mysql://hadoop02:3306/mysql  
--username root  
--password root  
--where "name='STRING' "
--table help_keyword  
--target-dir /sqoop/hadoop11/myoutport1  
-m 1

查询指定列

sqoop import  
--connect jdbc:mysql://hadoop02:3306/mysql  
--username root  
--password root  
--columns "name"
--where "name='STRING' "
--table help_keyword  
--target-dir /sqoop/hadoop11/myoutport22  
-m 1 

指定自定义查询SQL

sqoop import  
--connect jdbc:mysql://hadoop02:3306/  
--username root  
--password root  
--target-dir /user/hadoop/myimport33_1  
--query 'select help_keyword_id,name from mysql.help_keyword where $ConDITIONS and name = "STRING"'
--split-by  help_keyword_id
--fields-terminated-by 't'  
-m 4 

# --split-by: 指定数据切分字段,每个MapTask对应(split_max - split_min) / m 的数据

在以上需要按照自定义SQL语句导出数据到HDFS的情况下:
1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义
2、自定义的SQL语句中必须带有WHERe $CONDITIONS 

2、导入数据到Hive 普通导入

        数据存储在默认的default hive库中,表名就是对应的mysql的表名

        导入步骤:

                1)导入mysql.help_keyword的数据到hdfs的默认路径
                2)自动仿造mysql.help_keyword去创建一张hive表, 创建在默认的default库中
                3)把临时目录中的数据导入到hive表中

sqoop import  
--connect jdbc:mysql://hadoop02:3306/mysql  
--username root  
--password root  
--table help_keyword  
--hive-import         # 指定导入到Hive
-m 1 

指定行分隔符和列分隔符

sqoop import  
--connect jdbc:mysql://hadoop02:3306/mysql  
--username root  
--password root  
--table help_keyword  
--fields-terminated-by "t"  
--lines-terminated-by "n"  
--hive-import  
--hive-overwrite                    # 指定覆盖导入
--create-hive-table               # 指定自动创建Hive表
--delete-target-dir                 # 指定删除中间结果数据目录
--hive-database  mydb_test             # 指定Hive数据库
--hive-table new_help_keyword        # 指定Hive表名

# sqoop会自动创建hive的表。 但是不会自动创建不存在的库

增量导入 

        数据抽取通常情况下都是定时抽取,抽取的数据一定是一个增量数据。增量导入使用较多。

        全量数据:表中的所有数据

        增量数据:数据库中现有数据和原始数据的差,即新增的数据。

        增量数据需要一个标记字段,该字段可以代表数据的顺序,通常采用时间戳

增量导入参数:

--incremental 增量数据抽取  # append:追加   lastmodified:最后一次修改

--check-column      顺序标识字段

--last-value        标识字段的最后一个值,从这个值后边的数据开始追加

sqoop import  
--connect jdbc:mysql://hadoop02:3306/mysql  
--username root  
--password root  
--table help_keyword  
--target-dir /user/hadoop/myimport_add  
--incremental  append  
--check-column  help_keyword_id
--last-value 500  
-m 1

3、导入数据到Hbase

sqoop import
--connect jdbc:mysql://hadoop02:3306/mysql
--username root
--password root
--table help_keyword
--hbase-table new_help_keyword
--column-family person
--hbase-row-key help_keyword_id 

五、数据导出 

        Hbase数据不能直接导出到mysql。可以先将Hbase数据导出到HDFS或hive中,再导出到mysql。Hbase数据千亿级别,通常不会导出到mysql中。

[注]:导出的RDBMS的表必须自己预先创建,Sqoop 不会自动创建

1、导出HDFS数据到MySql

sqoop export
--connect jdbc:mysql://hadoop02:3306/spider
--username root
--password root
--table student         # MySql中的表(需要手动创建)
--export-dir /sqoop/student/         # HDFS的数据路径
--fields-terminated-by ','    # 指定HDFS的数据分隔符(默认只支持单字节分割符?有待考证)

2、导出Hive数据到MySql

sqoop export
--connect jdbc:mysql://hadoop02:3306/sqoopdb
--username root
--password root
--table uv_info
--export-dir /user/hive/warehouse/uv/dt=2011-08-03         # Hive数据的存储路径(HDFS)
--input-fields-terminated-by 't'         # 数据的输入分隔符

六、其它操作 列出mysql数据库中的所有数据库

sqoop list-databases
--connect jdbc:mysql://hadoop02:3306/
-username root
-password root 

连接mysql并列出数据库中的表

sqoop list-tables
--connect jdbc:mysql://hadoop02:3306/jdbc_test1704
-username root
-password root 

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

sqoop create-hive-table
--connect jdbc:mysql://hadoop02:3306/jdbc_test1704
--table student
--username root
--password root
--hive-table mydb_test.student  
--fields-terminated-by "t"  
--lines-terminated-by "n" 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673513.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号