大数据计算框架Hadoop, Spark和MPI
转自:https://www.cnblogs.com/reed/p/7730338.html
今天做题,其中一道是
请简要描述一下Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什么样的场景。
一直想对这些大数据计算框架总结一下,只可惜太懒,一直拖着。今天就借这个机会好好学习一下。
一张表
| 名称 | 发起者 | 语言 | 简介 | 特点 | 适用场景 |
|---|---|---|---|---|---|
| Hadoop | Yahoo工程师,Apache基金会 | Java | MapReduce分布式计算框架+HDFS分布式文件系统(GFS)+HBase数据存储系统(BigTable) 数据分布式存储在磁盘各个节点,计算时各个节点读取存储在自己节点的数据进行处理 |
高可靠(Hadoop按位存储) 高扩展(在可用的计算机集群间分配数据并完成计算任务,可以方便的扩展到数千个节点上) 高效(能在节点间动态的移动数据,保证节点的平衡)计算向存储迁移 高容错,通过数据备份应对节点失效 |
离线大批量数据处理; 不需要多次迭代 |
| Spark | UC Berkley AMP Lab,Apache基金会 | Scala | 基于内存计算的并行计算框架 使用内存来存储数据,RDD(弹性分布式数据集) 用户可以指定存储策略,当内存不够的时候可以放到磁盘上 |
轻量级快速处理(减少磁盘IO,用RDD在内存中存储数据,需要持久化时才到磁盘) 支持多种语言 支持复杂查询(SQL查询、流式查询、复杂查询) 实时流处理(Spark Streaming) |
离线快速的处理,不能用于处理需要长期保存的数据; 适用于多次迭代的计算模型(机器学习模型) |
| Storm | BackType团队,Twitter,Apache基金会 | Java, clojure | 不进行数据的收集和存储工作,直接通过网络实时的接受数据并且实时的处理数据,然后直接通过网络实时传回结果 | 全内存计算,实时处理大数据流 | 在线的实时处理,基于流 |
| MPI | 基于消息传递的并行计算框架 MPI从数据存储节点读取需要处理的数据分配给各个计算节点=>数据处理=>数据处理 |
数据存储和数据处理是分离的 用计算换通信 无法应对节点失效 |
各种复杂应用的并行计算。支持MPMD(多程序多数据),开发复杂度高 |
Hadoop
Hadoop就是解决了大数据的可靠存储和处理。现在的Hadoop主要包含两个框架
- 大规模存储系统HDFS:在由普通PC组成的集群上提供高可靠的文件存储,通过将块保存成多个副本的办法来解决服务器或硬盘坏掉的问题。以低功耗、高性能的方式储存数据,并且能优化大数据的种类和读取速度。
- 计算引擎YARN:可以承载任何数量的程序框架,原始的框架是MR,通过Mapper和Reduccer的抽象提供一个编程模型,可以在一个或上百个PC组成的不可靠集群上并发的、分布式的处理大量数据集,而把并发、分布式和故障恢复等计算细节隐藏起来。
Hadoop的局限和不足
抽象层次低,需要手工编写代码来完成,使用上难以上手。
只提供两个操作,Map和Reduce,表达力欠缺。
一个Job只有Map和Reduce两个阶段(Phase),复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的。
处理逻辑隐藏在代码细节中,没有整体逻辑
中间结果也放在HDFS文件系统中
ReduceTask需要等待所有MapTask都完成后才可以开始
时延高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够
对于迭代式数据处理性能比较差
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Spark
Apache Spark是一个新兴的大数据处理的引擎,主要特点是提供了一个集群的分布式内存抽象,以支持需要工作集的应用。
这个抽象就是RDD(Resilient Distributed Dataset),RDD就是一个不可变的带分区的记录集合,RDD也是Spark中的编程模型。Spark提供了RDD上的两类操作,转换和动作。转换是用来定义一个新的RDD,包括map, flatMap, filter, union, sample, join, groupByKey, cogroup, ReduceByKey, cros, sortByKey, mapValues等,动作是返回一个结果,包括collect, reduce, count, save, lookupKey。
在Spark中,所有RDD的转换都是是惰性求值的。RDD的转换操作会生成新的RDD,新的RDD的数据依赖于原来的RDD的数据,每个RDD又包含多个分区。那么一段程序实际上就构造了一个由相互依赖的多个RDD组成的有向无环图(DAG)。并通过在RDD上执行动作将这个有向无环图作为一个Job提交给Spark执行。
Spark对于有向无环图Job进行调度,确定阶段(Stage),分区(Partition),流水线(Pipeline),任务(Task)和缓存(Cache),进行优化,并在Spark集群上运行Job。RDD之间的依赖分为宽依赖(依赖多个分区)和窄依赖(只依赖一个分区),在确定阶段时,需要根据宽依赖划分阶段。根据分区划分任务。
Spark支持故障恢复的方式也不同,提供两种方式,Linage,通过数据的血缘关系,再执行一遍前面的处理,Checkpoint,将数据集存储到持久存储中。
Spark为迭代式数据处理提供更好的支持。每次迭代的数据可以保存在内存中,而不是写入文件。
那么Spark解决了Hadoop的哪些问题呢?
抽象层次低,需要手工编写代码来完成,使用上难以上手。
=>基于RDD的抽象,实数据处理逻辑的代码非常简短。。
只提供两个操作,Map和Reduce,表达力欠缺。
=>提供很多转换和动作,很多基本操作如Join,GroupBy已经在RDD转换和动作中实现。
一个Job只有Map和Reduce两个阶段(Phase),复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的。
=>一个Job可以包含RDD的多个转换操作,在调度时可以生成多个阶段(Stage),而且如果多个map操作的RDD的分区不变,是可以放在同一个Task中进行。
处理逻辑隐藏在代码细节中,没有整体逻辑
=>在Scala中,通过匿名函数和高阶函数,RDD的转换支持流式API,可以提供处理逻辑的整体视图。代码不包含具体操作的实现细节,逻辑更清晰。
中间结果也放在HDFS文件系统中
=>中间结果放在内存中,内存放不下了会写入本地磁盘,而不是HDFS。
ReduceTask需要等待所有MapTask都完成后才可以开始
=> 分区相同的转换构成流水线放在一个Task中运行,分区不同的转换需要Shuffle,被划分到不同的Stage中,需要等待前面的Stage完成后才可以开始。
时延高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够
=>通过将流拆成小的batch提供Discretized Stream处理流数据。
对于迭代式数据处理性能比较差
=>通过在内存中缓存数据,提高迭代式计算的性能。
大数据计算框架Hadoop, Spark和MPI的更多相关文章
- 大数据开发,Hadoop Spark太重?你试试esProc SPL
摘要:由于目标和现实的错位,对很多用户来讲,Hadoop成了一个在技术.应用和成本上都很沉重的产品. 本文分享自华为云社区<Hadoop Spark太重,esProc SPL很轻>,作者: ...
- 学习大数据基础框架hadoop需要什么基础
什么是大数据?进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB(1 ...
- 小白入门AI教程:教你快速搭建大数据平台『Hadoop+Spark』
Apache Spark 简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎.Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源 ...
- 大数据入门第二十二天——spark(一)入门与安装
一.概述 1.什么是spark 从官网http://spark.apache.org/可以得知: Apache Spark™ is a fast and general engine for larg ...
- 坐实大数据资源调度框架之王,Yarn为何这么牛
摘要:Yarn的出现伴随着Hadoop的发展,使Hadoop从一个单一的大数据计算引擎,成为大数据的代名词. 本文分享自华为云社区<Yarn为何能坐实资源调度框架之王?>,作者: Java ...
- Spark 介绍(基于内存计算的大数据并行计算框架)
Spark 介绍(基于内存计算的大数据并行计算框架) Hadoop与Spark 行业广泛使用Hadoop来分析他们的数据集.原因是Hadoop框架基于一个简单的编程模型(MapReduce),它支持 ...
- 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
http://www.csdn.net/article/2014-06-05/2820089 摘要:MapReduce在实时查询和迭代计算上仍有较大的不足,目前,Spark由于其可伸缩.基于内存计算等 ...
- 大数据计算平台Spark内核解读
1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着 Spark在大数据计算领域的暂露头角,越来越多 ...
- 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)
大数据时代之hadoop(一):hadoop安装 大数据时代之hadoop(二):hadoop脚本解析 大数据时代之hadoop(三):hadoop数据流(生命周期) 大数据时代之hadoop(四): ...
随机推荐
- 深入理解python装饰器
写在前面,参考文章链接: 1.博客园(https://www.cnblogs.com/everzin/p/8594707.html) 2.公众号文章 装饰器是什么,什么时候会用到装饰器呢? 写代码要遵 ...
- js变量类型和计算
# js入门基础-变量类型和计算 ` --首先由于我使用了一个不太合格的markdown来编写来文章,所以在移动端阅读不要太方便,建议移动端使用横屏模式或pc端阅读,当然如果你有平板那是最好的. -- ...
- Maven - pom中的<repository> <pluginRepositories>
总结: <repository> 允许我们可以在POM中配置其它的远程仓库.这样做的原因有很多,比如你有一个局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖 ...
- L2-005 集合相似度 (25 分) (STL——set)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070149828608 题目: 给定两个整数集合,它们的相似度 ...
- Linux启动activemq失败
第一种情况: 在网上查找错误,通过./activemq console命令可以查看到activemq启动的错误信息,另外在data/activemq.log文件中可以查看到错误日志. java.io. ...
- windows 安装docker报错:Error checking TLS connection: ssh command error: command : ip addr show
今天安装docker部署的时候总是再报这个错误. 报错的原因是初始化的时候出错了. 在docker 安装目录下有一个文件,如下图所示 将它复制到你电脑用户名目录下生成.docker 的文件夹中,如下图 ...
- Linux禁止ping、开启ping设置
Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 具体的配置方法如 ...
- TLS详解
TLS加密通信, 开始使用协商的秘钥进行加密通信 1.服务器也可以要求验证客户端,即实现双向的验证, 2.会话缓存握手过程,为了建立握手的速度,减少协议带来的性能方面的降低和资源方面的消耗,TLS协议 ...
- Python中的命名空间概念
python使用命名空间记录变量.python中的命名空间就像是一个dict,key是变量的名字,value是变量的值. python中,每个函数都有一个自己的命名空间,叫做local namespa ...
- C++智能指针剖析(上)std::auto_ptr与boost::scoped_ptr
1. 引入 C++语言中的动态内存分配没有自动回收机制,动态开辟的空间需要用户自己来维护,在出函数作用域或者程序正常退出前必须释放掉. 即程序员每次 new 出来的内存都要手动 delete,否则会造 ...