Sqoop

作者: 点点渔火 | 来源:发表于2019-03-30 00:02 被阅读0次

    刚开始看《大数据知识体系讲解》, Sqoop一直在用,却没有好好了解过,Mark一下

    概念

    sql to Hadoop, 关系型数据库与hdoop之间的数据ETL工具, 支持全量和增量更新
    git地址: https://github.com/apache/sqoop 学完java浏览下源码实现
    官网地址: http://sqoop.apache.org/

    基本思想

    插拔式Connector架构, Connector是与特定数据源相关的组件, 主要负责(从特定数据源中)抽取和加载数据。

    用户可选择Sqoop自带的Connector, 或者数据库提供的native Connector。

    Sqoop: MapReduce方式并行导入导出,性能高; 类型自动转换(用户也可自定义类型转换); 自动传播元信息。

    基本架构

    两个版本, 完全不兼容, 下载地址: http://mirrors.hust.edu.cn/apache/sqoop/

    Sqoop1(1.4.6, 1.4.7)

    客户端工具, 不需要启动任何服务,调起MapReuce作业(实际只有Map操作), 使用方便, 只有命令行交互方式。

    缺陷:
    (1) 仅支持JDBC的Connector
    (2) 要求依赖软件必须安装在客户端上(包括Mysql/Hadoop/Oracle客户端, JDBC驱动,数据库厂商提供的Connector等)。
    (3)安全性差: 需要用户提供明文密码

    Sqoop1

    部署方式:

    • 修改conf/sqoop-env-template.sh名称为 sqoop-env.sh
      没用到Hive和HBase可以不用配置相关项,使用时会弹出警告
     22 #Set path to where bin/hadoop is available
     23 export HADOOP_COMMON_HOME=/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23
     24 
     25 #Set path to where hadoop-*-core.jar is available
     26 export HADOOP_MAPRED_HOME=/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23
     27 
     28 #set the path to where bin/hbase is available
     29 #export HBASE_HOME=
     30 
     31 #Set the path to where bin/hive is available
     32 #export HIVE_HOME=
     33 
     34 #Set the path for where zookeper config dir is
     35 #export ZOOCFGDIR=
    
    • 添加数据库厂商Jdbc驱动包到lib:
      Oracle - ojdbc6.jar
      Mysql - mysql-connector-java-5.1.40-bin.jar

    • 修改环境变量:
      export SQOOP_HOME=HOME/program/sqoop export PATH=PATH:$SQOOP_HOME/bin

    使用方式:

    屏幕快照 2019-03-29 22.41.11.png
    • import命令:关系型数据库(Mysql、Oracle) -> Hadoop(HDFS、HBase、Hive), 每条记录可表示为文本、二进制文件或SequenceFile格式;
      sqoop help import 查看帮助, 配置选项较多

    用法:[generic-args] 是Hadoop通用参数,[import-args]是import特有参数

    sqoop import [generic-args] [import-args]
    
    [import-args]参数说明:
    参数名称 参数含义
    --connect<jdbc-uri> JDBC连接符: jdbc:mysql://node1/movie jdbc:oracle:thin:@//ndoe/movie
    --hadoop-mapred-home <dir> 指定$HADOOP_MAPRED_HOME路径 conf中指定后无需设置
    --dirver JDBC驱动器类 比如com.mysql.jdbc.Driver
    --username 数据库用户
    --password 数据库密码
    --password-alias <password-alias> Credential provider password alias
    --password-file <password-file> 设置用于存放认证的密码信息文件的路径
    --table 导出的表名
    --where 配合table使用
    --target-dir HDFS目录名
    --as-textfile --as-parquetfile --as-avrodatafile --as-sequencefile 保存格式,默认text
    -m, -num-mappers 启动的Map Task数目 任务并行度, 默认1
    -e,--query 取数sql
    --fields-terminated-by 分割符
    --verbose 日志
    --append 将数据追加到HDFS上一个已存在的数据集上
    示例
    查看数据库
    sqoop list-databases \
    --connect jdbc:mysql://hadoop1:3306/  \
    --username root \
    --password root
    
    sqoop list-tables 
    
    导出数据到HDFS
     18  sqoop import \
     19     --connect $1 \
     20     --username $2 \
     21     --password $3 \
     22     --query "$sql and "'$CONDITIONS' \
     23     --target-dir $5 \
     24     --fields-terminated-by "," \
     25     --num-mappers 1
     26     --verbose   >> ${log_file}
    

    自定义查询sql,即--query参数时:
    1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS$符号不用转义, "$sql and "'$CONDITIONS'
    要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS$符号需要转义: "${query} AND \$CONDITIONS"
    2、自定义的SQL语句中必须带有 WHERE \$CONDITIONS

    导入Hive

    Sqoop会自动创建对应的Hive表,但是hive-database 需要手动创建

    sqoop import  \
    --connect jdbc:mysql://hadoop1:3306/mysql  \
    --username root  \
    --password root  \
    --table help_keyword  \
    --fields-terminated-by "\t"  \
    --lines-terminated-by "\n"  \
    --hive-import  \
    --hive-overwrite  \
    --create-hive-table  \
    --delete-target-dir \
    --hive-database  mydb_test \
    --hive-table new_help_keyword
    
    导入Hbase
    sqoop import \
    --connect jdbc:mysql://hadoop1:3306/mysql \
    --username root \
    --password root \
    --table help_keyword \
    --hbase-table new_help_keyword \
    --column-family person \
    --hbase-row-key help_keyword_id
    
    增量更新

    --incremental append --check-column 检查的字段 --last-value 起始字段last-value + 1

    sqoop import   \
    --connect jdbc:mysql://hadoop1:3306/mysql   \
    --username root  \
    --password root   \
    --table help_keyword  \
    --target-dir /user/hadoop/myimport_add  \
    --incremental  append  \
    --check-column  help_keyword_id \
    --last-value 500  \
    -m 1
    
    • export命令:Hadoop(HDFS、HBase、Hive)->关系型数据库(Mysql、Oracle)
    export连接配置参数同import
    参数名称 参数含义
    --connect<jdbc-uri> JDBC连接符: jdbc:mysql://node1/movie jdbc:oracle:thin:@//ndoe/movie
    --hadoop-mapred-home <dir> 指定$HADOOP_MAPRED_HOME路径 conf中指定后无需设置
    --dirver JDBC驱动器类 比如com.mysql.jdbc.Driver
    --username 数据库用户
    --password 数据库密码
    --table 导入的表名
    --export-dir 导出的数据所在的HDFS目录
    --update-key 根据若干列, 更新表中的数据(默认未设置,数据插到尾部)
    --update-mode 如果导入数据已经存在,如何更新数据, 支持updateonly 和 allowinsert 两种模式
    -m, --num-mappers 并行度
    示例:
    sqoop export 
    --connect jdbc:mysql://hadoop1:3306/mysql   \
    --table data
    --export-dir /user/x/data/ \
    --username root \
    --password root \
    --update-key id \
    --update-mode allowinsert
    

    效果: 如果id存在, 更新, 不存在, 插入

    Sqoop2(1.99.6, 1.99.7)

    引入了Sqoop Server端, 形成服务端-客户端,Connector集成到Server端,轻量客户端,部署较麻烦.
    (1) Sqoop Client:
    用户交互的方式:命令行(CLI) 和浏览器两种方式
    (2) Sqoop Server:

    • Connector:
      1> Partitioner 数据切片
      2> Extractor 数据抽取 Map操作
      3> Loader 读取Extractor输出的数据,Reduce操作

    • Metadata: Sqoop中的元信息,次啊用轻量级数据库Apache Derby, 也可以替换为Mysql

    • RESTful和HTTP Server: 客户端对接请求

    几个概念

    Connector: 访问某种数据源的组件,负责抽取或写入数据;Sqoop2内置多个数据源组件:

    • generic-jdbc-connector: 访问支持JDBC协议的数据库的Connector
    • hdfs-connector: 访问Hadoop HDFS的Connector
    • kafka-connector: 访问kafka的Connector
    • kit-connector: 使用Kite SDK实现,可访问HDFS/Hive/Hbase
    sqoop2

    参考来源:
    《大数据知识体系讲解》
    Sqoop1: https://www.jianshu.com/writer#/notebooks/35613507/notes/44030976/preview
    Sqoop2配置: https://blog.csdn.net/dream_an/article/details/74315897
    Sqoop2实践: https://blog.csdn.net/dream_an/article/details/74936066

    相关文章

      网友评论

          本文标题:Sqoop

          本文链接:https://www.haomeiwen.com/subject/fpcdbqtx.html