草庐IT

传统数仓的三大缺陷,一篇梳理清楚

陈峰 2023-03-28 原文

1、效率低

传统的数仓大多构建在Hadoop之上。这位传统的数仓带来了近乎无限的横向扩展能力,同时也造成了传统的数仓技术效率低的缺陷。效率低主要体现在以下几个方面。

部署效率低:在部署Hive/HBase/Kylin之前,必须部署好Hadoop集群。和传统数据库相比,这个部署效率是非常低效的。

运维效率低:Hive/HBase/Kylin基于Hadoop,Hadoop生态会带来一个非常严重的单点故障问题,即Hadoop体系中任何一个组件出现问题,都可能引起整个系统的不可用。使用传统的数仓对运维的要求非常高。

计算效率低:主要体现在Hive和Kylin上,这两个数仓没有自己的存储引擎和计算引擎,这导致Hive和Kylin只能依靠堆机器实现复杂查询,而无法从数据本身下手。在大数据后期,一些以数据快速查询为目标而特殊设计的数据存储格式成为标准,这个现象才有所改观。而HBase的优化核心就是重新设计的存储引擎,使得HBase可以对数据本身进行查询速度的优化。

2、延迟高

构建在Hadoop之上的数仓引擎,除了效率低的缺点之外,还面临着高延迟的挑战。高延迟主要体现在以下几个方面。

查询延迟高:使用Hive作为数仓,受限于HDFS的性能瓶颈,Hive的查询速度比较慢,难以支撑低延迟场景,无法应用在实时计算的场景中。

写入数据延迟高:同样受限于HDFS,Hive的数据写入延迟也很高,这意味着数据无法实时写入Hive,从而无法支撑实时分析场景。

3、成本高

传统的数仓数仓引擎还会带来成本高的挑战,主要体现在以下几个方面.

部署成本高:由于Hadoop的计算逻辑是通过堆计算资源的方式来摊销复杂查询的时间,因此如果需要达到一个比较理想的性能,必须要求集群中节点的数量达到一定的规模,否则因为计算效率低的特点,单机很容易成为性能瓶颈。这导致了Hive等基于Hadoop的数仓部署成本高的缺陷。

运维成本高:集群服务器达到一定规模后,运维成本会指数级上升。同时,由于Hadoop中组件太多,任何一个组件的失效都有可能导致整个服务的不可用,因此运维团队必须包含所有组件的运维人员,否则运维团队有可能很好地执行任务。这也极大地提高了运维团队的人力成本。

存储成本高:Hadoop的HDFS为了避免集群中服务器故障从而导致的不可用的情况,默认使用三副本策略存储数据,即数据会保存三份。这会极大地提高存储成本。即使是新一代的Hadoop采用了EC纠删码技术降低了副本数量,但使用场景有限只适合在冷数据存储中使用,对于经常需要查询的热数据,并不适合采用该方案。

决策成本高:传统的大数据由于部署成本高,导致企业在做决策时面临比较大的决策成本,一方面是前期投入太大,短期内看不到效果,长期以来效果如何也很难说清楚。另一方面是即使企业下定决心来建设数仓,昂贵的基础设施和专业技术人员的缺乏也会造成很长的建设周期,长的建设周期又会带来很多不可预知的变数,最终影响企业的决策。

本文摘编自《ClickHouse性能之巅:从架构设计解读性能之谜》,经出版方授权发布。(书号:9787111716587)转载请保留文章出处。

关于作者:陈峰,资深大数据专家和架构师,ClickHouse技术专家,滴普科技(2B领域独角兽)合伙人兼首席架构师。《ClickHouse性能之巅:从架构设计解读性能之谜》作者。

有关传统数仓的三大缺陷,一篇梳理清楚的更多相关文章

  1. Cesium源码解析一(terrain文件的加载、解析与渲染全过程梳理) - 2

    快速导航(持续更新中…)Cesium源码解析一(terrain文件的加载、解析与渲染全过程梳理)Cesium源码解析二(metadataAvailability的含义)Cesium源码解析三(metadata元数据拓展中行列号的分块规则解析)Cesium源码解析四(Quantized-Mesh(.terrain)格式文件在CesiumJS和UE中加载情况的对比)目录1.前言2.本篇的由来3.terrain文件的加载3.1更新环境3.2更新和执行渲染命令3.3数据优化3.4结束当前帧4.总结1.前言  目前市场上三维比较火的实现方案主要有两种,b/s的方案主要是Cesium,c/s的方案主要是u

  2. 阿里云,华为云,腾讯云三大公有云厂商,香港地区主机测评 - 2

    三大公有云厂商,香港地区主机测评一、ping时延比对(厦门电信本地测试):Ping时延测试腾讯云阿里云华为云延迟率最低时延44ms,最高72ms,平均46ms47.242段:最低时延59ms,最高204ms,平均107ms最低时延45ms,最高93ms,平均47ms丢包率丢包率小有的ip段丢包率较大每个段都会有概率丢包阿里云:47.242段:最低时延59ms,最高204ms,平均107ms,有的ip段丢包率较大8.210段:最低时延64ms,最高232ms,平均119ms,丢包率较好腾讯云:最低时延44ms,最高72ms,平均46ms,丢包率小华为云:最低时延45ms,最高93ms,平均47m

  3. 数仓建模—企业数字化转型 - 2

    企业数字化转型通过数字化转型提速、赋能传统行业已经成为共识,数字化转型的本质就是应用大规模数据处理技术来提升企业的运营效率。这就涉及到了这个概念之下的一个关键技术–数据处理。随着社会的不断进步,就需从海量的数据中提取有价值、有意义的信息,以改进企业决策的合理性,进而提升效率。围绕这个目标就涉及到解决各种挑战,例如合规性、数据安全、快速决策、遗留系统整合、多样化的数据源等。为此,研究人员抽象出了一个围绕数据处理的概念模型。在这个抽象模型中,最重要的设计思想就是实现由“数据”到“洞察力”的提升。这个变化是由业务发展以及数据处理技术交互作用的必然结果,数据挖掘、数据分析、机器学习等专有名词已经由概念

  4. 【保姆级】python最新版3.11.1开发环境搭建,看这一篇就够了 - 2

    【保姆级】Python最新版开发环境搭建,看这一篇就够了(适用于Python3.11.2安装)文章目录【保姆级】Python最新版开发环境搭建,看这一篇就够了(适用于Python3.11.2安装)一、Python解释器安装Windows安装步骤环境变量配置(非必要)MacOS安装步骤Linux安装步骤二、PyCharm安装三、创建Python工程工欲善其事必先利其器,在使用Python开发程序之前,在计算机上搭建Python开发环境是必不可少的环节,目前Python最新稳定版本是3.11.1,且支持到2027年,如下图所示本文手把手带你从0到1搭建Python最新版3.11.1开发环境,堪称保

  5. 接口测试重点内容看这一篇就够了 - 2

    1、接口的概念系统与系统之间,组件与组件之间,数据传递交互的通道2、接口的类型按协议划分:http、tcp、IP按语言划分:C++、java、PHP……按范围划分:系统之间多个内部系统之间内部系统与外部系统之间程序之间方法与方法之间、函数与函数之间、模块与模块之间3、接口测试的概念对系统或组件之间的接口进行测试,校验传递的数据正确性和逻辑依赖关系的正确行。4、接口测试的原理主要针对服务器,模拟客户端向服务器发送请求,通过工具或者代码来测试服务器针对客户端请求回发的响应数据是否与预期结果一致。5、接口测试的特点符合质量控制前移的理念可以发现一些页面操作发现不了的问题接口测试低成本高效益接口测试是

  6. 零基础学Linux运维,看这一篇就够了(含30G自学教程笔记) - 2

    作为一个10年老运维,在开始这篇文章之前,先送给大家一句话:干啥不好,非要做运维,听人劝,吃饱饭,趁年轻,换行吧!好了,不开玩笑了,回到正文中来。当谈到运维职业发展情况时,很多人都会说运维做不长久,然后劝人做两年就赶快转研发吧!总之是全面唱衰运维!但作为一个老运维,我想说的是:运维转开发确实是一个不错的选择,但运维做不长久则完全是对运维的偏见了!很多人有运维做不长久的偏见的原因其实和运维职业的特性有关,运维有三个老生常谈的特点:打杂,背锅,睡的少!说运维打杂,是说运维工作比较宽泛,运维职业门槛不高,什么都得会一点。公司里但凡跟计算机有关的事,可能都会找到运维,这就导致了运维工作比较杂!至于背黑

  7. 必看新手教程!一篇就够!pycharm链接云服务器--yolov5 yolov7训练自己的数据集(矩池云) - 2

    趁着寒假期间稍微尝试跑了一下yolov5和yolov7的代码,由于自己用的笔记本没有独显,台式机虽有独显但用起来并不顺利,所以选择了租云服务器的方式,选择的平台是矩池云(价格合理,操作便捷)需要特别指出的是,如果需要用pycharm链接云服务器训练,必须要使用pycharm的专业版而不是社区版,专业版可以使用SSH服务连接云服务器。关于专业版的获取,据我所知一是可以买,二是如果你是在校大学生,可以用学生证向JetBrain申请专业版使用权,我就是通过这种方式激活专业版账户的,我记得当时两三天官方就发激活邮件了,还是很人性化的,使用期一年。下面开始正题本教程只涉及将yolov5及yolov7跑通

  8. javascript - 功能范围理解不清楚 - 2

    vara=1;functionb(){a=10;return;functiona(){}}b();alert(a);a的1的输出如何显示?return;functiona(){}在函数体内执行? 最佳答案 您在函数的最后一行声明了一个符号“a”。那就是受赋值语句影响的“a”。函数声明语句被提升到函数的顶部并首先被解释。因此,赋值语句实际上发生在您声明了一个名为“a”的函数(局部于“b”函数)之后。因此,赋值会影响那个符号,而不是全局“a”。请记住,变量是无类型的,因此您已将名称绑定(bind)到函数这一事实不会阻止它稍后被分配一个数

  9. javascript - 在 ajax 中转换传统帖子 - 2

    假设我有一个表单:/something/somewhere操作不会返回完整的html页面,而只是一个片段。我想让提交按钮完成它的发布工作,但是捕获这篇文章的结果并将它注入(inject)到DOM中的某处。jQuerysubmit发生在表单实际提交之前。它如何工作的一个例子是:$('#myForm').posted(function(result){$('#someDiv').html(result);});有什么办法吗? 最佳答案 描述您可以为此使用jQuery.post()和.serialize()方法。.post()Loadda

  10. javascript - 'this'关键字,不清楚 - 2

    我对以下代码中的“this”关键字感到困惑,有两个“this”:varFoo=function(string){this.name=string//1st-this}Foo.prototype.get_name=function(){returnthis.name//2nd-this}varmyFoo=newFoo('John')the_name=myFoo.get_name()'the_name'等于'John',原型(prototype)方法通过返回this.name得到名字。但是谁能给我解释一下1st-this和2nd-this,它们代表什么? 最佳答

随机推荐