很多人问阿里的飞天大数据平台、云梯 2、MaxCompute、实时计算到底是什么,和自建 Hadoop 平台有什么区别。
先说 Hadoop
什么是 Hadoop?
Hadoop 是一个开源、高可靠、可扩展的分布式大数据计算框架系统,主要用来解决海量数据的存储、分析、分布式资源调度等。Hadoop 最大的优点就是能够提供并行计算,充分利用集群的威力进行高速运算和存储。
Hadoop 的核心有两大板块:HDFS 和 MapReduce。
HDFS 全称 Hadoop Distributed File System,是一种分布式文件存储系统。分布式文件系统是指将固定于某个地点的某个文件系统,扩展到任意多个文件系统,众多的节点组成一个文件系统网络。每个节点可以分布在不同的地点,通过网络进行节点间的通信和数据传输。人们在使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。HDFS 有着高容错性,可以部署在低廉的硬件;提供高吞吐量来访问应用程序的数据;可以有效解决超大数据量存储和管理难题的分布式文件系统属性的特点。因此 HDFS 天然适合有着超大数据集的应用程序,或者说本身就是为超大规模数据量处理的应用程序而设计的。
MapReduce 是一个分布式离线并行计算框架,能够对大数据集进行并行处理。MapReduce 就是将一个超大规模计算量的任务或者说数据量分割成无数小的计算任务与计算文件,然后再将计算结果进行合并的过程。MapReduce 主要分为 Map 和 Reduce 两个阶段。Map 是计算阶段,计算足够小的计算任务。Reduce 是汇总阶段,将 map 阶段的计算结果汇总合并起来。
Hadoop 的初始版本或者说核心就是这两大板块:HDFS 为海量数据提供了存储,而 MapReduce 为海量数据提供了计算框架。
Hadoop 的历史
1998 年 9 月 4 日,Google 公司在美国硅谷成立。
与此同时,一位名叫 Doug Cutting 的美国工程师,也迷上了搜索引擎。他做了一个用于文本搜索的函数库,命名为 Lucene。Lucene 是用 JAVA 写成的,因为好用而且开源,非常受程序员们的欢迎。
2001 年底,Lucene 成为 Apache 软件基金会 jakarta 项目的一个子项目。
2004 年,Doug Cutting 在 Lucene 的基础上和 Apache 开源伙伴 Mike Cafarella 合作开发了一款开源搜索引擎,命名为 Nutch。Nutch 是一个建立在 Lucene 核心之上的网页搜索应用程序,类似于 Google。
随着时间的推移,互联网发展迅速,数据量暴增,搜索引擎需要检索的对象的数据量也在不断增大。尤其是 Google,需要不断优化自己的搜索算法,提升搜索效率。在这个过程中 Google 提出了不少的新方法与思路。
2003 年,Google 发表了一篇技术学术论文,公开了自己的谷歌文件系统 GFS(Google File System)。这是 Google 公司为了存储海量搜索数据而设计的专用文件系统。
第二年,2004 年,Doug Cutting 基于 Google 的 GFS 论文,实现了分布式文件存储系统,并将它命名为 NDFS(Nutch Distributed File System)。
2004 年,Google 又发表了一篇技术学术论文,公开了自己的 MapReduce 编程模型。MapReduce 用于大规模数据集的并行分析运算。
第二年,2005 年,Doug Cutting 又基于 MapReduce,在 Nutch 搜索引擎实现了大规模数据集的并行分析运算。
2006 年,Doug Cutting 将 NDFS 和 MapReduce 进行了升级改造,并重新命名为 Hadoop。NDFS 也改名为 HDFS(Hadoop Distributed File System)。
此后,大名鼎鼎的大数据框架系统——Hadoop 诞生。而 Doug Cutting 也被人们称为 Hadoop 之父。
所以说 Hadoop 的核心就两大部分:为大数据提供存储的 HDFS 和为大数据计算的 MapReduce。
HDFS 与 MapReduce 的核心工作原理
HDFS
HDFS 主要有两个角色:NameNode、DataNode 和 Client。
NameNode 是 HDFS 的守护程序,也是是 Master 节点,主节点。NameNode 中会存储文件的元数据信息,记录文件是如何分割成数据块的,以及这些数据块被存储到哪些节点上,可以对内存和 I / O 进行集中管理。NameNode 单点在发生故障时将使集群崩溃。
DataNode 是 Slave 节点,从节点。DataNode 负责把 HDFS 数据块读写到本地文件系统,是真正存储文件的节点。一个文件会被切割成一个或者多个 block 块,这些 block 块会被存储在一系列的 DataNode 节点中,并且每一个块可能会在多个 DataNode 上存在备份。
Client:用户与 HDFS 的桥梁。主要用于切分用户提交的文件,与 NameNode 交互,获得文件位置信息。然后直接与 DataNode 交互,读取和写入数据。
HDFS 写入流程(参考的现有文档):
1、用户向 Client(客户机)提出请求。例如,需要写入 200MB 的数据。
2、Client 制定计划:将数据按照 64MB 为块,进行切割;所有的块都保存三份。
3、Client 将大文件切分成块(block)。
4、针对第一个块,Client 告诉 NameNode(主控节点),请帮助我,将 64MB 的块复制三份。
5、NameNode 告诉 Client 三个 DataNode(数据节点)的地址,并且将它们根据到 Client 的距离,进行了排序。
6、Client 把数据和清单发给第一个 DataNode。
7、第一个 DataNode 将数据复制给第二个 DataNode。
8、第二个 DataNode 将数据复制给第三个 DataNode。
9、如果某一个块的所有数据都已写入,就会向 NameNode 反馈已完成。
10、对第二个 Block,也进行相同的操作。
11、所有 Block 都完成后,关闭文件。NameNode 会将数据持久化到磁盘上。
HDFS 读取流程:
1、用户向 Client 提出读取请求。
2、Client 向 NameNode 请求这个文件的所有信息。
3、NameNode 将给 Client 这个文件的块列表,以及存储各个块的数据节点清单(按照和客户端的距离排序)。
4、Client 从距离最近的数据节点下载所需的块。
MapReduce
MapReduce 主要也有两个角色:JobTracker 和 TaskTracker。
JobTracker,类似于 NameNode。JobTracker 是 Hadoop 集群中惟一负责控制 MapReduce 应用程序的系统,位于 Master 节点上。在用户计算作业的应用程序提交之后,JobTracker 决定有哪些文件参与处理,使用文件块信息确定如何创建其他 TaskTracker 从属任务,同时监控 task 并且于不同的节点上重启失败的 task。TaskTracker 位于 slave 从节点上与 dataNode 结合管理各自节点上由 jobtracker 分配的 task,每个节点只有一个 tasktracker, 但一个 tasktracker 可以启动多个 JVM,用于并行执行 map 或 reduce 任务。每个 TaskTracker 将状态和完成信息报告给 JobTracker。
(实际上 MapReduce 计算逻辑非常复杂,以上只是简化描述)
HDFS 和 MapReduce 的组合只是 Hadoop 的 1.0 版本,这个版本有一些比较大的缺陷:
1、可伸缩性问题:JobTracker 负载较重,JobTracker 必须不断跟踪数千个 TaskTracker、数百个作业,以及数万个 map 和 reduce 任务。相反,TaskTracker 通常只运行十来个任务。JobTracker 存在单点故障,成为性能瓶颈。
2、可靠性差,NameNode 只有一个,万一挂掉,整个系统就会崩溃。
为了解决一些问题,2012 年 5 月,Hadoop 推出了 2.0 版本。
2.0 版本中,在 HDFS 与 MapReduce 之间,增加了 YARN 资源管理框架层。
YARN 全称 Yet Another Resource Negotiator 是一个资源管理模块, 负责整个集群资源的管理和调度,例如对每个作业,分配 CPU,内存等等,都由 yarn 来管理。它的特点是扩展性,容错性,多框架资源统一调度。区别于 hadoop1.0 只支持 MapReduce 作业,yarn 之上可以运行不同类型的作业。很多应用都可以运行在 yarn 之上,由 yarn 统一进行调度。
YARN 的运行原理:
YARN 的一个基本思想是讲资源管理和作业调度 / 监视的功能分解为独立的守护进程。其思想是有一个全局的 ResourceManager (RM) 和每一个应用的 ApplicationMaster (AM)。一个应用可以是单个的 job,也可以是一组 job。
YARN 框架由 ResourceManager 节点和 NodeManager 组成。ResourceManager 具有着应用系统中资源分配的最终权威。NodeManager 是每台机器的一个框架代理,监控每台机器的资源使用情况(cpu、内存、磁盘、网络),同时上报给 ResourceManager。每一个应用的 ApplicationMaster 是一个框架特定的库,它的任务是向 ResourceManager 协调资源并与 NodeManager 一起执行监视任务。
从流程上来说:当用户提交了一个计算任务,ResourceManager 首先会在一个 NodeManager 为这个任务生成一个 ApplicationMaster 作为任务的管理者,ApplicationMaster 向 ResourceManager 申请所需要的资源,ResourceManager 会告诉 NodeManager 分配资源,NodeManager 分配资源来供任务进行计算。NodeManager 在不断的向 ResourceManager 汇报资源使用情况。
其实 MapReduce 与 HDFS 并不是一定要互相耦合工作的,两个都可以彼此独立工作,MapReduce 也可以连接本地文件服务来进行计算,但是他们互相配合的时候才能发挥出最大的能力。
大数据架构体系——Hadoop 生态系统
目前业界内最流行的大数据架构体系就是 Hadoop 的生态系统。目前,包括 Yahoo、IBM、Facebook、亚马逊、阿里巴巴、华为、百度、腾讯等公司,都采用 Hadoop 构建自己的大数据系统,当然,是在 Hadoop 的基础上进行二次开发。
Hadoop 生态系统是指以大数据分布式存储 (HDFS),分布式计算(MapReduce) 和资源调度 (YARN) 为基础联合其他各种组件在内的一整套软件。Hadoop 生态系统的每一个子系统只解决某一个特定的问题域。不是一个全能系统,而是多个小而精的系统。
在这之前有个插曲:
2006 年,Google 又发论文了。这次,Google 介绍了自己的 BigTable,一种分布式数据存储系统,用来处理海量数据的非关系型数据库。
于是 Doug Cutting 在自己的 Hadoop 系统里面又引入了 BigTable,并命名为 HBase。
简单介绍 Hadoop 生态系统的主要构成组件:
HDFS: 基础的文件系统,Hadoop 分布式文件系统
MapReduce:并行计算框架,运行在 Yarn 之上
HBase: 类似 Google BigTable 的分布式 NoSQL 列分布式数据库。适用于实时快速查询的场景。
Hive:数据仓库工具。处理的是海量结构化日志数据的统计问题。可以将结构化的数据文件映射为一张数据库表,通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。
Zookeeper:分布式协调服务,“动物园管理员”角色,是一个对集群服务进行管理的框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度。
Pig: 一个基于 Hadoop 的大规模数据分析工具,该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运算。
Sqoop:在 Hadoop 与传统的数据库间进行数据的传递。
Mahout:一个可扩展的机器学习和数据挖掘库,实现了很多数据挖掘的经典算法,帮助用户很方便地创建应用程序。
Oozie/Azkaban:一个工作流调度引擎,用来处理具有依赖关系的作业调度。
Presto/Kylin:一个交互式的查询引擎,实现低延时查询。
Flume:日志收集框架。将多种应用服务器上的日志,统一收集到 HDFS 上,这样就可以使用 hadoop 进行处理
对于大数据领域最早的应用者阿里巴巴对大数据的研究是一直走在前列的。感兴趣的用户可以看看一本书:《阿里巴巴大数据之路》书中很详细的介绍了阿里巴巴的整体大数据架构。
阿里巴巴飞天大数据平台是在开源 Hadoop 的基础上自研的一套体系,这种 Serverless 大数据服务成为当下主流趋势,可以减少企业本地服务器部署压力,显著提升企业工作效率的同时减少了企业在开发和人力方面的成本投入,让企业能更专注于业务发展,培养更多面向业务的技术人员。
7 月 25 日,阿里云飞天大数据平台亮相阿里云峰会上海站,拥有中国唯一自主研发的计算引擎,是全球集群规模最大的计算平台,最大可扩展至 10 万台计算集群,支撑海量数据存储和计算。
阿里巴巴飞天大数据架构体系的主要组件 / 产品介绍:
MaxCompute(ODPS):阿里云大数据计算服务,它能提供快速、完全托管的 PB 级数据仓库解决方案,使您可以经济并高效的分析处理海量数据。https://www.aliyun.com/product/odps
Realtime Compute:实时计算(Alibaba Cloud Realtime Compute,Powered by Ververica)是阿里云提供的基于 Apache Flink 构建的企业级大数据计算平台。在 PB 级别的数据集上可以支持亚秒级别的处理延时,赋能用户标准实时数据处理流程和行业解决方案;支持 Datastream API 作业开发,提供了批流统一的 Flink SQL,简化 BI 场景下的开发;可与用户已使用的大数据组件无缝对接,更多增值特性助力企业实时化转型。https://data.aliyun.com/product/sc
GraphCompute:支持千亿规模(关系网络)图的可视化建模、自动并行化 Gremlin 毫秒级查询和自定义算法的一站式图分析平台;
Elasticsearch:提供 100% 兼容开源 Elasticsearch 的功能,以及 Security、Machine Learning、Graph、APM 等商业功能,致力于数据分析、数据搜索等场景服务。与开源社区背后商业公司 Elastic 战略合作,为客户提供企业级权限管控、安全监控告警、自动报表生成等场景服务。https://data.aliyun.com/product/elasticsearch
OpenSearch:开放搜索(OpenSearch)是阿里巴巴自主研发的大规模分布式搜索引擎平台,其核心引擎 HA3(问天 3)系统为包括淘宝、天猫在内的阿里集团核心业务提供搜索服务支持。通过集成智能查询语义理解、机器学习排序算法等能力,旨在为企业提供高搜索质量的一站式内容智能搜索服务。https://www.aliyun.com/product/opensearch
DataX(CDP):阿里云数据集成(Data Integration)是阿里集团对外提供的可跨异构数据存储系统的、可靠、安全、低成本、可弹性扩展的数据同步平台,为 400 对数据源提供不同网络环境下的全量 / 增量数据进出通道。https://www.aliyun.com/product/cdp
Hologres:阿里云交互式分析(Hologres)是一款兼容 PostgreSQL 协议的实时交互式分析产品。交互式分析与大数据生态无缝打通,支持对 PB 级数据进行高并发、低延时的分析处理,让您轻松而经济地使用现有 BI 工具对数据进行多维分析透视和业务探索。https://www.aliyun.com/product/hologram
机器学习:阿里云机器学习平台 PAI(Platform of Artificial Intelligence),为传统机器学习和深度学习提供了从数据处理、模型训练、服务部署到预测的一站式服务。https://data.aliyun.com/product/learn
智能推荐:(Artificial Intelligence Recommendation,简称 AIRec)基于阿里巴巴领先的大数据和人工智能技术,结合在电商、内容、新闻、视频直播和社交等多个行业领域的积累,为全球企业及开发者提供个性化推荐服务。https://www.aliyun.com/product/airec
Dataworks(D2):DataWorks 是一个提供了大数据 OS 能力、并以 all in one box 的方式提供专业高效、安全可靠的一站式大数据智能云研发平台。同时能满足用户对数据治理、质量管理需求,赋予用户对外提供数据服务的能力。https://data.aliyun.com/product/ide
DQC:数据质量是支持多种异构数据源的质量校验、通知、管理服务的一站式平台。数据质量依托 DataWorks 平台,为您提供全链路的数据质量方案,包括数据探查、数据对比、数据质量监控、SQL 扫描和智能报警等功能。数据质量监控可以全程监控数据加工流水线,根据质量规则及时发现问题,并通过报警通知负责人及时处理。https://help.aliyun.com/document_detail/73660.html
Apsara Core:阿里巴巴大数据计算平台 MaxCompute 计算层(飞天内核);https://baike.baidu.com/item/%E9%A3%9E%E5%A4%A9/19964003
伏羲:阿里云飞天大数据系统内核的分布式资源调度系统;https://yq.aliyun.com/articles/66954
女娲:阿里云飞天大数据系统内核的分布式一致性协同服务系统;https://yq.aliyun.com/articles/65226
盘古:阿里云飞天大数据系统内核的分布式文件储存系统;https://yq.aliyun.com/articles/64374
原文链接
本文为 CSDN 博主「wwdede」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。