zoukankan      html  css  js  c++  java
  • 一、Sqoop简明笔记

    1、Sqoop概述

    • 简介

      Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql...) 间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres 等)中的 数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。

    • 原理

      将导入或导出命令翻译成mapreduce程序,即对inputformat和outputformat进行定制。

    • 官方文档

      Sqoop User Guide (v1.4.7) (apache.org)

    2、Sqoop安装

    1. 下载地址

      https://archive.apache.org/dist/sqoop/1.4.7/

    2. 解压缩防止到对应目录

    3. 修改配置文件

      [1] cd $SQOOP_HOME/conf
      [2] cp mv sqoop-env-template.sh sqoop-env.sh
      [3] vim sqoop-env.sh
      
      # 添加以下内容
      export HADOOP_COMMON_HOME=/opt/software/hadoop-3.1.3
      export HADOOP_MAPRED_HOME=/opt/software/hadoop-3.1.3
      
      export HIVE_HOME=/opt/software/hive-3.1.2
      
      export ZOOKEEPER_HOME=/opt/software/zookeeper-3.4.10
      export ZOOCFGDIR=//opt/software/zookeeper-3.4.10
      
    4. 拷贝JDBC驱动到$SQOOP_HOME/lib中

      MySQL :: Download Connector/J

    5. 添加到myenv.sh

      # 6.配置Sqoop目录
      # SQOOP_HOME
      export SQOOP_HOME=/opt/software/sqoop-1.4.7
      export PATH=$PATH:$SQOOP_HOME/bin
      
    6. 验证Sqoop

      sqoop help # 可以通过command来验证sqoop配置是否正确,出现的Warin警告属于未配置对象,不影响使用
      

    7. 测试Sqoop是否能够成功连接数据库

      sqoop list-databases --connect jdbc:mysql://pc001:3306/ --username root --password root
      

    3、Sqoop使用

    3.1 导入数据

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

    3.1.1 mysql数据准备

    create database sqoop_test;
    
    -- 创建mysql表
    create table table_test(
        id int(4) primary key not null auto_increment,
        name varchar(255),
        sex varchar(255)
    );
    
    -- 创建数据到Mysql
    insert into table_test(name,sex) values("Tom","M");
    insert into table_test(name,sex) values("Happy","W");
    

    3.1.2 RDBMS到HDFS

    1. 全部导入

      # 全部导入
      sqoop import 
      --connect jdbc:mysql://pc001:3306/sqoop_test 
      --username root 
      --password root 
      --table table_test 
      --target-dir /user/sqoop_test 
      --delete-target-dir 
      --num-mappers 1 
      --fields-terminated-by ","
      
    2. 查询导入

      • 查询导入时,查询条件中,必须包含 “$CONDITIONS”

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

      -- 查询导入
      sqoop import 
      --connect jdbc:mysql://pc001:3306/sqoop_test 
      --username root 
      --password root 
      --target-dir /user/sqoop_test 
      --delete-target-dir 
      --num-mappers 1 
      --fields-terminated-by "," 
      --query 'select name,sex from table_test where id<=1 and $CONDITIONS;';
      
      
      sqoop import 
      --connect jdbc:mysql://pc001:3306/sqoop_test 
      --username root 
      --password root 
      --target-dir /user/sqoop_test 
      --delete-target-dir 
      --num-mappers 1 
      --fields-terminated-by "," 
      --query "select name,sex from table_test where id<=1 and $CONDITIONS";
      
    3. 导入指定列

      • columns 中如果涉及到多列,用逗号分隔,分隔时不要添加空格
      sqoop import 
      --connect jdbc:mysql://pc001:3306/sqoop_test 
      --username root 
      --password root 
      --columns id,sex 
      --table table_test 
      --target-dir /user/sqoop_test 
      --delete-target-dir 
      --num-mappers 1 
      --fields-terminated-by "," ;
      
    4. 使用 sqoop 关键字筛选查询导入数据

      sqoop import 
      --connect jdbc:mysql://pc001:3306/sqoop_test 
      --username root 
      --password root 
      --table table_test 
      --where "id=1" 
      --target-dir /user/sqoop_test 
      --delete-target-dir 
      --num-mappers 1 
      --fields-terminated-by ",";
      

    3.1.3 RDBMS到HIVE

    该过程分为两步,第一步将数据导入到 HDFS,第二步将导入到 HDFS 的数据迁移到 Hive 仓库,第一步默认的临时目录是/user/nuochengze/表名

    sqoop import 
    --connect jdbc:mysql://pc001:3306/sqoop_test 
    --username root 
    --password root 
    --table table_test 
    --num-mappers 1 
    --hive-import 
    --fields-terminated-by "," 
    --hive-overwrite 
    --hive-table test.sqoop_test;
    

    3.4 导出数据

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

    说明:Mysql 中如果表不存在,不会自动创建。

    sqoop export 
    --connect jdbc:mysql://pc001:3306/sqoop_test 
    --username root 
    --password root 
    --table table_test 
    --num-mappers 1 
    --export-dir /user/hive/warehouse/test.db/sqoop_test 
    --input-fields-terminated-by ",";
    

    3.5 脚本打包

    sqoop命令一般以opt格式的文件存储打包内容

  • 相关阅读:
    PTA 乙级 1064 朋友数 (20分) C++
    关于Symbol.iterator 学习笔记
    JS函数传递参数是是按值传递
    使用Nginx做反向代理的配置
    动态修改svg的颜色,svg做背景色时候修改颜色
    macos停止MySQL服务
    git-flow-avh的使用过程
    appium+rf APP自动化问题七----点击图片下方的文字无法实现页面跳转
    appium+rf 问题六--appium setting和unlock在设备上重复安装
    python3报错---Error in sitecustomize; set PYTHONVERBOSE for traceback: NameError: name 'reload' is not defined
  • 原文地址:https://www.cnblogs.com/nuochengze/p/15400084.html
Copyright © 2011-2022 走看看