资讯专栏INFORMATION COLUMN

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

verano / 2383人阅读

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

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

一、理论学习篇

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.6export HADOOP_MAPRED_HOME=/usr/local/soft/hadoop/hadoop-2.7.6/share/hadoop/mapreduceexport HBASE_HOME=/usr/local/soft/hbase-1.4.6export HIVE_HOME=/usr/local/soft/hive-1.2.1export ZOOCFGDIR=/usr/local/soft/zookeeper/zookeeper-3.4.6/confexport 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.6export PATH=$SQOOP_HOME/bin

5、添加MySQL的连接驱动

# 添加MySQL连接驱动到$SQOOP_HOME/lib#这里是从HIVE中复制MySQL连接驱动到$SQOOP_HOME/libcp /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.sqlmysql -u root -p123456 student</root/score.sql

方式三: 使用Navicat运行SQL文件

导出MySQL数据库的方法

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

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

1、 MySQLToHDFS

编写脚本,并保存为MySQLToHDFS.conf文件

import--connectjdbc:mysql://master:3306/student?useSSL=false--usernameroot--password123456--tablestudent--m2--split-byage--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  // 错误的// 应该分成两行--usernameroot

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 --connectjdbc:mysql://master:3306/student?useSSL=false--usernameroot--password123456--tablescore--fields-terminated-by"/t"--lines-terminated-by "/n"--m3--split-bystudent_id--hive-import--hive-overwrite--create-hive-table--hive-databasetestsqoop--hive-tablescore--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--connectjdbc:mysql://master:3306/student?useUnicode=true&characterEncoding=UTF-8--usernameroot--password123456--tablestudent-m1--columnsid,name,age,gender,clazz--export-dir/sqoop/data/student1/--fields-terminated-by ","

先清空MySQL student表中的数据,不然会造成主键冲突

执行脚本

sqoop --options-file HDFSToMySQL.conf

(五)、查看sqoop help

sqoop help21/04/26 15:50:36 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6usage: 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 informationSee "sqoop help COMMAND" for information on a specific command.
# 查看import的详细帮助sqoop import --help

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121949.html

相关文章

  • 学习Hadoop大数据基础框架

    摘要:大快的大数据通用计算平台,已经集成相同版本号的开发框架的全部组件。,更是集成了大快的大数据一体化开发框架开发框架提供了大数据搜索自然语言处理和人工智能开发中常用的二十多个类,通过总计一百余种方法,实现了倍以上的开发效率的提升。 什么是大数据?进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,...

    amc 评论0 收藏0
  • 数据迁移工具辅助向云端迁移

    摘要:如果我们可以克服一些数据迁移的挑战,将一个数据仓库以及其数据分析工具从数据中心中的专用服务器转移到基于云的文件系统和数据库就可以解决这个问题。数据迁移工具辅助向云端迁移从数据库抽取数据很容易,从数据库中有效挖掘大容量数据确是一项挑战。 云计算和数据仓库是合理的一对。云存储可以按需扩展,云可以将大量服务器贡献于某一具体任务。数据仓库通用功能是本地数据分析工具,受到计算和存储资源的限制,同时也受...

    scq000 评论0 收藏0
  • 如何克服云端数据仓库数据迁移问题?

    摘要:如果我们可以克服一些数据迁移的挑战,将一个数据仓库以及其数据分析工具从数据中心中的专用服务器转移到基于云的文件系统和数据库就可以解决这个问题。数据迁移工具辅助向云端迁移从数据库抽取数据很容易,从数据库中有效挖掘大容量数据确是一项挑战。 云计算和数据仓库是合理的一对。云存储可以按需扩展,云可以将大量服务器贡献于某一具体任务。数据仓库通用功能是本地数据分析工具,受到计算和存储 资源的限制,同时也...

    sumory 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<