大数据概览笔记

88 阅读12分钟

大数据概览

大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。

Google的三架马车

Google 公司在2003到2006年之间发布的三篇论文作为大数据处理技术产生的起点,分别是:GFS、MapReduce和Bigtable

GFS(2003)是一个可扩展的分布式文件系统,用于对分布式的大量的数据进行访问,它运行于廉价的普通硬件上,并提供了容错功能。MapReduce(2004)是处理海量数据的并行编程模式,用于大规模数据集的并行运算,它能够充分利用GFS集群中所有低价服务器提供的大量CPU,从架构上来说可以看做GFS的补充,它与GFS一道构成了海量数据处理的核心。GFS适合存储少量的非常大的文件,但不适合存储成千上万的小文件,为了处理大量的格式化以及半格式化数据,诞生了管理非关系型数据的分布式数据存储系统BigTable(2006)


作者:预流
链接:juejin.cn/post/684490… 来源:稀土掘金\

hadoop

Hadoop社区,工程师可以从早期的GFS和MapReduce论文中改进和扩展这些想法,基于此之上产生了许多有用的工具,如Pig、Hive、HBase、Crunch 大数据的批处理的传统框架,而不是实时的数据处理和分析 数据的碎片化、分布式、流媒体特征更加明显,大数据技术开始与移动和云技术相结合,开始向复杂事件处理、图形数据库和内存计算等方向发展。 通过 Hadoop 把由多台普通的、廉价的服务器组合成分布式的计算-存储集群,从而提供大数据的存储和处理能力。

google dataflow:

  • 参考文献:Akidau T, Bradshaw R, Chambers C, et al. The dataflow model: a practical approach to balancing correctness, latency, and cost in massive-scale, unbounded, out-of-order data processing[J]. Proceedings of the VLDB Endowment, 2015, 8(12): 1792-1803.
  • 现代流式计算的基石:Google DataFlow - 知乎 (zhihu.com)

window

  1. fixed window
  2. slding window
  3. session window

time domain

  • Event Time,事件发生的时间。
  • Processing TIme,事件在系统中的处理时间
  • skew 表示e time和Ptime 之间的差值,watermark来可视化

dataflow model

  1. Core Primitives 针对 (key, value) 数据对提供了两种基本的操作原语:ParDo 和 GroupByKey
  2. window
    • Set AssignWindows(T datum) 将数据分配到 0 个或多个窗口中。

v2-279a1bfb86cbebbb5855a7e817522370_720w.jpg

-   Set MergeWindows(Set windows) 窗口合并操作,这个是流数据处理中非常有用。

v2-0623c617d23f405bc5b2311082161c37_720w.jpg 3. processing time: 使用一种全局的 event time 进度指标,比如 watermark 来处理。watermark 语义上就是一个时间戳,可以理解为一个阈值。但是如何设置 watermark 是个很难的问题,因为由于多种原因,数据到达可快可慢。

总结:- What results are being computed. => Transformation

  • Where in event time they are been computed. => Window
  • When in processing time they are materialized. => Watermark and Trigger
  • How earlier results relate to later refinements. => Discarding, Accumulating, Accumulating & Retracting.

大数据技术分类

  • 处理引擎和处理框架:
    • 把实际负责处理数据操作的组件称作引擎,而承担类似作用的 一系列组件 则叫做框架。Hadoop 可以看作一种以 MapReduce 作为默认处理引擎的处理框架
  • 处理框架分为3类:
    1. 批处理-Hadoop
      • 有界:批处理数据集代表数据的有限集合
      • 持久:数据通常始终存储在某种类型的持久存储位置中
      • 大量:批处理操作通常是处理极为海量数据集的唯一方法 1696fd0c67962c55_tplv-t2oaga2asx-zoom-in-crop-mark_3024_0_0_0.webp
    2. 流处理-storm
      • 无界
      • 实时计算、快速、低延迟;
      • 无限流、动态、无边界;
      • 7*24 持续运行;
      • 处理工作是基于事件
      • 结果立刻可用,并会随着新数据的抵达继续更新。
      • 实时处理需求的任务场景,比如日志分析,设备监控、网站实时流量变化等
      • 逐项处理:每次处理一条数据,是真正意义上的流处理。
      • 微批处理:这种处理方式把一小段时间内的数据当作一个微批次,对这个微批次内的数据进行处理。

1696fd0c69168b8c_tplv-t2oaga2asx-zoom-in-crop-mark_3024_0_0_0.webp

    1. 混合处理spark- flinkFlink
      • flink中把批处理的数据看做是具备有限边界的数据流,借此将批处理任务作为流处理的子集加以处理。
      • Flink 除了处理提供流处理(DataStream API)和批处理(DataSet API)能力之外,还提供了类SQL查询(Table API)、图计算(Gelly)和机器学习库(Flink ML)。
      • Flink 还兼容原生 Storm 和 Hadoop 程序,可以在 YARN 管理的集群上运行
    2. 总结:
      • 由事件驱动的体系结构, 即系统的内部工作流设计为在接收到数据后立即连续监视新数据和调度处理。
      • Samza 与 YARN 和 Kafka 紧密集成可提供更大灵活性,更易用的多团队使用,以及更简单的复制和状态管理。
      • Spark 可提供高速批处理和微批处理模式的流处理。该技术的支持更完善,具备各种集成库和工具,可实现灵活的集成。
      • Flink 提供了真正的流处理并具备批处理能力,通过深度优化可运行针对其他平台编写的任务,提供低延迟的处理,但实际应用方面还为时过早。批处理系统中的内部工作流只定期检查新数据, 并且只在下一个批处理窗口发生时处理该数据。

高级抽象提高普适性-Hive

  • Hive作为一套 Hadoop MapReduce 之上的 DSL 基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。 Hadoop 上的数据仓库基础构架,Hadoop 上的数据仓库基础构架 其重要意义是将 MapReduce 进一步进行抽象为业务高阶语言,让更多不善于 Java/C++编码的数据工程师能够快速上手使用大数据工具进行数据分析 Hive 作为一个 SQL-On-Hadoop 工具,为后续诸多大数据处理软件提供了很好的表率:即越高阶的业务抽象 API 能够极大降低用户开发门槛,拉动使用者基数。 开源社区来看,从 Hive 开始,Presto、Impala、Spark、或者当前风头正紧的 Flink,无不提供 SQL 作为高阶数据分析语言。从闭源产品而言,阿里云的 MaxCompute、AWS 的 Redshift、Google 的 BigQuery,均提供各自 SQL 抽象以争取更多云上开发人员的使用。 5cd12f2fc77e2.png

时效性

交互式计算领域

流计算领域:

类似阿里云的 FunctionCompute,或者是 AWS 的 Lambda 是一种触发式计算,基于事件流的实时流计算

storm

《History of Apache Storm and lessons learned》 如果有个统一的流式实时处理框架负责处理各类分布式系统底层问题,那么基于之上构建我们的实时大数据处理将会轻松得多. Storm 更多考虑到实时流计算的处理时延而非数据的一致性保证。不保证处理结果的正确性 Storm API 的 low-level 以及开发效率低下

Spark

2009 年加州大学伯克利分校的著名 AMPLab Matei Zaharia 论文《 An Architecture for Fast and General Data Processing on Large Clusters》 弹性分布式数据集(RDD)理念实现了,在底层 Pipeline 中能够获取每个阶段数据结果的所有派生关系,并且允许在机器故障时根据需要重新计算中间结果,当然,这些都基于一些假设 a)输入是总是可重放的,b)计算是确定性的. 第一个广泛使用的大规模流处理引擎,既提供较为高阶的 API 抽象,同时提供流式处理正确性保证。

Flink

2015 年,具备成熟、商用的实时计算引擎所需要具备的各类典型产品技术特征: 《容错和高性能如何兼得: Flink 创始人谈流计算核心架构演化和现状》

  1. 完全一次保证:故障后应正确恢复有状态运算符中的状态
  2. 低延迟:越低越好。许多应用程序需要亚秒级延迟
  3. 高吞吐量:随着数据速率的增长,通过管道推送大量数据至关重要
  4. 强大的计算模型:框架应该提供一种编程模型,该模型不限制用户并允许各种各样的应用程序在没有故障的情况下,容错机制的开销很低
  5. 流量控制:来自慢速算子的反压应该由系统和数据源自然吸收,以避免因消费者缓慢而导致崩溃或降低性能
  6. 乱序数据的支持:支持由于其他原因导致的数据乱序达到、延迟到达后,计算出正确的结果。
  7. 完备的流式语义:支持窗口等现代流式处理语义抽象
全家桶流批一体
  • spark flink -> All-In-One

实际上的大数据处理诉求分类有限,基本上在 Batch(60%+)、Stream(10%+)、Adhoc(10%+)、其他(包括 ML、Graph 等等)

5cd13126a663e.png

5cd131742d4c8.png

  • beam -> one-fits-all

技术实战flink

业务视野

参考:大数据十年回顾:浪潮之巅数英雄_大数据_宋词_InfoQ精选文章

我们观察历史,是让我们有信心面对当前;我们分析当代,是让我们有机会看清未来。

抽象意味着分工,意味着独立的市场领域以及商业份额,越是底层领域普适性越高、受众面越大、收入空间越足,而越是上层领域普适性越差、受众面越小、收入空间越小、但可能利润空间不错。故而,可以想象,云计算厂商在争取到巨大的 IT 市场流量入口之后,势必逐步下沉到普适性更强领域,因此其市场领域更大、想象空间更大,因此处于垄断地位的云计算公司未来一定会大力发展诸如 CPU、GPU、IOT 甚至于各类小型机、大型机等各类计算端+中心设备,而上层的软件生态,包括从最为基础的 OS 直到上层 SaaS 服务,都是在为这个庞大的 IT 基础设施为带动更多的算力资源消耗之目标而服务。 不叫卖的技术要么早已技术基石、人人皆知,要么濒临淘汰、昨日黄花。、 数据库模型的历史虽然不是起源于关系型模型,但必须得说关系型数据库曾统一了所有的数据库模型,并一直统治至今。“A Relational Model of Data for Large Data Bank”。www.seas.upenn.edu/~zives/03f/… Relation 的定义是这样的:给定 n 个集合 S1、S2、 S3、 …、 Sn, R 是一个 n 元数组(n-tuples),它的第一个元素取自集合 S1,第二个元素取自集合 S2,以此类推。我们将 R 称之为基于该 n 个集合的一个 Relation,Sj 为 R 的第 j 个域(Domain)。 SQL,即结构化查询语言(Structured Query Language)。从抽象程度而言,What 的命令通常要比 How 的命令在描述问题抽象程度更有利于业务沟通。专业 DBA 设定特殊的 Hint 往往才能够提升数据库查询性能。 static.geekbang.org/infoq/5cd12… 随着整个物理世界更多地数据化(上篇我们曾经讨论,凡是有利于加速信息生成、采集、传输、处理、反馈的技术都能够创造市场价值),而更多的物理社会数据化(IOT)、网络化(5G)势必造成更加复杂多样的数据处理需求类型,进而可以预见未来大数据处理会更加多样化,大数据分工于数据库系统,而接下来大数据同样内部面临巨大的分工:更多更垂直更定制化的大数据系统将源源不断产生,以应对快速爆炸的数据时代。 社区即标准、社区即流量、社区即商业,一切都可以导向未来的商业化变现,长线投资、长期发展;

在机器学习领域,一次数据 Training 足够、使用开源软件足够,小公司暂时没有能力也没有数据进行 Training、大公司有数据但大都自行部署开源机器学习引擎自己构建机器学习平台,何来大客户、何来大营收?人工智能在当前整个云计算生态以及大数据生态最多算个云计算公司产品黏性

我们一定是要让用户迁云过程中进行全面的代码改造再行上云,还是先将客户收入囊中循循善诱、徐徐图之。这个是技术导向和市场导向两类不同思路,麻烦就在大量云计算公司往往有技术导向的可能性以及倾向性。

任何成功商业模式均需建立在庞大的市场规模之上,无规模不商业,当用户基数一到、资源消耗一到,后续任何的服务增值、利润打造、云市场买卖平台构建均基于此可以做长线演化。

高阶抽象:人人成为数据分析师 2004 年时候,Google 发表神作《MapReduce: Simplified Data Processing on Large Clusters》 Marko Bonaci 的《The history of Hadoop》

开源大数据公司,包括 DataBricks(Spark)、Confluent(Kafka)、Ververica(Flink) Hadoop 已经早已超出 MapReduce(计算模型)和 HDFS(分布式存储)软件

后续各大 Hadoop 生态圈中的大数据开源软件都多多少少基于 Hadoop 构建的技术底座。

开源社区来看,从 Hive 开始,Presto、Impala、Spark、或者当前风头正紧的 Flink,无不提供 SQL 作为高阶数据分析语言。从闭源产品而言,阿里云的 MaxCompute、AWS 的 Redshift、Google 的 BigQuery,均提供各自 SQL 抽象以争取更多云上开发人员的使用。