美文网首页
Sqoop 入门

Sqoop 入门

作者: djm猿 | 来源:发表于2019-09-26 21:39 被阅读0次

    1 Sqoop 简介

    Sqoop 是一款开源的工具,主要用于在 Hadoop 与传统的数据库间进行数据的传递,可以将一个关系型数据库中的数据导进到 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。

    2 Sqoop 原理

    将导入或导出命令翻译成 MapReduce 程序来实现

    在翻译出的 MapReduce 中主要是对 InputFormat 和 OutputFormat 进行定制

    3 Sqoop 安装

    1、解压

    tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/
    

    2、重命名配置文件

    mv sqoop-env-template.sh sqoop-env.sh
    

    3、修改配置文件

    vim sqoop-env.sh
    
    export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
    export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
    export HIVE_HOME=/opt/module/hive
    export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
    export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
    export HBASE_HOME=/opt/module/hbase
    

    4、将 JDBC 驱动拷贝到 lib 下

    cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
    

    5、验证 Sqoop

    bin/sqoop help
    

    6、测试 Sqoop 是否能正确连接到数据库

    bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 123456
    

    4 Sqoop 常用命令

    序号 命令 说明
    1 import ImportTool 将数据导入到集群
    2 export ExportTool 将集群数据导出
    3 codegen CodeGenTool 获取数据库中某张表数据生成Java并打包Jar
    4 create-hive-table CreateHiveTableTool 创建Hive表
    5 eval EvalSqlTool 查看SQL执行结果
    6 import-all-tables ImportAllTablesTool 导入某个数据库下所有表到HDFS中
    7 job JobTool 用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务
    8 list-databases ListDatabasesTool 列出所有数据库名
    9 list-tables ListTablesTool 列出某个数据库下所有表
    10 merge MergeTool 将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中
    11 metastore MetastoreTool 记录sqoop job的元数据信息,如果不启动metastore实例,则默认的元数据存储目录为:~/.sqoop,如果要更改存储目录,可以在配置文件sqoop-site.xml中进行更改
    12 help HelpTool 打印sqoop帮助信息
    13 version VersionTool 打印sqoop版本信息

    5 案例实战

    5.1 RDBMS 到 HDFS

    1、全部导入

    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t"
    

    2、查询导入

    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --query 'select name,sex from staff where id <=1 and $CONDITIONS;
    

    must contain '$CONDITIONS' in WHERE clause,如果 query 使用的是双引号,$CONDITIONS 前必须加转义字符

    3、导入指定列

    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --columns id,sex --table staff
    

    4、使用 Sqoop 关键字筛选查询导入数据

    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --table staff --where "id=1"
    

    5、增量导入

    先导入一部分数据:
    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff_timestamp --delete-target-dir --m 1
    再增量导入一部分数据:
    $ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff_timestamp --check-column last_modified --incremental lastmodified --last-value "2017-09-28 22:20:38" --m 1 --append
    

    使用 lastmodified 方式导入数据要指定增量数据是要 --append(追加)还是要 --merge-key(合并)

    last-value 指定的值是会包含于增量导入的数据中

    5.2 RDBMS 到 Hive

    1、全部导入

    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --num-mappers 1 --hive-import --fields-terminated-by "\t" --hive-overwrite --hive-table staff_hive
    

    2、增量导入

    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --num-mappers 1 --fields-terminated-by "\t" --target-dir /user/hive/warehouse/staff_hive --check-col umn id --incremental append --last-value 3
    

    append 不能与 --hive- 等参数同时使用

    5.3 RDBMS 到 HBase

    bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --columns "id,name,sex" --column-family "info" --hbase-create-table --hbase-row-key "id" --hbase-table "hbase_company" --num-mappers 1 --split-by id
    

    Sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自动创建 HBase 表

    5.4 Hive/HDFS 到 RDBMS

    bin/sqoop export --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --num-mappers 1 --export-dir /user/hive/warehouse/staff_hive --input-fields-terminated-by "\t"
    

    5.5 将 RDBMS 中的表映射为一个 Java 类

    bin/sqoop codegen --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --bindir /home/admin/Desktop/staff --class-name Staff --fields-terminated-by "\t"
    

    5.6 生成与 RDBMS 结构对应的 Hive 表结构

    bin/sqoop create-hive-table --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --hive-table hive_staff
    

    5.7 判断 SQL 是否正确

    bin/sqoop eval --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --query "SELECT * FROM staff"
    

    5.8 将 RDBMS 中的所有表导入到 HDFS 中,每一个表都对应一个 HDFS 目录

    bin/sqoop import-all-tables --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --warehouse-dir /all_tables
    

    5.9 生成一个 Sqoop 任务,生成后不会立即执行,需要手动执行

    生成任务:
    bin/sqoop job --create myjob -- import-all-tables --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456
    查看任务列表:
    bin/sqoop job --list
    执行任务:
    $ bin/sqoop job --exec myjob
    

    5.10 查看 RDBMS 列表

    bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 123456
    

    5.11 查看 RDBMS 的 company 的所有表

    bin/sqoop list-tables --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456
    

    5.12 将 HDFS 中不同目录下面的数据合并在一起并放入指定目录中

    创建JavaBean:
    bin/sqoop codegen --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --bindir /home/admin/Desktop/staff --class-name Staff --fields-terminated-by "\t"
    开始合并:
    $ bin/sqoop merge --new-data /test/new/ --onto /test/old/ --target-dir /test/merged --jar-file /home/admin/Desktop/staff/Staff.jar --class-name Staff --merge-key id
    

    相关文章

      网友评论

          本文标题:Sqoop 入门

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