Hadoop 数据仓库建设实践(理论结合实践)_hadoop完成数据预处理、建立数据仓库、进行数据分析和数据导出(1)-程序员宅基地

技术标签: 2024年程序员学习  数据分析  数据仓库  hadoop  

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

但是数据平台已然成为了一个机构和组织的关键基础设施,已经像“水电煤”一样不可或缺了。

既然是“水电煤”,那么还需要自己“发电”和“供水”吗?为什么要自己搭建物理数据平台并负责维护呢?目前技术的发展实际上也给出了否定的答案,未来的数据和数据平台就如同业务系统一样,都会在云端(可能是公有云,也可能是专有云)。随需随用,所以基于云的数据平台解决方案势必会成为主流。

业务背景

我们就假设某虚拟的、全国连锁的大型零售超市 FutureRetailer 为对象(国外的对标公司为沃尔玛、家乐福、乐购等),为其搭建基于 Hadoop 的数据仓库。之所以选择零售业务,是因为大家都非常熟悉其业务,包括全国连锁业务形态、收银台购物流程、商品供应、商品库存管理等。

并且 FutureRetailer 在全国的各个城市内运营着数以千计的超市 ,根据城市的人口规模和大小不同,门店也不同,比如对于一线或者重点二线城市,其门店可能数以十计甚至几十计,在某些三四级城市或者乡镇来说,可能只有一个甚至没有。其每一个门店都包含了完整各类商品包含杂货、日常生活用品、水果生鲜、肉类、蔬菜、冷冻食品、花卉等。

所以,对于 FutureRetailer 来说,数据仓库平台对其至关重要。因为数据平台是其数据化运营的前提和基础,基于数据仓库平台生成的各种销售报表和库存报表是公司管理层和各个城市运营人员以及门店运营人员决策的主要依据。

  • 整个公司的整体销售趋势如何?
  • 是否应该对某些滞销的商品进行促销?
  • 客户是否在流失?
  • 某些畅销商品是否应该及时补货 如何择自营商品从而利润最大化?

以上这些我们都需要通过及时、准确和精炼过的数据来支持。

同时对于 FutureRetailer 来说,过去的数据分析只是一个方面,更为重要的是对于未来的预测和分析。比如未来商品销售估计,并据此制订采购计划 。随着新零售的兴起,未来的消费者需要的是更为个性化的服务和产品,如何将这种个性化的商品和服务提供给消费者?

image

马爸爸也说过:“纯电商时代过去了,未来十年是新零售的时代”。

对 FutureRetailer 来说,未来的购物也许将会是如下情景:

1 )一位资深 FutureRetailer 会员,其近年来购买商品的种类、型号、时间 、支付方式、会员卡基本信息、住址、联系方式,以及由此生成的会员购买商品档次评级、消费评级、退款评价等都被数据平台详细记录。

2 )会员步入超市或者开车进入超市停车场, FutureRetailer 车牌识别系统、视频系统或者 WiFi 网络(如果会员通过手机接人)捕获到会员来访,预测会员可能的购买清单,井有针对性地生成促销和优惠信息 。比如,会员上次拿起某件商品仔细查看了商品价格但没有购买,那么 FutureRetailer 此次将推荐另一个高性价比的同款商品给会员。

3 )会员到收银台结账, FutureRetailer 会预测下次会员的来访时间,并更新采购计划和清单等。

上述所有智能化的、个性化的购买行为必须借助数据平台的支撑。

Hadoop 数据仓库架构设计

首先介绍基于 Hadoop 的数据仓库逻辑架构,在 Hadoop 数据仓库的实际设计中,通常出于可维护性、性能成本以及使用便捷性考虑,会对数据仓库中的表进行分层。

来自于源头操作性系统的数据表通常会原封不动地存储一份,这称为 ODS ( Operation Data Store )层 。ODS 层通常也被称为准备区( staging area ),它们是后续数据仓库层(即基于 Kimball 维度建模生成的事实表和维度表层,以及基于这些事实表和明细表加工的汇总层数据)加工数据的来源。同时 ODS 层也存储着历史的增量或者全量数据。

数据仓库层(DW层)是 Hadoop 数据平台的主体内容。

数据仓库层的数据是 ODS 层数据经过 ETL 清洗、转换、加载生成的。 Hadoop 数据仓库的 DW 层通常都是基于 Kimball 的维度建模理论来构建的,并通过 维度一致性数据总线 来保证各个子主题的维度一致性。

DW 层的数据一定是清洗过的、干净的、一致的、规范的、准确的数据。数据平台的下游用户将会直接使用 DW 层数据,而 ODS 层数据原则上不允许下游用户直接接触和访问。

此外,处于性能、重复计算和使用便捷性考虑, DW 层数据除了保存基于 Kimball 维度建模的最细校度的事实表和维度表(即 DW 层的明细层),还会基于它们生成一层汇总数据(即 DW 的汇总层)。

汇总层的设计 主要是出于性能以及避免重复计算考虑。实际数据仓库的汇总层如何设计以及主要对哪些维度进行汇总等,需要根据业务需求以及明细层实际汇总频率来确定,原则上,业务使用频繁的维度需要对这些维度建立汇总层,汇总的指标可以和业务需求方共同设计完成。

在 DW 层的基础上,各个业务方或者部门可以建立自己的 数据集市( Data Mart ),此层一般称为 应用层 。应用层的数据来源于 DW 层,原则上不允许应用层直接访问 ODS 层,相比 DW 层,应用层只包含部门或者业务方自己关心的明细层和汇总层数据。

不同于 DW 层字段和指标的通用性,应用层可以包含自己业务或者部门特殊的指标或者字段,但是如果需要横向和其他部门对比, 必须采用公共层公用的指标和字段 。

采用上述“ ODS 层→ DW 层→应用层”的数据仓库逻辑架构如图所示:

未命名文件.png

项目实际中,采用上述分层架构可以有以下好处:

  • 屏蔽源头系统业务变更、系统变更对于下游用户的影晌: 如果源头系统业务发生变更,相关的变更由 DW 层来处理,对下游用户透明,无须改动下游用户的代码和逻辑。
  • 屏蔽源头业务系统的复杂性: 源头系统可能极为繁杂,而且表命名、字段命名 、字段含义等可能五花八门,通过 DW 层来规范和屏蔽所有这些复杂性,保证下游数据用户使用数据的便捷和规范。
  • 避免重复计算和存储: 通过汇总层的引人,避免了下游用户逻辑的重复计算, 节省了用户的开发时间和精力,同时也节省了计算和存储。
  • 数据仓库的可维护性: 分层的设计使得某一层的问题只在该层得到解决,无须更改下一层的代码和逻辑。

Hadoop 数据仓库规范设计

对于一个公司或者组织来说,使用数据的用户可能成百上千,如何降低大家对于数据使用的沟通成本、如何通过规范大家的行为来降低使用数据的风险,这些问题是必须加以考虑的。

我们在实际实践中,通常用数据仓库的规范来达到此目的。数据仓库的规范包括很多方面,如数据的命名规范、开发规范、流程规范、安全规范和质量规范等,下面将结合 FutureRetail 业务介绍常用的命名、开发和流程规范。

命名规范

命名的规范主要分为表命名的规范和字段命名的规范。

其中表命名的规范是为了让数据所有相关方对表包含的信息有一个共同的认知,比如属于哪一层(ODS、DWD、DWS、ADS)?哪个业务领域(销售、库存、促销)等?哪个维度(商品、买家、卖家、类目等)?哪个时间跨度(天、月、年、实时)?增量还是全量?

基于此,数据平台建设者应该首先规定数据仓库分层、业务领域、常见维度和时间跨度等的英文缩写,并据此给出表的命名规范。

image.png

开发规范

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-fH2og87X-1713706863336)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2401_84182222/article/details/138046447

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签