Sqoop配置&基本使用


Sqoop

什么是 Sqoop

  • Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql...) 间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres 等)中的 数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中
  • Sqoop2 的最新版本是 1.99.7。请注意,2 与 1 不兼容,且特征不完整,它并不打算用于生产部署。

Sqoop 原理

  • 将导入或导出命令翻译成 mapreduce 程序来实现。
  • 在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。

Sqoop 安装(重点)

  • 解压 Sqoop 包到指定目录

    • tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/
  • 修改 & 重命名配置文件

    • 重命名配置文件

      • mv sqoop-env-template.sh sqoop-env.sh
    • 修改配置文件

      • export HADOOP_COMMON_HOME={hadoop 安装目录}
        export HADOOP_MAPRED_HOME={hadoop 安装目录}
        export HIVE_HOME={Hive 安装目录}

      • 注:配置文件中还可以添加其他组件的配置,例如 Zookeeper,Hbase 等,不设置的情况下,会报警告

  • 拷贝 jdbc 驱动到 sqoop 的 lib 目录下

    • cp mysql-connector-java-5.1.37.jar /opt/module/sqoop-1.4.6/lib/
  • 配置环境变量,方便执行命令

    • export SQOOP_HOME={sqoop 安装目录}
      export PATH=$PATH:$SQOOP_HOME/bin

    • 生效环境变量

      • source /etc/profile
  • 连接 MySQL 测试

    • sqoop list-databases --connect jdbc:mysql://主机名:3306/ --username root --password mysql密码

    • 出现的日志包含如下结果则 MySQL 连接成功

      • information_schema
        metastore
        mysql
        oozie
        performance_schema

Sqoop 使用

环境准备

  • 创建 MySQL 数据库
    • create database sqoop_test;
  • 创建表
    • create table sqoop_tbl (id int(4) PRIMARY KEY AUTO_INCREMENT,name varchar(255));
  • 添加数据
    • insert into sqoop_tbl (name) values ('zhangsan');
    • insert into sqoop_tbl (name) values ('lisi');
    • insert into sqoop_tbl (name) values ('wangwu');
    • insert into sqoop_tbl (name) values ('zhaoliu');

导入数据(重点)

  • 在 Sqopp 中,导入的概念指的是从非大数据集群(MySQL等)向大数据集群(HDFS,HIVE等)传输数据,叫做导入,使用 import 关键字

全部数据导入

  • sqoop import
    --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test
    --username root --password 111111
    --table sqoop_tbl
    --target-dir /user/sqoop_test
    --delete-target-dir
    --num-mappers 1
    --fields-terminated-by "\t"


    sqoop import Sqoop 导入命令

    --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test 导入的目标连接

    --username root --password 密码 连接的密码

    --table sqoop_tbl 导入数据的来源表

    --target-dir /user/sqoop_test 导入到 hdfs 上的目录

    --delete-target-dir 若 hdfs 上的目录存在,则删除

    --num-mappers 1 设置 MapTask 的任务数

    --fields-terminated-by "\t" 导入的数据使用什么分隔符

查询导入

  • sqoop import
    --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test
    --username root
    --password 111111
    --target-dir /user/sqoop_test2
    --delete-target-dir
    --num-mappers 1
    --fields-terminated-by "\t"
    --query 'select * from sqoop_tbl where id =1 and $CONDITIONS;'


    --query 'select * from sqoop_tbl where id =1 and $CONDITIONS;' 查询的语句,其中,$CONDITIONS 是一个必须值

    注: 如果 query 后使用的是双引号,则$CONDITIONS 前必须加转移符,防止 shell 识别为自己的 变量。

导入指定列

  • sqoop import --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --target-dir user/sqoop_test4 --delete-target-dir --num-mappers 1 --fields-terminated-by '\t' --columns id,name --table sqoop_tbl


    --columns id,name 导入指定的字段

查询条件导入

  • sqoop import --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --target-dir /user/sqoop-test4 --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --table sqoop_tbl --where 'id=4'


    where 'id=4' 导入数据时,加上条件

导入数据到 Hive

  • sqoop import --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --table sqoop_tbl --num-mappers 1 --hive-import --fields-terminated-by '\t' --hive-overwrite --hive-table sqoop_tbl


    --hive-import 导入数据到 Hive
    --fields-terminated-by '\t' 行数据使用 \t 作为分隔符
    --hive-overwrite 覆盖 Hive 中的数据
    --hive-table sqoop_tbl 指定导入到 Hive 的那张表

    补充: 该过程分为两步,第一步将数据导入到 hdfs ,默认路径是 /user/用户名/表名,第二步将导入的数据迁移到 Hive 仓库

导入数据到 Hbase

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


    若没学过 Hbase 了解即可,比赛时,大概率使用 Hive

导出数据(重点)

  • 在 Sqoop 中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群 (RDBMS)中传输数据,叫做:导出,即使用 export 关键字。

Hive 导出到 MySQL

  • sqoop export --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --table sqoop_tbl --num-mappers 1 --export-dir /user/hive/warehouse/sqoop_tbl --input-fields-terminated-by '\t'


    --export-dir /user/hive/warehouse/sqoop_tbl 导出数据的目录
    --input-fields-terminated-by '\t' 导出数据时,使用什么分隔符分割字段
    --table sqoop_tbl 导出到 MySQL 的那张表


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM