热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在批评数据湖的时候,你有没有想过,它并不是取代数据仓库的

数据湖初识近两年,为什么都开始谈论起DataLake这个”新名词”了?先说说我的想法,其实还是用户需求驱动数据服务,大家

数据湖初识

近两年,为什么都开始谈论起 Data Lake 这个”新名词”了?

先说说我的想法,其实还是用户需求驱动数据服务,大家开始关注 Data Lake 的根本原因是用户需求发生了质变,过去的数据仓库模式以及相关组件没有办法满足日益进步的用户需求。

在批评数据湖的时候,你有没有想过,它并不是取代数据仓库的

 

数据湖概念的诞生,源自企业面临的一些挑战,如数据应该以何种方式处理和存储。最开始,企业对种类庞杂的应用程序的管理都经历了一个比较自然的演化周期。

那么到底是什么样的需求和挑战驱动了技术的变革,从而导致了新技术的产生呢?


数据湖的定义

AWS定义数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。

微软的定义就更加模糊了,并没有明确给出什么是Data Lake,而是取巧的将数据湖的功能作为定义,数据湖包括一切使得开发者、数据科学家、分析师能更简单的存储、处理数据的能力。

但是随着大数据技术的融合发展,早期的定义可能不再那么准确了,数据湖不断演变,汇集了各种技术,包括数据仓库、实时和高速数据流技术、数据挖掘、深度学习、分布式存储和其他技术。

逐渐发展成为一个可以存储所有结构化和非结构化任意规模数据,并可以运行不同类型的大数据工具,对数据进行大数据处理、实时分析和机器学习等操作的统一数据管理平台。

在批评数据湖的时候,你有没有想过,它并不是取代数据仓库的

 

所以说数据仓库不是曾经的那个仓库了,数据湖也不是曾经的那个"大明湖畔的夏雨荷了",sorry应该不是那一片绿油油的湖了


趋势

这里聊一个很重要的趋势:数据实时化

当然这里有很多其他的趋势,比如低成本化、设计云原生化等,但总体上我还是认为数据实时化是近几年来最热门、最明显且最容易让人看到收益的一个趋势。

数据仓库过去的模式大家可能都很了解,将整个数据仓库划分为 ODS、DWD、DWS,使用 Hive 作为数据存储的介质,使用 Spark 或者 MR 来做数据清洗的计算。

这样的数据仓库设计很清晰,数据也比较容易管理,所以大家开开心心地使用这套理论和做法将近 10 年左右。

在这 10 年的时间里,主流的互联网公司在数据技术上的玩法并没有多大的改变,比如推荐需要用到的用户画像、电商里商品的标签、好友传播时用的图、金融风控数据体系。

站在更高的一个角度看,我们会发现,十年前做的事情,比如用户画像表,如果你现在去做推荐服务,还是需要这个表。这样会产生一个什么现象?

十年的互联网行业的人才积累、知识积累、经验积累,让我们可以更加容易地去做一些事情,比如十年前很难招聘到的懂推荐数据的人才,水平在如今也就是一个行业的平均值罢了。

既然这些事情变得更好做了,人才更多了,我们就期望在事情上做的更精致。因为从业务上讲,我去推荐短视频,让用户购买东西,这个需求是没有止境的,是可以永远做下去的。

所以以前我可能是 T+1 才能知道用户喜欢什么,现在这个需求很容易就达到之后,我希望用户进来 10s 之后的行为就告诉我这个用户的喜好;以前可能做一些粗粒度的运营,比如全人群投放等,现在可能要转化思路,做更加精细化的运营,给每个用户提供个性化定制的结果。


技术演进——实时化

数据实时化没问题,但是对应到技术上是什么情况呢?是不是我们要在实时领域也搭一套类似离线数据仓库的数据体系和模式?

是的,很多公司确实是将实时数据流划分为了不同层级——也就是我们说的实时数仓,整体层级的划分思路和离线仓库类似,但是实时数据的载体就不是 Hive 或者 Hdfs 了,而是要选择更加实时的消息队列,比如 Kafka,这样就带来了很多问题,比如:


  • 消息队列的存储时间有限;
  • 消息队列没有查询分析的功能;
  • 回溯效率比文件系统更差;

除了实时数据载体的问题,还有引入实时数仓后,和离线数仓的统一的问题,


  • 比如实时数仓的数据治理、权限管理,是不是要单独做一套?
  • 如何统一实时数据和离线数据的计算口径?
  • 两套数据系统的资源浪费严重,成本提高?

举一个比较现实的例子,假设我们构造了一个实时计算指标,在发现计算错误后我们需要修正昨天的实时数据,这种情况下一般是另外写一个离线任务,从离线数仓中获取数据,再重新计算一遍,写入到存储里。

这样的做法意味着我们在每写一个实时需求的同时,都要再写一个离线任务,这样的成本对于一个工程师是巨大的。


技术演进——降低成本化

实时系统的成本太大了,这也是让很多公司对实时需求望而生畏的原因之一。所以这样去建设实时数仓的思路肯定不行啊,等于我要招两倍的人才(可能还不止),花两倍的时间,才能做一个让我的业务可能只提升 10% 的功能。

从技术的角度来看,是这两套系统的技术栈不一样造成了工程无法统一。那么,数据湖就是用来解决这样一个问题,比如我一个离线任务,能不能既产生实时指标,也产生离线指标,类似下图这样:

在批评数据湖的时候,你有没有想过,它并不是取代数据仓库的

 

满足上面最重要的一个前提就是我的数据源是实时的,这样对我们的大数据存储主要就是HDFS 和 S3 又提出了新的挑战——数据实时更新,如果原有技术或者组件不能满足需求,新的技术在需求的驱动下就此诞生。

除了计算层面上,在数据管理上,比如中间表的 schema 管理,数据权限管理,能否做到统一,在架构上实现统一后,我们在应对实时需求时,可以将实时离线的冗余程度降到最低,甚至能够做到几乎没有多余成本。


数据湖与数据仓库的区别

数据仓库是一种成熟稳定的技术架构。它们存储经过ETL 处理结构化数据,以便完成整决策支持的过程。数据仓库将数据组合为一种聚合、摘要形式,以在企业范围内使用,并在执行数据写入操作时写入元数据和模式定义

数据仓库通常拥有固定的配置;它们是高度结构化的,因此不太灵活和敏捷。数据仓库成本与在存储前处理所有数据相关,而且大容量存储的费用相对较高。

相较而言,数据湖是较新的技术,拥有不断演变的架构。数据湖存储任何形式(包括结构化和非结构化)和任何格式(包括文本、音频、视频和图像)的原始数据。根据定义,数据湖不会接受数据治理,但专家们都认为良好的数据管理对预防数据湖转变为数据沼泽不可或缺。

数据湖在数据读取期间创建模式,与数据仓库相比,数据湖缺乏结构性,而且更灵活;它们还提供了更高的敏捷性。在检索数据之前无需执行任何处理,而且数据湖特意使用了更加便宜的存储。

数据湖与数据仓库的差别很明显。 然而,在企业中两者的作用是互补的,不应认为数据湖的出现是为了取代数据仓库,毕竟两者的作用是截然不同的。


总结

离线架构大行其道数十年,互联网数十年技术积淀和业务发展对数据又提出新要求,实时计算技术的发展满足了人们对数据实时性的要求,但未能满足互联网人对低成本高性能的执着追逐。

当然,对于数据湖架构的批评也是不绝于耳。有人批评说,汇集各种杂乱的数据,应该就是数据沼泽。

历史见证了每一次新技术的诞生总是遇到万般挫折与质疑,但是它何曾让你失望过。


推荐阅读
  • Kylin 单节点安装
    软件环境Hadoop:2.7,3.1(sincev2.5)Hive:0.13-1.2.1HBase:1.1,2.0(sincev2.5)Spark(optional)2.3.0K ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 2017亚马逊人工智能奖公布:他们的AI有什么不同?
    事实上,在我们周围,“人工智能”让一切都变得更“智能”极具讽刺意味。随着人类与机器智能之间的界限变得模糊,我们的世界正在变成一个机器 ... [详细]
  • 开发笔记:Spark Java API 之 CountVectorizer
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SparkJavaAPI之CountVectorizer相关的知识,希望对你有一定的参考价值。 ... [详细]
  •        在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下:       1、CentOS6.7下安装JDK,地址:http:b ... [详细]
  • springboot基于redis配置session共享项目环境配置pom.xml引入依赖application.properties配置Cookie序列化(高版本不需要)测试启 ... [详细]
  • 我正在使用sql-serverkafka-connect和debezium监视sqlserver数据库,但是当我发布并运行我的wo ... [详细]
  • spark的任务已经执行完成:scalavallinesc.textFile(hdfs:vm122:9000dblp.rdf)line:org.apache ... [详细]
author-avatar
海滨的微博小窝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有