美文网首页
数仓生态圈辅助工具-hue -sqoop简介

数仓生态圈辅助工具-hue -sqoop简介

作者: Eqo | 来源:发表于2022-05-14 00:05 被阅读0次

    Hue介绍、功能与架构原理

    • HUE=Hadoop User Experience

    • Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。

    • 通过使用Hue,可以在浏览器端的Web控制台上与Hadoop集群进行交互,来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。

    Hue操作HDFS

    通过 8889/hue 访问Hue端口

    image.png
    • 进入HDFS管理页面
    image.png
    • 新建文件、文件夹

    • 上传、下载文件

    • 查看文件内容

    • 在线实时编辑文件内容

    • 删除文件

    • 修改文件权限

    Hue操作hive

    • 进入Hive面板
    image.png

    Sqoop介绍、工作机制

    • sqoop介绍

    sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
    导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
    导出数据:从Hadoop的HDFS、HIVE中导出数据到关系数据库mysql等。
    sqoop = sql+hadoop

    sqoop.png
    • Sqoop工作机制

    sqoop工作机制是将导入导出命令转换成mapreduce程序来实现,但是sqoop对mr的读入和读出进行了优化,用DBInputFormat DBOutPutformat来对inputformat和outputformat进行定制优化。

    image.png

    -sqoop安装、测试

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

    也可以这么写 \表示命令未完待续 下一行还有命令参数 否则遇到回车换行就会自动提交执行
    sqoop list-databases \
    --connect jdbc:mysql://localhost:3306/ \
    --username root \
    --password 123456\


    增量数据,全量数据

    • 在使用sqoop导入导出数据时,有两个经常需要用到的概念
    • 增量数据:就是上次操作之后到现在的数据.
    • 全量数据 :是指全部的数据,对于表来说就是表内所有的数据.

    Sqoop全量导入HDFS

    • 默认字段之间分隔符是','逗号
    --connect jdbc:mysql://192.168.88.80:3306/userdb \ #指定连接数据库此时连接的是mysql的业务数据库#
    --username root \
    --password 123456 \
    --target-dir /sqoop/result1 \ 
    --table emp 
    --m 1
    
    • 指定分隔符
      #--fields-terminated-by 可以用于指定字段之间的分隔符

    • 指定任务并行度(maptask个数)
      当指定的maptask的个数>2时,一定要指定字段 --split-by 字段 且字段唯一(主键不重复),不然会报错

    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --username root \
    --password 123456 \
    --target-dir /sqoop/result3 \
    --fields-terminated-by '\t' \
    --split-by id \
    --table emp --m 2
    

    Sqoop全量导入Hive

    • Sqoop导入hive有三种方式
      方式一:先用sqoop复制表结构到hive,然后执行数据导入工作
      方式二:一步到位,直接导入数据(包括建表)
      方式三:hive手动建表,sqoop导入数据(开发常用)

    • 方式一:先复制表结构、再导入数据

    #创建表到hive table上去
    sqoop create-hive-table \
    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --table emp_add \
    --username root \
    --password 123456 \
    --hive-table test.emp_add_sp
    
    #其中 
    --table emp_add为mysql中的数据库sqoopdb中的表   
    --hive-table emp_add_sp 为hive中新建的表名称。如不指定,将会在hive的default库下创建和MySQL同名表
    --hive-table 中指定的库必须是hive里面已经有的库
    导入表数据
    ``` sqoop import \
    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --username root \
    --password 123456 \
    --table emp_add \
    --hive-table test.emp_add_sp \
    --hive-import \
    --m 1
    
    • 方式二 直接导入数据
    sqoop import \
    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --username root \
    --password 123456 \
    --table emp_conn \
    --hive-import \
    --m 1 \
    --hive-database test
    
    • 方式三(重要)

    -sqoop 原生 API

    所谓sqoop原生的方式指的是sqoop自带的参数完成的数据导入。
    但是支持的hive存储格式,压缩方式比较少,用的少

    -Hcatalog

    Apache HCatalog是基于Apache Hadoop之上的数据表和存储管理服务。
    包括:

    • 提供一个共享的模式和数据类型的机制。
    • 抽象出表,使用户不必关心他们的数据怎么存储,底层什么格式。
    • 提供可操作的跨数据处理工具,如Pig,MapReduce,Streaming,和Hive。
    --手动在hive中建一张表
    create table test.emp_hive(id int,name string,deg string,salary int ,dept string) 
    row format delimited fields terminated by '\t'
    stored as orc;
    --注意,这里指定了表的文件存储格式为ORC。
    --从存储效率来说,ORC格式胜于默认的textfile格式。
    

    Hcatalog 导入数据

    sqoop import \
    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --username root \
    --password 123456 \
    --table emp \
    --fields-terminated-by '\t' \
    --hcatalog-database test \
    --hcatalog-table emp_hive \
    -m 1
    

    可以发现数据导入成功,并且底层是使用ORC格式存储的。

    • sqoop原生API和 HCatalog区别
      • 数据格式支持(这是实际中使用HCatalog的主要原因,否则还是原生的灵活一些)

        Sqoop方式支持的数据格式较少;
        HCatalog支持的数据格式多,包括RCFile, ORCFile, CSV, JSON和SequenceFile等格式。

      • 数据覆盖

        原生API是覆盖,Hcatalog 是追加

      • 字段名匹配
        Sqoop方式比较随意,不要求源表和目标表字段相同,抽取的方式是将字段按顺序插入,比如目标表有3个字段,源表有一个字段,它会将数据插入到Hive表的第一个字段,其余字段为NULL。

        HCatalog不同,源表和目标表字段名需要相同,字段个数可以不相等,将字段对应到相同字段名的字段上.

    Sqoop 条件导入

    • where过滤行

    功能类似于sql语法中where 可以实现过滤
    在sqoop命令行中 加入 --where "字段=条件"

    sqoop import \
    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --username root \
    --password 123456 \
    --where "city ='sec-bad'" \
    --target-dir /sqoop/result4 \
    --table emp_add --m 1
    
    • query过滤列(重要)

    功能类似与sql查询语句,查询指定列和where条件
    格式 --query ' select * from 表 where 条件 and $CONDITIONS '
    注意:使用sql query语句来进行查找时,不能加参数 --table;
    并且必须要添加 where 条件;
    并且where条件后面必须带一个 $CONDITIONS 这个字符串;
    并且这个sql语句==必须用 单引号 ,不能用双引号。

    sqoop import \
    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --username root \
    --password 123456 \
    --target-dir /sqoop/result5 \
    --query 'select * from emp WHERE 1=1 and $CONDITIONS' \
    --fields-terminated-by '\001' \
    --m 1
    

    Sqoop 增量导入

    • 方式一 append模式 (只能新增)
    #执行如下的指令,实现增量的导入:
    sqoop import \
    --connect jdbc:mysql://192.168.88.80:3306/userdb \
    --username root \
    --password 123456 \
    --table emp --m 1 \
    --target-dir /sqoop/appendresult \
    --incremental append \
    --check-column id \
    --last-value 1205
    
    • 方式二 lastmodifield模式(可新增可更新)

    要求:必须包含动态时间变化这一列,按照数据变化的时间进行判断
    特点:既导入新增的数据也导入更新的数据

    • 方式三 用户条件过滤实现 (开发常用)

    通过where对字段进行过滤
    指定分区目录
    在实际开发当中 后端建表的时候一般会给要更新的表添加几个字段
    creat_user create_time update_user updata_time

    创建者 创建时间 修改时间 修改时间

        sqoop import \
      --connect jdbc:mysql://192.168.88.80:3306/userdb \
      --username root \
      --password 123456 \
      --query 'select id,age from a_import where 1=1 and  \$CONDITIONS' \
      --fields-terminated-by '\001' \
      --hcatalog-database test \
      --hcatalog-table a \
      -m1
    
      
      -- 需求1 全量采集数据
      --query ' select * from 表1 where 1=1 and  $CONDITIONS '
      -- 需求2 增量采集20220501仅新增的数据
      --query ' select * from 表1 where create_time between 20220501 00:00:00 and 20220501 23:59:59   and  $CONDITIONS '
      --需求3 增量采集20220501有更新
       --query ' select * from 表1where create_time between 20220501 00:00:00 and 20220501 23:59:59   and  $CONDITIONS or updatetime
       between 20220501 00:00:00 and 20220501 23:59:59 '
      
    

    Sqoop数据导出

    • sqoop导出操作最大的特点是,==目标表需要自己手动提前创建==。
    • 查看hive表的数据存储结构 如果是orc等用Hcatalog导出

    -- 全量数据导出

    要注意清空目标表的数据,注意源表的分隔符

    • 从HDFS导出数据到MySQL
      sqoop export
      --connect jdbc:mysql://192.168.88.80:3306/userdb
      --username root
      --password 123456
      --table employee
      --input-fields-terminated-by '\001'
      --export-dir /sqoop/result2/

    • 从Hive导出数据到MySQL
      sqoop export
      --connect jdbc:mysql://192.168.88.80:3306/userdb
      --username root
      --password 123456
      --table employee
      --hcatalog-database test
      --hcatalog-table emp_hive
      --input-fields-terminated-by '\t'
      --m 1

    -- 增量数据导出

    • updateonly:只增量导出更新的数据

    执行更新导出:
    sqoop export
    --connect jdbc:mysql://192.168.88.80:3306/userdb
    --username root
    --password 123456
    --table updateonly
    --export-dir /sqoop/updateonly/updateonly_2.txt
    --update-key id
    --update-mode updateonly

    • allowerinsert:既导出更新的数据,也导出新增的数据

    执行更新导出
    sqoop export
    --connect jdbc:mysql://192.168.88.80:3306/userdb
    --username root --password 123456
    --table allowinsert
    --export-dir /sqoop/updateonly/updateonly_2.txt
    --update-key id
    --update-mode allowinsert

    相关文章

      网友评论

          本文标题:数仓生态圈辅助工具-hue -sqoop简介

          本文链接:https://www.haomeiwen.com/subject/czauurtx.html