大数据技术概览(持续更新中)

发布于: 2020 年 05 月 27 日

1、概述

1.1 背景

大数据的5V特点(IBM提出):

  • Volume(大量)

  • Velocity(高速)

  • Variety(多样)

  • Value(低价值密度)

  • Veracity(真实性)

一个技术领域一般可以分为工程和策略两个部分,工程是指这个领域的工程架构实现,而策略则是工程架构上实现的算法,这里主要讨论大数据工程相关的技术,涉及以下环节:

(1)数据的采集;

(2)数据的传输;

(3)数据的计算;

(4)数据的存储;

(5)数据的分析和查看;

大数据工程相关的技术主要关注时效性、准确性:

(1)时效性:从数据的产生到数据处理完成得到最终的结果所需要的时间,在其他条件满足的情况下(如准确性和成本等),时效性越短越好。

(2)准确性:大数据在处理中要求数据处理的100%准确,这与其他比率性的指标不同,一般比率性的指标,都要求四个九(99.99%)或者五个九(99.999%),如可靠性,而数据处理的准确性要求严格的100%,这就要求我们在不是100%可靠的基础设施上,实现100%可靠的数据。

1.2 大数据技术发展历史

本节参考资料:

大数据技术发展史:大数据的前世今生 https://blog.csdn.net/geekmubai/article/details/87299091

大数据技术发展历程:https://www.jianshu.com/p/93fbecf0e928

大规模数据处理的演化历程(2003-2018):https://www.iteblog.com/archives/2430.htm | 翻译自《Streaming System》最后一章《The Evolution of Large-Scale Data Processing》

1.2.1 Google三驾马车

Google的三驾马车:Google FS、MapReduce、BigTable ,虽然Google没有公布这三个产品的源码,但发布了这三个产品的详细设计论文,奠定了风靡全球的大数据算法的基础。

GFS 2003: https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/gfs-sosp2003.pdf

MapReduce 2004: https://storage.googleapis.com/pub-tools-public-publication-data/pdf/16cb30b4b92fd4989b8619a61752a2387c6dd474.pdf

BigTable 2006: https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/bigtable-osdi06.pdf

三大论文中文翻译参考:https://www.jianshu.com/p/7df00b383fa1

三大论文架构解析:https://blog.csdn.net/qq947089960/article/details/81476968

MapReduce详解:https://www.jianshu.com/p/461f86936972

1.2.2 hadoop生态

受 Google 的论文启发,2004 年 7 月,Doug Cutting 和 Mike Cafarella 在 Nutch 中实现了类似 GFS 的功能,即后来 HDFS 的前身。后来 2005 年 2 月,Mike Cafarella 在 Nutch 中实现了 MapReduce 的最初版本。到 2006 年 Hadoop 从 Nutch 中分离出来并启动独立项目。Hadoop 的开源推动了后来大数据产业的蓬勃发展,带了了一场深刻的技术革命

这个时候,Yahoo的一些人觉得用MapReduce进行大数据编程太麻烦了,于是便开发了Pig。Pig是一种脚本语言,使用类SQL的语法,开发者可以用Pig脚本描述要对大数据集上进行的操作,Pig经过编译后会生成MapReduce程序,然后在Hadoop上运行。

编写Pig脚本虽然比直接MapReduce编程容易,但是依然需要学习新的脚本语法。于是Facebook又发布了Hive。Hive支持使用SQL语法来进行大数据计算,比如说你可以写个Select语句进行数据查询,然后Hive会把SQL语句转化成MapReduce的计算程序。

这样,熟悉数据库的数据分析师和工程师便可以无门槛地使用大数据进行数据分析和处理了。Hive出现后极大程度地降低了Hadoop的使用难度,迅速得到开发者和企业的追捧。

随后,众多Hadoop周边产品开始出现,大数据生态体系逐渐形成,其中包括:专门将关系数据库中的数据导入导出到Hadoop平台的Sqoop;针对大规模日志进行分布式收集、聚合和传输的Flume;MapReduce工作流调度引擎Oozie等。

在Hadoop早期,MapReduce既是一个执行引擎,又是一个资源调度框架,服务器集群的资源调度管理由MapReduce自己完成。但是这样不利于资源复用,也使得MapReduce非常臃肿。于是一个新项目启动了,将MapReduce执行引擎和资源调度分离开来,这就是Yarn。2012年,Yarn成为一个独立的项目开始运营,随后被各类大数据产品支持,成为大数据平台上最主流的资源调度系统。

附:十年了,Hadoop的前世今生 https://blog.csdn.net/lfq1532632051/article/details/53219558

1.2.3 Storm、Spark、Flink

2012年,UC伯克利AMP实验室(Algorithms、Machine和People的缩写)开发的Spark开始崭露头角。当时AMP实验室的马铁博士发现使用MapReduce进行机器学习计算的时候性能非常差,因为机器学习算法通常需要进行很多次的迭代计算,而MapReduce每执行一次Map和Reduce计算都需要重新启动一次作业,带来大量的无谓消耗。还有一点就是MapReduce主要使用磁盘作为存储介质,而2012年的时候,内存已经突破容量和成本限制,成为数据运行过程中主要的存储介质。Spark一经推出,立即受到业界的追捧,并逐步替代MapReduce在企业应用中的地位。

而在大数据领域,还有另外一类应用场景,它们需要对实时产生的大量数据进行即时计算,比如对于遍布城市的监控摄像头进行人脸识别和嫌犯追踪。这类计算称为大数据流计算,相应地,有StormFlinkSpark Streaming等流计算框架来满足此类大数据应用的场景。 流式计算要处理的数据是实时在线产生的数据,所以这类计算也被称为大数据实时计算。

1.2.4 Dataflow/Beam

 Apache Beam前身是Google Dataflow SDK,DataFlow是谷歌的提供大数据计算平台。在DataFlow之前,谷歌的批处理和流处理(流计算,实时处理)使用了不同系统,流处理有MillWheel、FlumeJava等,批处理有MapRedude,不同的平台使用了不同的Api,无疑提升了开发的难度,所以DataFlow横空出世,提出了一套统一批处理和流处理的模型。

      Google在2016年2月贡献给Apache基金会的Apache孵化项目,2017年2月从孵化器毕业,成为Apache Beam的顶级项目。

  2003年,谷歌发布了著名的大数据三篇论文,史称三驾马车:Google FS、MapReduce、BigTable。虽然谷歌没有公布这三个产品的源码,但是她这三个产品的详细设计论文开启了全球的大数据时代!从Doug Cutting大神根据谷歌的论文实现出Hadoop+MapReduce的雏形,到Hadoop生态圈各种衍生产品的蓬勃发展,再到后来的Spark、流式计算等等,所有的一切都要归功于、源自这三篇论文。可惜谷歌虽然开启了这个伟大的时代,却始终仅仅满足于偶尔发表一两篇论文以强调自己在理论和工程上的领导地位,从来没有亲身参与进来,尤其是没有为开源生态做出什么贡献,因而一直没有从大数据市场获得什么实在的好处。

  痛定思痛,谷歌开始走开源之路,将自己的标准推广给社区。从众所周知的Kubernetes,到2016年2月谷歌高调宣布将Apache Beam(原名Google DataFlow)贡献给Apache基金会孵化,再到最近大热的Tensorflow等等,动作不断。Apache Beam被认为是继MapReduce,GFS和BigQuery等之后,谷歌在大数据处理领域对开源社区的又一个非常大的贡献。

  也就是说,在大数据处理的世界里,谷歌一直在内部闭源,开发并使用着BigTable、Spanner、Millwheel等让大家久闻大名而又无缘一见的产品,开源世界演进出了Hadoop、Spark、Apache Flink等产品,现在他们终于殊途同归,走到一起来了

Apache Beam是什么?:https://yq.aliyun.com/articles/363628?spm=a2c4e.11153940.0.0.60387163cX1dur

The Dataflow Model翻译:https://yq.aliyun.com/articles/64911?spm=a2c4e.11153940.0.0.430a5c88eVuDyG

1.2.5 大数据架构演进

Lambda架构,Kappa架构和去ETL化的IOTA架构:https://www.jianshu.com/p/4f18d82a9c75

2、流式计算理论

该部分观点大部分来自《Streaming System》

window

watermark

Exactly-Once

table & state

streaming join

3、数据的采集

Apache Chukwa

Apache Flume

Facebook Scribe

网络爬虫

2.1 Flume

Flume 产品给人引入高级管道概念,这使得能够让用户编写清晰易懂且自动优化的分布式大数据处理逻辑,从而让创建更大型更复杂的分布式大数据任务成为了可能,Flume 让我们业务代码在保持代码清晰逻辑干净的同时,自动具备编译器优化能力。

4、数据的传输

分布式消息队列

kafka、RabbitMQ、ActiveMQ、RocketMQ

3.1 Kafka

我们可以简单描述为: Kafka 本质上是一个持久的流式数据传输和存储工具,底层系统实现为一组带有分区结构的日志型存储。

Kafka 为流处理领域做出了巨大贡献,可以说比其他任何单一系统都要多。特别是,对输入和输出流的持久性和可重放的设计,帮助将流计算从近似工具的小众领域发展到在大数据领域妇孺皆知的程度起了很大作用。此外,Kafka 社区推广的流和表理论对于数据处理引发了我们深入思考。

5、数据的计算

4.1 离线计算 vs 流式计算

MR模型及相关实现

google mr

hadoop mr

MapReduce 的简单性和可扩展性。 MapReduce 给我们的启发是:MapReduce 系统的设计非常勇于创新,它提供一套简便且直接的 API,用于构建业务复杂但可靠健壮的底层分布式数据 Pipeline,并足够将这套分布式数据 Pipeline 运行在廉价普通的商用服务器集群之上。

4.2 hadoop

在 Hadoop 这部分,我期望读者朋友能够了解到围绕 Hadoop 的开源生态系统对整个行业产生的巨大影响。通过创建一个开放的社区,工程师可以从早期的 GFS 和 MapReduce 论文中改进和扩展这些想法,这直接促进生态系统的蓬勃发展,并基于此之上产生了许多有用的工具,如 Pig,Hive,HBase,Crunch 等等。这种开放性是导致我们整个行业现有思想多样性的关键,同时 Hadoop 开放性生态亦是直接促进流计算系统发展。

4.4 Storm

Storm 是行业首次大规模尝试低延迟数据处理的系统,其影响反映在当前线上大量部署和应用各类流式处理系统。

4.3 spark

原始 Spark 1.x 架构细节:https://www2.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.html

当 Spark 第一次出现时,它带来的重要贡献是它是第一个公开可用的流处理引擎,具有数据处理的强一致性语义,尽管这个特性只能用在有序数据或使用处理时间计算的场景。

4.4 millwheel

MillWheel:探讨https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/41378.pdf 论文花费大部分时间来讨论在这样的系统中提供正确性的各种问题,一致性保证、Watermark

翻译版:https://www.cnblogs.com/fxjwind/p/5208023.html

MillWheel的论文可以说是流式计算的教科书。MillWheel 给我们带来最大的价值是之前列出的四个概念(数据精确一次性处理,持久化的状态存储,Watermark,持久定时器)为流式计算提供了工业级生产保障:即使在不可靠的商用硬件上,也可以对无序数据进行稳定的、低延迟的处理。

4.6 DataFlow

DataFlow论文:https://research.google/pubs/pub43864/

翻译:https://yq.aliyun.com/articles/64911?spm=a2c4e.11153940.0.0.430a5c88eVuDyG

DataFlow 还有不少可以大书特书的功能特点,但在这章内容构成来看,我认为 DataFlow 最重要的是构建了一套批流统一的大数据处理模型。DataFlow 为我们提供了一套全面的处理无界且无序数据集的能力,同时这套系统很好的平衡了正确性、延迟、成本之间的相互关系。

4.5 flink

引用自《Streaming System》,Flink 崛起有两个主要原因:

  • 采用 Dataflow/Beam 编程模型,使其成为完备语义功能的开源流式处理系统。

  • 其高效的快照实现方式,源自 Chandy 和 Lamport 的原始论文《“Distributed Snapshots: Determining Global States of Distributed Systems”》的研究,这为其提供了正确性所需的强一致性保证。

Distributed Snapshots: Determining Global States of Distributed Systems:https://lamport.azurewebsites.net/pubs/chandy.pdf

通过快照机制,Flink 获得了端到端数据一致性。Flink 更进了一步,利用其快照的全局特性,提供了从过去的任何一点重启整个管道的能力,这一功能称为 SavePoint(在 Fabian Hueske 和 Michael Winters 的帖子 [《Savepoints: Turning Back Time》(https://data-artisans.com/blog/turning-back-time-savepoints)] 中有所描述)。Savepoints 功能参考了 Kafka 应用于流式传输层的持久化和可重放特性,并将其扩展应用到整个底层 Pipeline。流式处理仍然遗留大量开放性问题有待优化和提升,但 Flink 的 Savepoints 功能是朝着正确方向迈出的第一步,也是整个行业非常有特点的一步。 如果您有兴趣了解有关 Flink 快照和保存点的系统构造的更多信息,请参阅《State Management in Apache Flink》(http://www.vldb.org/pvldb/vol10/p1718-carbone.pdf)论文详细讨论了相关的实现。

除了保存点之外,Flink 社区还在不断创新,包括将第一个实用流式 SQL API 推向大规模分布式流处理引擎的领域, 总之,Flink 的迅速崛起成为流计算领军角色主要归功于三个特点:

  • 整合行业里面现有的最佳想法(例如,成为第一个开源 DataFlow/Beam 模型)

  • 创新性在表上做了大量优化,并将状态管理发挥更大价值,例如基于 Snapshot 的强一致性语义保证,Savepoints 以及流式 SQL。

  • 迅速且持续地推动上述需求落地。

另外,所有这些改进都是在开源社区中完成的,我们可以看到为什么 Flink 一直在不断提高整个行业的流计算处理标准。

4.7 Beam

Beam主要是编程模型,API 设计和可移植层,而不是带有执行引擎的完整系统栈,正如 SQL 作为声明性数据处理的通用语言一样,Beam 的目标是成为程序化数据处理的通用语言。

4.7 回顾及展望

https://www.iteblog.com/archives/2430.html

摘自《Streaming System》:

  • MapReduce:可扩展性和简单性 通过在强大且可扩展的执行引擎之上提供一组简单的数据处理抽象,MapReduce 让我们的数据工程师专注于他们的数据处理需求的业务逻辑,而不是去构建能够适应在一大堆普通商用服务器上的大规模分布式处理程序。

  • Hadoop:开源生态系统 通过构建一个关于 MapReduce 的开源平台,无意中创建了一个蓬勃发展的生态系统,其影响力所及的范围远远超出了其最初 Hadoop 的范围,每年有大量的创新性想法在 Hadoop 社区蓬勃发展。

  • Flume:管道及优化 通过将逻辑流水线操作的高级概念与智能优化器相结合,Flume 可以编写简洁且可维护的 Pipeline,其功能突破了 MapReduce 的 Map→Shuffle→Reduce 的限制,而不会牺牲性能。

  • Storm:弱一致性,低延迟 通过牺牲结果的正确性以减少延迟,Storm 为大众带来了流计算,并开创了 Lambda 架构的时代,其中弱一致的流处理引擎与强大一致的批处理系统一起运行,以实现真正的业务目标低延迟,最终一致型的结果。

  • Spark: 强一致性 通过利用强大一致的批处理引擎的重复运行来提供无界数据集的连续处理,Spark Streaming 证明至少对于有序数据集的情况,可以同时具有正确性和低延迟结果。

  • MillWheel:乱序处理 通过将强一致性、精确一次处理与用于推测时间的工具(如水印和定时器)相结合,MillWheel 做到了无序数据进行准确的流式处理。

  • Kafka: 持久化的流式存储,流和表对偶性 通过将持久化数据日志的概念应用于流传输问题,Kafka 支持了流式数据可重放功能。通过对流和表理论的概念进行推广,阐明数据处理的概念基础。

  • Cloud Dataflow:统一批流处理引擎 通过将 MillWheel 的无序流式处理与高阶抽象、自动优化的 Flume 相结合,Cloud Dataflow 为批流数据处理提供了统一模型,并且灵活地平衡正确性、计算延迟、成本的关系。

  • Flink:开源流处理创新者 通过快速将无序流式数据处理的强大功能带到开源世界,并将其与分布式快照及保存点功能等自身创新相结合,Flink 提高了开源流处理的业界标准并引领了当前流式处理创新趋势。

  • Beam: 可移植性 通过提供整合行业最佳创意的强大抽象层,Beam 提供了一个可移植 API 抽象,其定位为与 SQL 提供的声明性通用语言等效的程序接口,同时也鼓励在整个行业中推进创新。

6、数据的存储

关系型数据库

NoSQL

HDFS、HBASE、S3、Cassandra、MongoDB、Redis、Solr、ElasticSearch

Hive

NoSQL的三大基石(CAP、BASE和最终一致性):https://www.cnblogs.com/hanhuilee/p/5221317.html

NoSQL资料汇总:https://www.cnblogs.com/fxjwind/archive/2012/06/13/2548249.html

redis CAP原理:https://www.cnblogs.com/wuyx/p/8647443.html

7、数据的查询

Drill、PresTO、Kylin

Hive

9、数据分析 & 可视化

OLAP

Spark(SQL、Streaming、MLlib、GraphX)

Echarts、Tableau、d3js

10、总结

9、参考资料

大数据全系技术概览:https://blog.csdn.net/mnbvxiaoxin/article/details/104887307

Bigdata资料汇总:https://www.cnblogs.com/fxjwind/p/3535054.html

发布于: 2020 年 05 月 27 日 阅读数: 14
用户头像

BlueblueWings

关注

About 13 billion years 2018.12.10 加入

About 13 billion years

评论

发布
暂无评论
大数据技术概览(持续更新中)