《从0开始学大数据》之构建一个大数据平台

news2025/1/18 3:40:14

在分布式系统中分发执行代码并启动执行,这样的计算方式必然不会很快,即使在一个规模不太大的数据集上进行一次简单计算,MapReduce 也可能需要几分钟,Spark 快一点,也至少需要数秒的时间。而互联网产品处理用户请求,需要毫秒级的响应,也就是说,要在 1 秒内完成计算,因此大数据计算必然不能实现这样的响应要求。但是互联网应用又需要使用大数据,实现统计分析、数据挖掘、关联推荐、用户画像等一系列功能。

那么如何才能弥补这互联网和大数据系统之间的差异呢?解决方案就是将面向用户的互联网产品和后台的大数据系统整合起来,也就是构建一个大数据平台

大数据平台

大数据平台,顾名思义就是整合网站应用和大数据系统之间的差异,将应用程序产生的数据导入到大数据系统,经过处理计算后再导出给应用程序使用。

下图是一个典型的互联网大数据平台的架构。

极客时间《从0开始学大数据》
大数据平台由上到下,可分为三个部分:数据采集、数据处理、数据输出与展示。

数据采集

将应用程序产生的数据和日志等同步到大数据系统中,由于数据源不同,这里的数据同步系统实际上是多个相关系统的组合。数据库同步通常用 Sqoop,日志同步可以选择 Flume,打点采集的数据经过格式化转换后通过 Kafka 等消息队列进行传递。

不同的数据源产生的数据质量可能差别很大,数据库中的数据也许可以直接导入大数据系统就可以使用了,而日志和爬虫产生的数据就需要进行大量的清洗、转化处理才能有效使用。

数据处理

这部分是大数据存储与计算的核心,数据同步系统导入的数据存储在 HDFS。MapReduce、Hive、Spark 等计算任务读取 HDFS 上的数据进行计算,再将计算结果写入 HDFS。MapReduce、Hive、Spark 等进行的计算处理被称作是离线计算,HDFS 存储的数据被称为离线数据。

在大数据系统上进行的离线计算通常针对(某一方面的)全体数据,比如针对历史上所有订单进行商品的关联性挖掘,这时候数据规模非常大,需要较长的运行时间,这类计算就是离线计算。

除了离线计算,还有一些场景,数据规模也比较大,但是要求处理的时间却比较短。比如淘宝要统计每秒产生的订单数,以便进行监控和宣传。这种场景被称为大数据流式计算,通常用 Storm、Spark Steaming 等流式大数据引擎来完成,可以在秒级甚至毫秒级时间内完成计算。

数据输出与展示

大数据计算产生的数据还是写入到 HDFS 中,但应用程序不可能到 HDFS 中读取数据,所以必须要将 HDFS 中的数据导出到数据库中。数据同步导出相对比较容易,计算产生的数据都比较规范,稍作处理就可以用 Sqoop 之类的系统导出到数据库。

这时,应用程序就可以直接访问数据库中的数据,实时展示给用户,比如展示给用户关联推荐的商品。淘宝卖家的量子魔方之类的产品,其数据都来自大数据计算产生。

除了给用户访问提供数据,大数据还需要给运营和决策层提供各种统计报告,这些数据也写入数据库,被相应的后台系统访问。很多运营和管理人员,每天一上班,就是登录后台数据系统,查看前一天的数据报表,看业务是否正常。如果数据正常甚至上升,就可以稍微轻松一点;如果数据下跌,焦躁而忙碌的一天马上就要开始了。

任务调度管理系统

将上面三个部分整合起来的是任务调度管理系统,不同的数据何时开始同步,各种 MapReduce、Spark 任务如何合理调度才能使资源利用最合理、等待的时间又不至于太久,同时临时的重要任务还能够尽快执行,这些都需要任务调度管理系统来完成。有时候,对分析师和工程师开放的作业提交、进度跟踪、数据查看等功能也集成在这个任务调度管理系统中。

简单的大数据平台任务调度管理系统其实就是一个类似 Crontab 的定时任务系统,按预设时间启动不同的大数据作业脚本。

复杂的大数据平台任务调度还要考虑不同作业之间的依赖关系,根据依赖关系的 DAG 图进行作业调度,形成一种类似工作流的调度方式。对于每个公司的大数据团队,最核心开发、维护的也就是这个系统,大数据平台上的其他系统一般都有成熟的开源软件可以选择,但是作业调度管理会涉及很多个性化的需求,通常需要团队自己开发。开源的大数据调度系统有 Oozie,也可以在此基础进行扩展。

Lambda 架构

是构建大数据平台的一种常规架构原型方案。Lambda 架构原型请看下面的图。
极客时间《从0开始学大数据》

  1. 数据(new data)同时写入到批处理大数据层(batch layer)和流处理大数据层(speed layer)。
  2. 批处理大数据层是数据主要存储与计算的地方,所有的数据最终都会存储到批处理大数据层,并在这里被定期计算处理。
  3. 批处理大数据层的计算结果输出到服务层(serving layer),供应用使用者查询访问。
  4. 由于批处理的计算速度比较慢,数据只能被定期处理计算(比如每天),因此延迟也比较长(只能查询到截止前一天的数据,即数据输出需要 T+1)。所以对于实时性要求比较高的查询,会交给流处理大数据层(speed layer),在这里进行即时计算,快速得到结果。
  5. 流处理计算速度快,但是得到的只是最近一段时间的数据计算结果(比如当天的);批处理会有延迟,但是有全部的数据计算结果。所以查询访问会将批处理计算的结果和流处理计算的结果合并起来,作为最终的数据视图呈现。

小结

大数据平台听起来高大上,事实上它充当的是一个粘合剂的作用,将互联网线上产生的数据和大数据产品打通,它的主要组成就是数据导入、作业调度、数据导出三个部分,因此开发一个大数据平台的技术难度并不高。

思考题

如果你所在的公司安排你去领导开发公司的大数据平台,你该如何开展工作?建议从资源申请、团队组织、跨部门协调、架构设计、开发进度、推广实施多个维度思考。

该笔记摘录自极客时间课程
《从0开始学大数据》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信短视频怎么提取gif?三步教你在线提取gif动画

现在各大社交软件上短视频是越来越多,为了方便传播、保存可以将短视频制作成GIF。那么,如何从视频中提取动图呢?很简单,两招就能完成在线视频转换成gif动图的操作,只需要使用【GIF中文网】的视频转gif(http…

OBS使用WebRTC进行腾讯云推流播流

推流: 首先:OBS想要推送WebRTC格式的推流需要满足以下两点: 1:OBS版本在26及以上 2:需要给OBS安装腾讯云插件,而且只支持Windows版。 OBS下载地址:Download | OBSDownload OBS Studio for W…

电路方案分析(十六)带有C2000微控制器且精度为 ±0.1° 的分立式旋转变压器前端参考设计

带有C2000微控制器且精度为 0.1 的分立式旋转变压器前端参考设计 tips:参考Ti设计资源:TIDA-01527 旋转变压器详细介绍: https://blog.csdn.net/qq_41600018/article/details/127597875?spm1001.2014.3001.5501 该参考方案设计…

用投资思维做好招商工作:湘商回归,长沙急企业之所急

在中国经济发展40年后,当下经济发展的底层逻辑已发生了根本性变化。企业发展所面临的问题,投资所思考的方向也已不同以往。一味再强调本地资源优势,介绍当地优惠政策的招商工作方式不再适应当下形式,往往反而会导致忽略企业的真实…

58.Isaac教程--OTG5 直线运动规划器

OTG5 直线运动规划器 ISAAC教程合集地址文章目录OTG5 直线运动规划器最大值和期望值的配置OTG5 的 Flatsim 演示用于直线运动的在线轨迹生成 - V 型 (OTG5) 规划器允许线性运动,同时明确防止曲线。 这在即使与一般直线运动方向有轻微偏差也会导致意外结果的情况下很…

Redis核心技术-高可靠-集群方案(客户端分片、代理分片、Redis Cluster)

Redis在3.0版本前只支持单实例模式,虽然Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版。 各大企业等不急了,在3.0版本还没发布前为了解决Redis的存储瓶颈,纷纷推出了各…

【每日一题】【LeetCode】【第二十四天】【Python】两个数组的交集 II

解决之路 题目描述 测试案例(部分) 第一次 顺着“两个数组的交集”的思路想,先用集合处理nums1和nums2,然后通过“交集”运算得出列表res,然后循环检查列表res,得出各个元素在两个数组中出现的最小次数&…

2022生化原理I复习资料汇总

文章目录1.2022复习重点及参考题2022年考试复习题:附录:参考答案及复习重点2.2021复习重点及参考题3.往年复习重点及参考题汇总4.复习重点整理及考试题型生化原理I复习资料及往年考题1.2022复习重点及参考题 2022年考试复习题: 1.2021-2022…

Python Stock安装与使用

这个是使用python 开发股票系统。 使用 tushare 获取股票数据,然后使用tornado 进行web 展示。 使用pandas numpy 数据处理。 项目代码 项目代码放到github上面 GitHub - pythonstock/stock: stock,股票系统。使用python进行开发。 因为为了简单&#x…

【Netty学习】七、详解ByteBuf缓冲区

七、详解ByteBuf缓冲区 为了确保引用计数不会混乱,在Netty的业务处理器开发过程中,应该坚持一个原则:retain和release方法应该结对使用。简单地说,在一个方法中,调用了retain,就应该调用一次release。 pub…

视图存储过程存储函数

文章目录视图常见数据库对象视图概述为什么使用视图?视图的理解创建视图创建单表视图创建多表联合视图基于视图创建视图查看视图更新视图的数据一般情况不可更新的视图修改、删除视图修改视图删除视图总结视图优点视图不足存储过程&存储函数存储过程概述理解分类…

NFT Insider #84:The Sandbox与华纳音乐集团合作举办全世界最大的DemoDrop,英超联赛签署NFT协议

引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类&#…

[论文分享] How could Neural Networks understand Programs?

前言 读一篇 ICML 2021 的论文How could Neural Networks understand Programs? 程序语义理解是程序设计语言处理(PLP)的一个基本问题。最近基于NLP预训练技术学习代码表示的工作,推动了该方向的前沿。然而,PL和NL的语义有着本质的区别。忽略这些&…

CPP----精选常识100例

1 静态全局变量的作用域 本文件 2 判断一个程序是C还是C编译的 #ifdef __cpluspluscout << "c"; #else cout << "c"; #endif3 C函数传递方式 值传递&#xff0c;引用传递&#xff0c;指针传递 4 虚函数定义及用法 虚函数是C中用于实现多态(p…

vue2 a-tree-select树形结构-懒加载(无限子级)---笔记

实现效果 思维导图 HTML代码&#xff1a;treeData是绑定的数组&#xff0c;onLoadData是懒加载函数 <a-tree-select style"width: 100%; margin-left: 20px" tree-data-simple-mode multiplelabelInValueplaceholder"请选择…" v-decorator"[lea…

史上最详细的KMP算法教程,看这一篇就够了

&#x1f9d1;‍&#x1f4bb; 文章作者&#xff1a;Iareges &#x1f517; 博客主页&#xff1a;https://blog.csdn.net/raelum ⚠️ 转载请注明出处 目录一、BF算法二、KMP算法2.1 字符串基础2.2 next数组2.3 KMP的实现2.4 next数组的生成三、改进的KMP算法3.1 nextval数组3.…

turf.js实现行政区(多边形)图形合并边界提取,掩膜等效果

在做前端行政区展示的时候,可能经常会遇到这样的需求,就是给定一个行政区比如杭州市各个区,县的行政区边界图形,但是我们现在需要一个杭州市的行政区边界,我们是否可以通过前端合并这些行政区,答案当然是可以的,我们可以使用turf.js来实现这个需求。 turf官网:Turf.js…

纯滞后系统的数字Smith预估控制-2

在纯滞后系统的数字Smith预估控制-1的基础上进行Simulink仿真。采用 Simulink 进行数字化仿真&#xff0c;按Smith算法设计Simulink模块。在PI控制中&#xff0c;kp0.5&#xff0c;ki0.01。其响应结果如图1和图2所示。图1 Smith阶跃响应结果图2 只采用PI控制时的阶跃响应结果初…

CDA Level Ⅱ 模拟题(一)

单选1 练习题 【单选题】1/20 一项针对某城市小微企业税收扶持和税收种类的调查&#xff0c;本打算调查500个企业&#xff0c;但忽然发现税务中心数据库中已存有这项调查数据&#xff0c;并且可以有权限获取这份数据&#xff0c;请问这是什么类型的调查方式&#xff1f; A.分层…

flask计算pin码

Flask debug模式算pin码_Ys3ter的博客-CSDN博客_flask pin码 可以参考这个链接 ctfshow801 然后这张图非常的重要 也就是我们需要上面的各个因素&#xff0c;然后获得ping码&#xff0c;也就是console的密码&#xff0c;就可以自己输出命令 然后会有两个脚本&#xff0c;一个…