• 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
    

    扫码关注有惊喜

    (转载本站文章请注明作者和出处 白贺-studytime

  • 相关阅读:
    26个Jquery使用小技巧(jQuery tips, tricks & solutions)
    JavaScript中Eval()函数的作用
    基于邮件通道的WCF通信系统
    同步一个数据库要发多少个数据包?
    还在写SQL的同志,去喝杯咖啡吧!
    隐藏在程序旮旯中的“安全问题”
    在SQLMAP中使用动态SQL
    SQLSERVER 占了500多M内存,原来的程序无法一次查询出50多W数据了,记录下这个问题的解决过程。
    实例探究字符编码:unicode,utf8,default,gb2312 的区别
    Why to do,What to do,Where to do 与 Lambda表达式!
  • 原文地址:https://www.cnblogs.com/studytime/p/12871039.html
Copyright © 2020-2023  润新知