0


sqoop入门简介 | 安装部署 | sqoop案例展示

ETL工具sqoop

文章目录

sqoop简介

Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。
Sqoop是一个在(MySQL、Oracle)等关系型数据库和大数据平台之间进行批量数据迁移的工具。Sqoop底层能实现将关系型数据库中的数据迁移到大数据平台上是因为sqoop的底层是采用MapReduce程序实现抽取、转换、加载,MapReduce本身就并行化和高容错率,能很好的保证数据的迁移,而且与Kettle等传统ETL工具相比,Sqoop的任务跑在Hadoop集群上,能有效减少ETL服务器资源的使用情况

sqoop安装

一、安装包的获取:

sqoop安装包:
官网:http://archive.apache.org/dist/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mysql驱动:
网盘链接:https://pan.baidu.com/s/1-xksqP7DhP3wWIQeKgVi7A
提取码:1111

二、上传安装包到服务器

将sqoop安装包和mysql驱动器上传到集群中
在这里插入图片描述

三、进行安装配置

①解压sqoop压缩包

tar -zvxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/

②修改名字

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop

③修改配置文件
在sqoop/conf/目录下修改sqoop-env-template.sh的名字

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

向sqoop-env.sh中最后添加如下配置:

exportHADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
exportHADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
exportHIVE_HOME=/opt/module/hive
exportZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
exportZOOCFGDIR=/opt/module/zookeeper-3.4.10/conf
exportHBASE_HOME=/opt/module/hbase

④将jdbc驱动拷贝到sqoop/lib/目录下
cp mysql-connector-java-5.1.27-bin.jar 到 /sqoop/lib/目录下

四、验证sqoop

使用一个command命令检查sqoop是否安装完成

bin/sqoop help

出现一下内容便是安装完成:
在这里插入图片描述
测试是否能连接上mysql数据库

bin/sqoop list-databases --connect jdbc:mysql://bigdata01:3306/ --username root --password 123456

如果连接成功会获取到当前mysql数据库中的数据库
在这里插入图片描述

sqoop常用命令

sqoop import 导入
--connect jdbc:mysql://127.0.0.1:3306/$db_name 连接数据库
--username root 数据库用户名  
--password root 数据库密码
--target-dir /origin_data/$db_name/db/$1/$db_date HDFS地址
--table db_table 源头数据表
--delete-target-dir HDFS地址存在删除
--num-mappers $2 \--split-by $3 maptask数量
--input-null-string '\\N' 空值转换
--input-null-non-string '\\N' 非空字符串替换
--fields-terminated-by "\t" 字符串分割
--query "$4"' and $CONDITIONS;'
-hive-home <dir> 重写$HIVE_HOME
-hive-import 插入数据到hive当中,使用hive的默认分隔符
-hive-overwrite 重写插入
-create-hive-table 建表,如果表已经存在,该操作会报错
-hive-table <table-name> 设置到hive当中的表名
-hive-drop-import-delims 导入到hive时删除 \n, \r, and \0001
-hive-delims-replacement 导入到hive时用自定义的字符替换掉 \n, \r, and \0001
-hive-partition-key hive分区的key
-hive-partition-value <v> hive分区的值
-map-column-hive <map> 类型匹配,sql类型对应到hive类型

sqoop案例

一、基础操作

  1. 列出MySQL中有哪些数据库bin/sqoop list-databases --connect jdbc:mysql://bigdata01:3306/ --username root --password 123456结果:在这里插入图片描述
  2. 列出MySQL中test数据库下有哪些表bin/sqoop list-tables --connect jdbc:mysql://bigdata01:3306/test --username root --password 123456结果:在这里插入图片描述
  3. 在hive中etl数据库下创建一张跟mysql中一模一样的表bin/sqoop create-hive-table --connect jdbc:mysql://bigdata01:3306/test --username root --password 123456 --table student1 --hive-table etl.student1_hive 结果:在这里插入图片描述 表结构与mysql中的student1完全相同在这里插入图片描述

二、导入数据操作

导入数据指的是从非大数据平台(EDBMS)将数据同步到大数据平台(HDFS、Hive、HBASE等),关键字import

  1. MySQL到HDFS 1.1、准备数据表 首先在mysql中创建一张表CREATE TABLE `student1`(`id` int(11) NOT NULL, `name` varchar(32) NOT NULL, `sex` varchar(4) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;向表中插入数据insert into `student1`(`id`,`name`,`sex`,`age`) values (1,'sda','男',12),(2,'efa','女',15),(3,'nnc','女',19),(4,'fri','女',35),(5,'ethan','男',18),(6,'徐象','男',98),(7,'学习','女',18);在这里插入图片描述1.2、导入数据 1.2.1、 全表导入到HDFSbin/sqoop import\--connect jdbc:mysql://bigdata01:3306/test \--username root \--password 123456\--table student1 \--target-dir /test/ \--delete-target-dir \--fields-terminated-by "\t"\--num-mappers 1结果在这里插入图片描述 批量导入可以使用shell脚本,我这里仅提供一个范例,需要的同学自行修改脚本内容,并且才去的是全量导入方式,如果只需要进行增量或者变化量的导入此脚本不适用。批量导入十张表脚本:#! /bin/bashsqoop=/opt/module/sqoop/bin/sqoop#创建一个存放mysql表名的数组tables=(activity_info activity_order activity_rule activity_sku base_category1 base_province base_region comment_info holiday_info date_info)#循环遍历执行导入数据foriin${tables[@]}do{$sqoopimport\ --connect jdbc:mysql://bigdata01:3306/gmall \ --username root \ --password 123456\ --table $i\ --num-mappers 1\ --hive-import \ --fields-terminated-by "\t"\ --hive-overwrite \ --hive-table etl.$i}done

1.2.2、 导入指定的列到HDFS --columns

bash bin/sqoop import \ --connect jdbc:mysql://bigdata01:3306/test \ --username root \ --password 123456 \ --table student1 \ --columns id,name,sex \ --target-dir /test/student1 \ --delete-target-dir \ --fields-terminated-by "\t" \ --num-mappers 1 \ --split-by id 

结果:
在这里插入图片描述
1.2.3、 导入指定条件的数据到HDFS --where
内容:从student1表中查询出学生中年龄大于18岁的学生,并导入到HDFS中

bash bin/sqoop import \ --connect jdbc:mysql://bigdata01:3306/test \ --username root \ --password 123456 \ --table student1 \ --where 'age>18 and sex="男"' \ --target-dir /test/student1 \ --delete-target-dir \ --fields-terminated-by "\t" \ --num-mappers 1 \ --split-by id 

结果:
在这里插入图片描述
1.2.4、将查询结果导入到HDFS
内容:从student1表中查询出学生中年龄小于等于25的学生,并导入到HDFS中

注意:

如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。

bash bin/sqoop import \ --connect jdbc:mysql://bigdata01:3306/test \ --username root \ --password 123456 \ --query "select * from student1 where \$CONDITIONS and age <= 25" \ --target-dir /test/student1 \ --delete-target-dir \ --fields-terminated-by "\t" \ --num-mappers 1 \ --split-by id 

结果:
在这里插入图片描述

  1. MySQL到Hive首先要启动hive元数据服务 将MySQL中的test表导入到hive中bin/sqoop import\--connect jdbc:mysql://bigdata01:3306/test\--username root \--password 123456\--table student1\--num-mappers 1\--hive-import \--fields-terminated-by "\t"\--hive-overwrite \--hive-table student1结果:在这里插入图片描述注意:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库
  2. MySQL到HBase首先要启动HBASE服务。同时在HBASE中手动创建表,因为部分版本原因,可能导致sqoop不会在HBASE中自动创建表格 3.1 在HBASE中创建student1_hbase表在这里插入图片描述 3.2 将mysql中的数据同步到HBASE中bin/sqoop import\--connect jdbc:mysql://bigdata01:3306/test \--username root \--password 123456\--table student1 \--where 'id >= 5'\--hbase-create-table \--hbase-table "student1_hbase"\--hbase-row-key "id"\--column-family "info"\--num-mappers 1\--split-by id结果:在这里插入图片描述

三、导出数据操作

指定是将数据从大数据平台向非大数据平台同步数据。关键字export

  1. 从Hive/HDFS导出数据到MySQL hive的数据存储在hdfs,因此我们从hive导出到mysql的时候导的路径是hdfs上数据文件的位置。 bin/sqoop export\--connect "jdbc:mysql://bigdata01:3306/etl?useUnicode=true&characterEncoding=utf-8"\--username root \--password 123456\--table grade \--num-mappers 1\--export-dir /user/hive/warehouse/etl.db/grade/ \--input-fields-terminated-by "\t"在这里插入图片描述
标签: hive hdfs mysql

本文转载自: https://blog.csdn.net/IT_technologier/article/details/124202099
版权归原作者 徐象 所有, 如有侵权,请联系我们删除。

“sqoop入门简介 | 安装部署 | sqoop案例展示”的评论:

还没有评论