数仓(一)简介数仓,OLTP和OLAP

数仓(二)关系建模和维度建模

数仓(三)简析阿里、美团、网易、恒丰银行、马蜂窝5家数仓分层架构

数仓(四)数据仓库分层

数仓(五)元数据管理系统解析

最近工作一直忙着,报名参加了上海地区观安杯CTF的比赛。第一次参加比预期好,拿了银行行业分行二等奖(主要是团队给力!)。

此外还在搞DAMA中国CDGA考证的事情。9月5日考试发挥正常,感觉应该是PASS可以拿到证书,数据治理证书我感觉最近几年会很火爆!就像十年前的项目管理证书PMP。数据管理,数据治理方向必定火爆!这次9月成绩北京、广州、深圳早一天出成绩,一些大佬特别是彭友会的已经发喜报了!

可惜上海今天中午才能出结果!中午吃饭的时候邮件推送消息显示81分!成功get证书,也是预料之中吧!


开始继续数仓的内容。通过前面(七)(八)(九)(十)4次内容分享,我们讲解了hive原理,搭建了hive数仓环境、配置了hive on Spark的引擎、并且讨论了Yarn资源调度器的概念,hive元数据管理metastore的概念、配置方式、以及hiveserver2服务。

这节比较实战,把已经存储HDFS上的埋点日志信息,以及mysql数据源过来的业务数据,通过数仓的建表并且把两部分数据加载到数仓的ODS层。

一、ODS层数据搭建前提工作

ODS搭建的前提条件是业务系统(如:javaweb)前端的埋点日志信息、以及业务数据(存储在mysql)以及采集到了HDFS平台上了。假设现在业务系统(如:javaweb)的埋点日志信息、以及业务交易数据(存储在mysql)已经都采集到了HDFS平台。

Flume NG:Flume 发展史上的第一次革命

Flume+Kafka双剑合璧玩转大数据平台日志采集

埋点治理:如何把App埋点做到极致?

知乎数据埋点方案

二、DataGrip利器使用

我们在操作数仓表、数据等需要使用一些工具,这里推荐使用JetBrains的DataGrip工具。

1、配置Data Source界面

  • 添加数据源,选择Apache Hive

  • 配置相关信息

  • 先启动hiveServer2服务

在做测试连接TestConnection前,先启动hiveServer2服务。

注意:并且有4个hive session id 出现才点击“TestConnection”按钮。否则出现connectied failure

  • 下载相应的驱动(自动下载)

2、解决用户访问拒绝问题

这个报错界面,困扰了我一些时间,远程访问被拒绝,原因在于hive 和hdfs以及linux之间的权限问题。

解决办法如下:

  • 配置hdfs的core-site.xml文件,配置用户;

<property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value>
</property>

测试后发现还是不行,报错依然是访问拒绝!qiusheng和root用户都不行

  • 思考配置hive的hive-site.xml文件

<property><name>hive.server2.enable.doAs</name><value>FALSE</value><description>Setting this property to true will have HiveServer2 executeHive operations as the user making the calls to it.</description>
</property> <property><name>dfs.permissions.enabled</name><value>true</value><description>If "true", enable permission checking in HDFS.If "false", permission checking is turned off,but all other behavior is unchanged.Switching from one parameter value to the other does not change the                mode,owner or group of files or directories.</description>
</property>
  • 重启Hadoop集群

    修改配置后需要重启hadoop。

  • 测试连接

    显示测试成功!说明主要问题在于linux用户访问HDFS权限问题。

这样Datagrip就正常连接hive了。

3、查看hive仓库里面的数据库和表以及内容

发现student里面已经有id和name字段了

当然,也可以通过beeline来通过SQL查询。

三、ODS层(埋点日志处理)

首先我们回顾一下ODS层的主要作用和特点:

ODS(Operation Data Store)

这层字面意思叫操作型数据存储,存储来自多个业务系统、前端埋点、爬虫获取等的一系列数据源的数据。

  • 又叫“贴源层”,这层保持数据原貌不做任何修改,保留历史数据,储存起到备份数据的作用。

  • 数据一般采用lzo、Snappy、parquet等压缩格式,减少磁盘存储空间(例如:原始数据 10G,根据算法可以压缩到 1G 左 右)。

  • 创建分区表,防止后续的全表扫描,减少集群资源访问数仓的压力,一般按天存储在数仓中。

有些公司还会把ODS层再细分两层:

STG:数据缓冲层,存原始数据;

ODS:对STG层简单清洗后的数据。

1、创建前端埋点日志ods_log表

前端埋点日志信息都是JSON格式形式主要包括两方面:

(1)启动日志;(2)事件日志:

我们把前端整个1条记录埋点日志,当一个字符串来处理,传入到hive数据库。

创建HQL语句如下:

在DataGrip里面执行

drop table if exists ods_log;
create external table ods_log(line string)
partitioned by (dt string)
Stored asinputformat 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
Location '/warehouse/gmail/ods/ods_log';

添加lzo索引

还需要在hive文件上,添加lzo索引,要不然无法支持切片操作。

具体做法是通过hadoop自带的jar包在hadoop集群命令行里面执行:

hadoop jar /opt/module/hadoop-3.1.4/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer -Dmapreduce.job.queuename=hive /warehouse/gmail/ods/ods_log/dt=2021-05-01

2、执行完,观察Browser Director

发现已经多了lzo.index索引

3、加载读取HDFS数据到hive

load data inpath '/origin_data/gmall/log/topic_log/2021-05-01'into table ods_log partition (dt='2021-05-01');

源路径在

HDFS上/origin_data/gmall/log/topic_log/2021-05-01

加载到hive,路径是

/warehouse/gmail/ods/ods_log/dt=2021-05-01

load做的是剪切的操作!

4、查看hive库数据是否已经加载成功?

这样我们就完成了ODS层前端埋点日志的处理。

四、ODS层(业务数据处理)

现在我们来处理ODS层业务数据,先需要回顾一下ODS层当时建表的表结构关系。

1、业务表逻辑结构关系

其中有颜色填充的代表:事实表;

其他:代表维度表;

2、HDFS文件对应hive表结构关系

源业务系统javaweb项目中的数据存储在mysql里面,通过sqoop采集到HDFS对应的文件,需要在hive数仓里面设计外部表与其一一对应;

(1)考虑到分区partitioned by 时间

(2)考虑到lzo压缩,并且需要lzo压缩支持切片的话,必须要添加lzo索引

(3)mysql数据库的表通过sqoop采集到HDFS,用的是\t作为分割,那数仓里面ODS层也需要\t作为分割;

3、创建ODS层业务表

这里我们业务系统javaweb项目一共有23张表,数仓hive我们这里只演示创建三张代表性的表。因为23张创建表的结构大都一样,这里只有3种数据同步策略的方式。

  • 订单表ods_order_info
    表数据同步更新策略:增量
drop table if exists ods_order_info;
create external table ods_order_info (`id` string COMMENT '订单号',`final_total_amount` decimal(16,2) COMMENT '订单金额',`order_status` string COMMENT '订单状态',`user_id` string COMMENT '用户id',`out_trade_no` string COMMENT '支付流水号',`create_time` string COMMENT '创建时间',`operate_time` string COMMENT '操作时间',`province_id` string COMMENT '省份ID',`benefit_reduce_amount` decimal(16,2) COMMENT '优惠金额',`original_total_amount` decimal(16,2)  COMMENT '原价金额',`feight_fee` decimal(16,2)  COMMENT '运费'
) COMMENT '订单表'
PARTITIONED BY (`dt` string) -- 按照时间创建分区
row format delimited fields terminated by '\t' -- 指定分割符为\t
STORED AS -- 指定存储方式,读数据采用LzoTextInputFormat;输出数据采用TextOutputFormatINPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location '/warehouse/gmail/ods/ods_order_info/'; -- 指定数据在hdfs上的存储位置
  • SKU商品表ods_sku_info表
    数据同步更新策略:全量
drop table if exists ods_sku_info;
create external table ods_sku_info( `id` string COMMENT 'skuId',`spu_id` string   COMMENT 'spuid', `price` decimal(16,2) COMMENT '价格',`sku_name` string COMMENT '商品名称',`sku_desc` string COMMENT '商品描述',`weight` string COMMENT '重量',`tm_id` string COMMENT '品牌id',`category3_id` string COMMENT '品类id',`create_time` string COMMENT '创建时间'
) COMMENT 'SKU商品表'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
STORED ASINPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location '/warehouse/gmail/ods/ods_sku_info/';
  • 省份表ods_base_province
    数据同步更新策略:特殊一次性全部加载
    不做分区partitioned BY
drop table if exists ods_base_province;
create external table ods_base_province (`id`   bigint COMMENT '编号',`name`        string COMMENT '省份名称',`region_id`    string COMMENT '地区ID',`area_code`    string COMMENT '地区编码',`iso_code` string COMMENT 'iso编码,superset可视化使用'
)  COMMENT '省份表'
row format delimited fields terminated by '\t'
STORED ASINPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location '/warehouse/gmail/ods/ods_base_province/';

4、加载数据

load data inpath '/origin_data/gmall/db/order_info/XXXX-XX-XX' OVERWRITE into table gmail.ods_order_info partition(dt='XXXX-XX-XX');

显示如下:

然后把其他20张表也类似这样操作,我们就完成了整个ODS层的数据处理。

数仓(六)从0到1简单搭建数仓ODS层(埋点日志 + 业务数据)相关推荐

  1. 数仓(十)从0到1简单搭建加载数仓DWS层

    数仓(一)简介数仓,OLTP和OLAP 数仓(二)关系建模和维度建模 数仓(三)简析阿里.美团.网易.恒丰银行.马蜂窝5家数仓分层架构 数仓(四)数据仓库分层 数仓 (五) 元数据管理系统解析 数仓( ...

  2. 《Spring 3.0就这么简单》——1.6 展现层

    本节书摘来自异步社区<Spring 3.0就这么简单>一书中的第1章,第1.6节,作者: 陈雄华 , 林开雄著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1. ...

  3. 企业级数据仓库:数据仓库概述;核心技术框架,数仓理论,数据通道Hive技术框架,HBase设计,系统调度,关系模式范式,ER图,维度建模,星型/雪花/星座模式,数据采集同步,业务数据埋点,数据仓库规范

    文章目录 第一章 数据仓库概述 1.1 数据仓库简介 1.1.2 什么是数据仓库? 1.1.3 OLTP 与 OLAP 1.2 数据仓库技术架构 1.3 课程目标 第二章 核心技术框架 2.1 数据仓 ...

  4. 墨仓式进入2.0时代?爱普生商用墨仓式L4158试用

    提起"墨仓式"打印机,相信现在已经没有人需要过多的解释,墨仓式打印机在打印市场占有率不断提高就是最佳佐证.为什么用户对于墨仓式这么认可,想必是墨仓式真正洞悉了他们的需求,解决了打印 ...

  5. 【电商数仓】数仓搭建之明细数据(data warehouse detail -- DWD)层(用户行为数据之曝光、错误日志表、数据加载脚本,业务数据之评价、订单事实表)

    文章目录 一 曝光日志表 1 思路解析 2 建表语句 3 数据导入 4 查看数据 二 错误日志表 1 思路解析 2 建表语句 3 数据导入 4 查看数据 三 DWD层用户行为数据加载脚本 四 DWD层 ...

  6. 【电商数仓】数仓搭建之DIM维度层(商品、优惠券、活动、地区、时间维度表)

    文章目录 零 DIM层最终建模结果 一 商品维度表(全量) 1 商品维度表 2 建模过程分析 3 建表语句 4 装载数据 (1)逐步分析 (2)完整装载sql 二 优惠券维度表(全量) 1 建表语句 ...

  7. 【实时数仓】DWD层需求分析及实现思路、idea环境搭建、实现DWD层处理用户行为日志的功能

    文章目录 一 DWD层需求分析及实现思路 1 分层需求分析 2 每层的职能 3 DWD层职能详细介绍 (1)用户行为日志数据 (2)业务数据 4 DWD层数据准备实现思路 二 环境搭建 1 创建mav ...

  8. 从0到1搭建数仓DWD层案例实践

    关注公众号:大数据技术派,回复资料,领取1024G资料. 然后点击右上角 "设为星标" 比别人更快接收好文章 前 导读:数仓架构(ods-dwd-dws-ads)每一层之前我们已经 ...

  9. 大数据-案例-离线数仓-在线教育:MySQL(业务数据)-ETL(Sqoop)->Hive数仓【ODS层-数据清洗->DW层(DWD-统计分析->DWS)】-导出(Sqoop)->MySQL->可视化

    一.商业BI系统概述 商业智能系统,通常简称为商业智能系统,是商业智能软件的简称,是为提高企业经营绩效而采用的一系列方法.技术和软件的总和.通常被理解为将企业中的现有数据转换为知识并帮助企业做出明智的 ...

最新文章

  1. 《把时间当作朋友》读书笔记(十四)--积累(二)
  2. HttpNotificationChannel 云端推送信息实现
  3. 中南大学计算机院转专业要求,机电工程学院2018级本科学生转专业的实施细则...
  4. ServiceStack 项目实例 010 ServiceStack.Northwind - 2
  5. 计算机网络基础知识总结,就这一篇了
  6. 团队协同作战渗透工具 CS神器Cobalt Strike
  7. 学校校园监控安装安全系统方案
  8. python读书心得体会_终于领会学习python的心得体会
  9. 华为签约计算机大学,2020年,华为签约学生多的16所大学,你知道几个?
  10. 【Nodejs】使用request批量下载MP3,文件数量内容都没问题
  11. OpenCV开发笔记(六十一):红胖子8分钟带你深入了解Shi-Tomasi角点检测(图文并茂+浅显易懂+程序源码)
  12. 开启文案或软文编辑的思考:60后大哥靠一篇软文年入500万案例解析
  13. 隐藏微信右上角的分享按钮
  14. [1191]电脑耳机孔插上耳机没反应
  15. MySQL建立连接慢的处理
  16. 在vm虚拟机上安装esd格式的win7系统文件
  17. ML笔记 00:机器学习类型 深度学习和传统机器学习的区别
  18. 13.3断流_BUG全军覆没!苹果iOS13.3正式推送:4G断流、后台闪退统统解决
  19. [035] 微信公众帐号开发教程第11篇-符号表情的发送(上)
  20. JSON WEB TOKE入门原理与实际案例测试

热门文章

  1. flutter 斗音页面
  2. clientX,clientY,screenX,screenY,offsetX,offsetY 区别测试
  3. C语言从一段字符串中提取IP地址的方法
  4. 考 PMP 证书真有用吗?
  5. 程序员上班刷简历!领导看见表示寒心竟还想挽留?
  6. 接到个商城任务需要接入个微信或者QQ客服,找到了两篇解决文章
  7. Python简单浪漫表白代码鲜花
  8. 暂存更改 切换分支 git
  9. 为什么叫区块链存储?兼谈IPFSFilecoin, Chia
  10. 【计算机视觉】不来试试图片轮廓提取?