• sqoop导入导出到mysql,hbase,hive,hdfs系统,多表关联导出案例


    Sqoop工具
    1、协助 RDBMS 与 Hadoop 之间进行高效的大数据交流。
    把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)
    同时也可以把数据从 Hadoop 系统里抽取并导出到关系型数据库里。
    Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。
    Sqoop就是一个转换工具,用于在关系型数据库与HDFS之间进行数据转换。

    项目使用场景:
    1.业务数据存放在关系数据库中。如果数据量达到一定规模后需要对其进行分析或同统计,
    单纯使用关系数据库可能会成为瓶颈,这时可以将数据从业务数据库数据导入(import)
    到Hadoop平台进行离线分析。
    2.对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作
    为业务的辅助数据,这时候需要将Hadoop平台分析后的数据导出(export)到关系数据库。


    一、Sqoop与MySQL
    1.列出mysql数据库中的所有数据库
    sqoop list-databases -connect jdbc:mysql://hdp-qm-01:3306
    -username hadoop -password hadoop

    2.列出数据库hivedb1711中的所有数据表
    sqoop list-tables -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop

    3.通过Sqoop执行SQL语句
    sqoop eval -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -query 'select * from EMP'

    二、Sqoop与HDFS(MySQL数据库与HDFS)
    1.将hivedb1711.EMP表中的数据导入HDFS的/sqfs目录下
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -table EMP -m 1 -target-dir /sqfs/emp1
    解释:
    (1)-table EMP 表示要导出的EMP表
    (2) -m 1 表示使用一个maptask操作
    (3) -target-dir /sqfs/emp1 数据导到/sqfs/emp1位置

    注意:执行过程走mapreduce,所以要保证每一个集群节点都能访问hivedb1711数据库!
    grant all privileges on hivedb1711.* to 'hadoop'@'%' identified by 'hadoop';

    使用sql语句过滤满足条件的数据,将其导入hdfs系统(注意:and $CONDITIONS)
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -query 'select * from EMP where emgr=10 and $CONDITIONS'
    -m 2 --split-by eNo -target-dir /sqfs/emp3;

    没有过滤,使用sql语句导入所有数据到hdfs(注意:where $CONDITIONS)
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -query 'select * from EMP where $CONDITIONS'
    -m 2 --split-by eNo -target-dir /sqfs/emp4;
    注意:这种方式和1里面的操作是一个效果

    2.将HDFS上/sqfs目录下的数据导入的hivedb1711.emp2表中
    (1).hivedb1711.emp2表结构必须存在
    CREATE TABLE IF NOT EXISTS emp2(
    eNo int(25) not null primary key,
    eName varchar(45),
    eJob varchar(45),
    emgr int(25),
    eHiredate date,
    eSal int(45),
    ecomm int(45),
    dp_no int(25)
    );

    (2).导出数据到emp2表的命令:
    sqoop export -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -table emp2
    -m 1 -export-dir /sqfs/emp3


    三、Sqoop与Hive
    1.将关系型数据的emp表结构复制到Hive中(复制表结构)
    sqoop create-hive-table -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -table emp2 -hive-table demo_log.emp
    -fields-terminated-by "|" -lines-terminated-by " "

    2.将关系数据库中的emp表的数据导入文件到Hive表中
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -table emp2 -hive-table demo_log.emp -m 3
    -fields-terminated-by "|" -hive-import

    3.将Hive中的表 demo_log.emp数据导入到mysql数据库emp3表中
    (1)先在MySQL数据库中简历表的结构
    CREATE TABLE IF NOT EXISTS emp3(
    eNo int(25) not null primary key,
    eName varchar(45),
    eJob varchar(45),
    emgr int(25),
    eHiredate date,
    eSal int(45),
    ecomm int(45),
    dp_no int(25)
    );
    (2).导出数据到emp3表:
    sqoop export -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop -table emp3
    -export-dir /user/hive/warehouse/demo_log.db/emp/*
    -input-fields-terminated-by '|'

    说明:-input-fields-terminated-by '|' 分隔符是根据export-dir 指定
    目录下文件内容的分割符号来确定的

    四、Sqoop与->HBase
    1. MySQL 中的EMP表中的数据导入数据到 HBase的qm170701:mysql_emp表中
    (1)先在HBase表中创建HBase表:
    create 'qm170701:mysql_emp','cf'
    (2).导入数据到HBase的qm170701:mysql_emp表
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop
    -table EMP
    -hbase-table qm170701:mysql_emp
    -column-family 'cf'
    -hbase-row-key eNo -m 1


    2.将Mysql数据库emp表不同列的数据添加到emp3表中不同列族中
    (1)先在HBase表中创建HBase表:
    create 'qm170701:mysql_emp2','cf1','cf2'

    (2).导入数据到HBase的qm170701:mysql_emp2表
    A.先将EMP表的eName,eJob列中的数据到cf1列族中
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop
    -table EMP
    -hbase-table qm170701:mysql_emp2
    -column-family 'cf1'
    -hbase-row-key eNo -m 1 -columns eNo,eName,eJob

    B.将EMP表的emgr,eHiredate,eSal,ecomm,dp_no列中的数据到cf2列族中
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop
    -table EMP
    -hbase-table qm170701:mysql_emp2
    -column-family 'cf2'
    -hbase-row-key eNo -m 1 -columns eNo,emgr,eHiredate,eSal,ecomm,dp_no


    ===========================================================
    多表关联导出!!!!!!
    ===========================================================

    【2】.JONES领导谁。(谁向JONES报告)

    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop
    -query 'select e2.eNo,e2.eName as name from(select eNo from EMP where eName="JONES")e1 left join EMP e2 on e1.eNo=e2.emgr where $CONDITIONS'
    -m 2 --split-by e2.eNo -target-dir /sqfs/emp122

    没有问题:
    【3】 各个部门中工资大于1500的员工人数及部门名称!!!!!!!!
    sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711
    -username hadoop -password hadoop
    -query 'select d1.dp_name as dname,e2.nums as nums from(select e1.dp_no,count(e1.eNo) as nums from EMP e1 where e1.eSal>1500 group by dp_no) e2 left join dept d1 on d1.dp_no=e2.dp_no where $CONDITIONS'
    -m 1 --split-by e2.dname -target-dir /sqfs/emp122

    成就人
  • 相关阅读:
    linux-kernel-module
    Linux-find
    ffmpeg02
    Redhat 7使用CentOS 7的Yum网络源
    Redhat7配置yum源(本地源和网络源)
    8、源码安装
    6.存储结构与磁盘划分
    5.用户身份与文件权限
    4.Vim编辑器与Shell命令脚本
    3.管道符、重定向与环境变量
  • 原文地址:https://www.cnblogs.com/pingzizhuanshu/p/9102559.html
Copyright © 2020-2023  润新知