Sqoop学习之路

时间:2022-06-23
本文章向大家介绍Sqoop学习之路,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Sqoop知识梳理、环境搭建、基本原理、常用命令、Sqoop练习等

Sqoop学习之路

一、概述

Sqoop (SQL to Hadoop) 是Apache顶级项⽬,官⽹地址:http://sqoop.apache.org.

为了高效的实现关系数据库与hadoop之间的数据导入导出,hadoop生态圈提供了工具sqoop.

核心的功能:

  • 把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS HBase 和 Hive) 中.
  • 把数据从 Hadoop 系统里抽取并导出到关系型数据库里.

版本介绍:

Sqoop 2.0 主要解决 Sqoop 1.x 扩展难的问题,提出的 Server-Client 模型,具体用的不是特别多.

本文主要介绍的还是 Sqoop 1.x,最新的 Sqoop 版本是 1.4.7.

常用场景:

  • 数据迁移:关系型数据库迁移至hadoop大数据平台中,进行大数据分析等,sql to hadoop
  • 可视化分析结果存储,hadoop大数据分析后,统计结果导入关系型数据库。现有可视化工具与关系型数据库配合良好
  • 数据增量导入

二、基本思想

采用插拔式 Connector 的架构,Connector 是与特定数据源相关的组件,主要负责抽取和加载数据.

主要具备的特点:

  • 性能高,Sqoop 采用 MapReduce 完成数据的导入导出,具备了 MapReduce 所具有的优点,包括并发度可控,高容错性,高扩展性等.
  • 自动类型转换,可读取数据源元信息,自动完成数据类型映射,当然用户也可自定义类型映射关系.
  • 自动传播元信息,数据在数据发送端和数据接收端之间传递数据的同时,也会传递元信息,保证接收端和采集端元信息一致.

三、工作机制

Sqoop1 是一个客户端工具,不需要启动任何服务就可以使用。是一个只有的 Map 的 MapReduce 作业,充分利用 MapReduce 的高容错行以及高扩展性的优点,将数据迁移任务转换为 MapReduce 来作业。

整体架构:

将导入或导出命令翻译成 MapReduce 程序来实现, 在翻译出的 MapReduce 中主要是对 InputFormat 和 OutputFormat 进行定制.

Sqoop1的整体架构图:

工作流程简述:

  • 客户端 shell 提交迁移作业
  • Sqoop 从关系型数据库中读取元信息
  • 根据鬓发度和数据表大小将数据划分成若干分片,每片举哀给一个 Map Task 处理
  • 多个Map Task同时读取数据库中数据,并行将数据写入目标存储系统中,比如(hdfs、Hbase、Hive等)

允许用户通过定制各种参数控制作业,包括任务并发度,数据数据源,目标数据源,超时时间等。

缺点整理:

  • Connector 定制麻烦
  • 客户端软件繁多
  • 安全问题

四、安装

1、 前提概述

将来 sqoop 在使用的时候有可能会跟那些系统或者组件打交道?

HDFS, MapReduce, YARN, ZooKeeper, Hive, HBase, MySQL

2、软件下载

下载地址http://mirrors.hust.edu.cn/apache/

sqoop版本说明:

绝大部分企业所使用的 sqoop 的版本都是 sqoop1

sqoop-1.4.6 或者 sqoop-1.4.7 它是 sqoop1

sqoop-1.99.4----都是 sqoop2

此处使用sqoop-1.4.7版本sqoop-1.4.7.bin__hadoop-2.0.4-alpha.tar.gz

3、安装步骤

(1)通过命令下载 Sqoop,解压后,放到/software/ 目录中:

cd /data/pkg/
wget http://mirrors.shu.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /software/
cd /software/
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7

(2) 进入到 conf 文件夹,找到 sqoop-env-template.sh,修改其名称为 sqoop-env.sh cd conf

cd sqoop-1.4.7/conf/
mv sqoop-env-template.sh sqoop-env.sh

(3) 修改 sqoop-env.sh

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/software/hadoop-2.7.3

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/software/hadoop-2.7.3

#set the path to where bin/hbase is available
export HBASE_HOME=/software/hbase-1.2.4

#Set the path to where bin/hive is available
export HIVE_HOME=/software/apache-hive-2.1.1-bin

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/software/zookeeper-3.4.9

为什么在sqoop-env.sh 文件中会要求分别进行 common和mapreduce的配置呢???

在apache的hadoop的安装中;四大组件都是安装在同一个hadoop_home中的 但是在CDH, HDP中, 这些组件都是可选的。 在安装hadoop的时候,可以选择性的只安装HDFS或者YARN, CDH,HDP在安装hadoop的时候,会把HDFS和MapReduce有可能分别安装在不同的地方。

(4)加入 mysql 驱动包到 sqoop1.4.7/lib 目录下

# 下载 mysql connector
cd /data/pkg
wget --no-check-certificate  http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.32.tar.gz


# 该命令会在/data/pkg下产生mysql-connector-java-5.1.32.tar.gz
tar -zxvf mysql-connector-java-5.1.32.tar.gz -C /software

# 拷贝文件
cp /software/mysql-connector-java-5.1.32/mysql-connector-java-5.1.32.jar /software/sqoop-1.4.7/lib/

(5)配置系统环境变量

vim /etc/profile
# sqoop
export SQOOP_HOME=/software/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin

保存退出使其立即生效

source /etc/profile

(6) 验证安装是否成功

sqoop-version 或者 sqoop version

(7) 解决告警问题,修改配置文件 configure-sqoop

vim bin/configure-sqoop

注释截图中的内容,行数已标明

(8) 查看 Sqoop 版本

四、Sqoop的基本命令

  1. 基本操作 可以使用 sqoop help 来查看,sqoop 支持哪些命令
[hadoop@bigdata hadoop]$ sqoop help
19/06/05 08:12:38 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
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.
[hadoop@bigdata hadoop]$

特殊说明可以使用sqoop help COMMAND查看具体命令的用法

  1. 列出所有的数据库sqoop list-databases --connect jdbc:mysql://bigdata/ --username root --password baihe2019
  2. 列出所有的数据表
sqoop list-tables --connect jdbc:mysql://bigdata/bigdata --username root -P

五、Sqoop练习

import 基本操作

语法格式: sqoop import (generic-args) (import-args)

常用参数:

--connect <jdbc-uri]]> jdbc 连接地址
--connection-manager <class-name]]> 连接管理者
--driver <class-name]]> 驱动类
--hadoop-mapred-home <dir]]> $HADOOP_MAPRED_HOME
--help help 信息
-P 从命令行输入密码
--password <password]]> 密码
--username <username]]> 账号
--verbose 打印流程信息
--connection-param-file <filename]]> 可选参数

案例1:

导出数据库bigdata中的doctor表到hadoop的/prod/data目录中

sqoop import --connect jdbc:mysql://bigdata:3306/bigdata --username root --password baihe2019 --table doctor -m 1 --target-dir /prod/data

导入:指定自定义查询SQL,导出数据库bigdata中的sql语句中查询的数据到hadoop的/prod/data目录中

sqoop import --connect jdbc:mysql://bigdata:3306/bigdata --username root --password baihe2019 -m 1 --query "select doctoruid from doctor where doctoruid > 52314 and $CONDITIONS"  --target-dir /prod/data1