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  #执行脚本
  • 相关阅读:
    Elasticsearch Query DSL 整理总结(三)—— Match Phrase Query 和 Match Phrase Prefix Query
    Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
    Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
    Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
    Elasticsearch date 类型详解
    python 历险记(五)— python 中的模块
    python 历险记(四)— python 中常用的 json 操作
    python 历险记(三)— python 的常用文件操作
    Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
    Elasticsearch Java Rest Client API 整理总结 (一)——Document API
  • 原文地址:https://www.cnblogs.com/Agent9527/p/14128532.html
Copyright © 2011-2022 走看看