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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容