zoukankan      html  css  js  c++  java
  • (二)Sqoop使用教程

    一.Sqoop简介

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

    二.Sqoop原理

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

    三.下载安装

    参照此https://www.cnblogs.com/Agent9527/p/13195068.html进行安装。

    四.Sqoop简单使用案例

    4.1导入数据

    在Sqoop中“导入”是指从非大数据集群(RDBMS)向大数据集群(HDFSHiveHBase)中传输数据,叫做:导入,即使用import关键字。与其相反称之为导出,即使用关键字“export”。

    4.2从RDBMS到HDFS

    确定Mysql服务开启正常;在Mysql数据库中新建一张表并插入数据。

    Mysql建库建create database company;
    create table company.staff(
    id int(4) primary key not null auto_increment,
    name varchar(255),
    sex varchar(255));
    插入测试数据
    insert into company.staff(name,sex) values("Thcmas","Male");
    insert into company.staff(name,sex) values(‘Catalina’,’ReMale’);

    Mysql --> HDFS  注意:粘贴以下时把“#号”前面的空格以及“#号”后面的内容删掉。

    1.全部导入
    sqoop import   # 启动sqoop命令 导入 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --table 表  # 即将导入的表名
    --target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建)
    --delete-target-dir  # 删除原先已有的表
    --num-mappers 1  # map工作数(自己确定就行了)
    --fields-terminated-by "	" # 指定分隔符不指定会粘到一块
    
    2.查询select导入
    sqoop import   # 启动sqoop导入 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建?)
    --delete-target-dir  # 删除原先已有的表
    --num-mappers 1  # map工作数(自己确定就行了)
    --fields-terminated-by "	" # 指定分隔符
    --query " 列1,列2,列3 from 表 where 列1 <=1 and $CONDITIONS;" # 保证在多个map任务时保证数据顺序前后一致
    
    3.指定columns导入
    sqoop import   # 启动sqoop导入 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --table 表  # 即将导入HDFS的表名
    --columns 列1,列2  # 指定列名导出
    --target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建?)
    --delete-target-dir  # 删除原先已有的表
    --num-mappers 1  # map工作数(自己确定就行了)
    --fields-terminated-by "	" # 指定分隔符
    
    4.关键字where+columns筛选导入
    sqoop import   # 启动sqoop导入 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --table 表  # 即将导入HDFS的表名
    --columns 列1,列2  # 指定列名导入
    --where 列1条件  # 指定列条件进行导入
    --target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建?)
    --delete-target-dir  # 删除原先HDFS已有的表
    --fields-terminated-by "	" # 指定分隔符
    --num-mappers 1  # map工作数(自己确定就行了)

    Mysql --> HDFS --> Hive

    sqoop import   # 启动sqoop导入 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --table 表  # 即将导入HDFS的表名
    --columns 列1,列2  # 指定列名导入
    --where 列1条件  # 指定列条件进行导入
    --hive-import  # 又从HDFS导入hive
    --hive-database 库 # 导入的指定库名 
    --hive-table 表  # 将要导入的hive表
    --hive-overwrite  # 覆盖原先hive已有的表
    --fields-terminated-by "	" # 指定分隔
    --num-mappers 1  # map工作数(自己确定就行了)这放后面好看点 

    RDBMS --> HDFS --> HBase

    sqoop import   # 启动sqoop导入 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --table 表  # 即将导入HDFS的表名
    --columns 列1,列2  # 指定列名导入
    --where 列1条件  # 指定列条件进行导入
    --hbase-create-table  # 是否创建表?
    --hbase-table "表名"  # 指定要导入的HBase中的表名
    --column-family "hbase列族"  # 指定要导入的HBase表的列族
    --hbase-row-key "mysql列"  # 指定mysql中的某一列作为HBase表中的rowkey
    --split-by id  # 指定mysql中的某一列作为分区导入。默认是主键
    --num-mappers 1  # map工作数(自己确定就行了) 

    4.3(从HDFS/Hive导出到RDBMS) HDFS与Hive语法一样

    sqoop export   # 启动sqoop导出 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)导出到mysql的库名
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --table 表  # 导出到mysql的表名
    --export-dir /路径名/路径名/路径名  # 从hdfs&hive导出的hive/hdfs文件路径
    --input-fields-terminated-by "	"  # 从hdfs&hive导出的指定切割符
    --num-mappers 1  # map工作数

    五. Shell拓展

    可利用shell编写脚本实现;减少麻烦

    # vim test.sh  Linux下编译名为test.sh的shell脚本。扩展名并不影响脚本执行,见名知意就好。添加以下内如。
    #!/bin/bash  #告诉系统这个脚本需要什么解释器来执行
    sqoop import   # 启动sqoop命令 导入 换行符
    --connect jdbc:mysql://主机名:3306/库  # 连接(固定)
    --username root  # 连接mysql的账号名
    --password 密码  # 连接mysql的账号密码
    --table 表  # 即将导入的表名
    --target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建)
    --delete-target-dir  # 删除原先已有的表
    --num-mappers 1  # map工作数(自己确定就行了)
    --fields-terminated-by "	" # 指定分隔符不指定会粘到一块
    :wq  保存退出
    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本
  • 相关阅读:
    商城项目开发(一)
    java基础
    SpringBoot笔记
    设计模式-创建型模式
    讲真的 曾惜
    Linux常用精简命令实训练习
    使用ZeroClipboard.js复制内容到剪贴板上
    浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式
    jQuery mouseover与mouseenter,mouseout与mouseleave的区别
    div中的img垂直居中
  • 原文地址:https://www.cnblogs.com/Agent9527/p/14128532.html
Copyright © 2011-2022 走看看