数据集成工具的使用(一)---Sqoop 从理论学习到熟练使用

本期与大家分享的是,小北精心整理的大数据学习笔记,数据采集工具Sqoop 的详细介绍,希望对大家能有帮助,喜欢就给点鼓励吧,记得三连哦!欢迎各位大佬评论区指教讨论!

💜🧡💛制作不易,各位大佬们给点鼓励!
🧡💛💚点赞👍 ➕ 收藏⭐ ➕ 关注✅
💛💚💙欢迎各位大佬指教,一键三连走起!

往期好文推荐:
🔶🔷数据集成工具的使用(二)—DataX 从理论学习到熟练使用
🔶🔷数据集成工具的使用(三)—FlinkX 从理论学习到熟练使用
🔶🔷数据集成工具的使用(四)—Flume 从理论学习到熟练使用
🔶🔷数据集成工具的使用(五)—Kettle 从理论学习到熟练使用

一、理论学习篇

1、Sqoop简介

        在阿帕奇阁楼(The Apache Attic)中,Sqoop是这样介绍的:(Apache Sqoop mission was the creation and maintenance of software related to Bulk Data Transfer for Apache Hadoop and Structured Datastores.) Apache Sqoop 的任务是创建和维护与 Apache Hadoop 和结构化数据存储的批量数据传输相关的软件。我们可以理解为:Sqoop是将关系数据库(oracle、mysql、postgresql等)数据与hadoop数据进行转换的工具、

在这里插入图片描述

Sqoop官网:http://sqoop.apache.org/

Sqoop的版本:(两个版本完全不兼容,sqoop1使用最多)
sqoop1:1.4.x
sqoop2:1.99.x

与Sqoop同类的产品有 :DataX:阿里顶级数据交换工具

2、Sqoop原理架构

        如下图,我们可以看出,Sqoop架构是非常简单的,Sqoop是hadoop生态系统架构中最简单的框架。Sqoop1.4x版本由client端直接接入hadoop,任务通过解析生成对应的maprecue执行。

在这里插入图片描述

3、使用Sqoop将数据导入到HDFS流程解析

在这里插入图片描述

4、Sqoop从HDFS导出数据流程解析

在这里插入图片描述

二、熟练使用篇

(一)、Sqoop的安装

1、上传安装包并解压(到指定目录)

tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/soft/

2、修改sqoop的文件夹名字

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop-1.4.6

3、修改sqoop的配置文件

# 切换到sqoop配置文件目录
cd /usr/local/soft/sqoop-1.4.6/conf
# 复制配置文件并重命名
cp sqoop-env-template.sh sqoop-env.sh
# vim sqoop-env.sh 编辑配置文件,并加入以下内容
export HADOOP_COMMON_HOME=/usr/local/soft/hadoop/hadoop-2.7.6
export HADOOP_MAPRED_HOME=/usr/local/soft/hadoop/hadoop-2.7.6/share/hadoop/mapreduce
export HBASE_HOME=/usr/local/soft/hbase-1.4.6
export HIVE_HOME=/usr/local/soft/hive-1.2.1
export ZOOCFGDIR=/usr/local/soft/zookeeper/zookeeper-3.4.6/conf
export ZOOKEEPER_HOME=/usr/local/soft/zookeeper/zookeeper-3.4.6

# 切换到bin目录
cd /usr/local/soft/sqoop-1.4.6/bin
# vim configure-sqoop 修改配置文件,注释掉没用的内容(也就是为了去掉警告信息)

在这里插入图片描述

4、修改环境变量

vim /etc/profile
# 将sqoop的目录加入环境变量
export SQOOP_HOME=/usr/local/soft/sqoop-1.4.6
export PATH=$SQOOP_HOME/bin

5、添加MySQL的连接驱动

# 添加MySQL连接驱动到$SQOOP_HOME/lib
#这里是从HIVE中复制MySQL连接驱动到$SQOOP_HOME/lib
cp /usr/local/soft/hive-1.2.1/lib/mysql-connector-java-5.1.49.jar /usr/local/soft/sqoop-1.4.6/lib/

6、测试安装

# 打印sqoop版本
sqoop version

在这里插入图片描述

# 测试MySQL连通性
sqoop list-databases -connect jdbc:mysql://master:3306?useSSL=false -username root -password 123456

在这里插入图片描述

(二)、准备MySQL数据

1.登录MySQL数据库并创建student数据库

#登录
mysql -u root -p123456;
#创建
create database student;
#切换
use student

2.向student数据库导入数据

方式一: mysql shell
source /root/student.sql;
source /root/score.sql;
方式二: linux shell
mysql -u root -p123456 student</root/student.sql
mysql -u root -p123456 student</root/score.sql
方式三: 使用Navicat运行SQL文件

导出MySQL数据库的方法

mysqldump -u root -p123456 数据库名>任意一个文件名.sql

(三)、import 从传统的关系型数据库导入HDFS、HIVE、HBASE…

1、 MySQLToHDFS

编写脚本,并保存为MySQLToHDFS.conf文件
import
--connect
jdbc:mysql://master:3306/student?useSSL=false
--username
root
--password
123456
--table
student
--m
2
--split-by
age
--target-dir
/sqoop/data/student1
--fields-terminated-by
','
执行编写的MySQLToHDFS.conf脚本文件
sqoop --options-file MySQLToHDFS.conf
注意事项:

1、–m 表示指定生成的Map任务个数,注意,个数不是越多越好,因为MySQL Server的承载能力有限

2、当指定的Map任务个数大于1时,那么就需要结合--split-by参数,用于指定分割键,以用来确定每个map任务应该到底读取哪一部分的数据,最好要指定数值型的列,最好指定列为主键(或者是分布均匀的列,这样可以避免每个map任务处理的数据量差别过大)

3、若指定的分割键数据分布不均匀,那么可能会导致数据倾斜问题

4、分割的键最好指定为数值型的列,而且字段的类型为int、bigint这样的数值型

5、编写脚本的时候,注意事项:例如:--username参数,参数值不能和参数名同一行

--username root  // 错误的

// 应该分成两行
--username
root

6、当运行的时候报错InterruptedException,不用担心,这是hadoop2.7.6自带的问题,忽略它就行

在这里插入图片描述

7、Sqoop读取mysql数据实际用的是JDBC的方式,当数据量大的时候,效率不是很高

8、Sqoop底层是通过MapReduce完成数据导入导出的,并且只需要Map任务而不需要Reduce任务

9、每个Map任务会都生成一个文件

2、MySQLToHive

先会将MySQL的数据导出来并在HDFS上找个目录临时存放,( 默认为:/user/用户名/ ),然后再将数据加载到Hive中,加载完成后,会将临时存放的目录删除

编写脚本,并保存为MySQLToHIVE.conf文件
import 
--connect
jdbc:mysql://master:3306/student?useSSL=false
--username
root
--password
123456
--table
score
--fields-terminated-by
"\t"
--lines-terminated-by 
"\n"
--m
3
--split-by
student_id
--hive-import
--hive-overwrite
--create-hive-table
--hive-database
testsqoop
--hive-table
score
--delete-target-dir
在Hive中创建testsqoop库
hive> create database testsqoop;
执行脚本
sqoop --options-file MySQLToHIVE.conf
–direct

加上这个参数,可以在导出MySQL数据的时候,使用MySQL提供的导出工具mysqldump,可以加快导出速度,提高效率

需要将master上的/usr/bin/mysqldump分发至 node1、node2的/usr/bin目录下

scp /usr/bin/mysqldump node1:/usr/bin/
scp /usr/bin/mysqldump node2:/usr/bin/
-e参数的使用
import 
--connect 
jdbc:mysql://master:3306/student 
--username 
root 
--password 
123456 
--fields-terminated-by 
"\t" 
--lines-terminated-by 
"\n" 
--m 
2 
--split-by 
student_id 
--e 
"select * from score where student_id=1500100011 and $CONDITIONS" 
--target-dir 
/testQ 
--hive-import 
--hive-overwrite 
--create-hive-table 
--hive-database 
testsqoop 
--hive-table 
score2

3、MySQLToHBase

编写脚本,并保存为MySQLToHBase.conf
import 
--connect 
jdbc:mysql://master:3306/student?useSSL=false
--username 
root 
--password 
123456
--table 
student
--hbase-table 
student
--hbase-create-table
--hbase-row-key 
id 
--m 
1
--column-family 
cf1
在HBase中创建student表
create 'student','cf1'
执行脚本
sqoop --options-file MySQLToHBase.conf

(四)、 export操作 从HDFS、HIVE、HBASE… 导出到传统的关系型数据库

1、HDFSToMySQL

编写脚本,并保存为HDFSToMySQL.conf
export
--connect
jdbc:mysql://master:3306/student?useUnicode=true&characterEncoding=UTF-8
--username
root
--password
123456
--table
student
-m
1
--columns
id,name,age,gender,clazz
--export-dir
/sqoop/data/student1/
--fields-terminated-by 
','
先清空MySQL student表中的数据,不然会造成主键冲突
执行脚本
sqoop --options-file HDFSToMySQL.conf

(五)、查看sqoop help

sqoop help

21/04/26 15:50:36 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
usage: sqoop COMMAND [ARGS]

Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval               Evaluate a SQL statement and display the results
  export             Export an HDFS directory to a database table
  help               List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  import-mainframe   Import datasets from a mainframe server to HDFS
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information

See 'sqoop help COMMAND' for information on a specific command.
# 查看import的详细帮助
sqoop import --help
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北慕辰

你的鼓励是小北最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值