一、理论学习篇 1、Sqoop简介本期与大家分享的是,小北精心整理的大数据学习笔记,数据采集工具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
2、Sqoop原理架构与Sqoop同类的产品有 :DataX:阿里顶级数据交换工具
如下图,我们可以看出,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.63、修改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/bin5、添加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 student2.向student数据库导入数据 方式一: mysql shell
source /root/student.sql; source /root/score.sql;方式二: linux shell
mysql -u root -p123456 student 方式三: 使用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 root6、当运行的时候报错InterruptedException,不用担心,这是hadoop2.7.6自带的问题,忽略它就行
7、Sqoop读取mysql数据实际用的是JDBC的方式,当数据量大的时候,效率不是很高
8、Sqoop底层是通过MapReduce完成数据导入导出的,并且只需要Map任务而不需要Reduce任务
2、MySQLToHive9、每个Map任务会都生成一个文件
编写脚本,并保存为MySQLToHIVE.conf文件先会将MySQL的数据导出来并在HDFS上找个目录临时存放,( 默认为:/user/用户名/ ),然后再将数据加载到Hive中,加载完成后,会将临时存放的目录删除
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 score23、MySQLToHbase 编写脚本,并保存为MySQLToHbase.confimport --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.confexport --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 helpsqoop 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



