Spark系列之二——一个高效的分布式计算系统

1、什么是Spark?

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MadReduce所具有的优点;但不同于MapReduce的是Job中间输出的结果可以保存在内存中,从而不需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

2、Spark的架构?

Bagel(Pregel on Spark)              Shark(Hive on Spark)          Streaming Spark

Spark

Map Reduce                                        RDD                                            FP

本地运行模式 独立运行模式                    EC2  Mesos                               YARN

HDFS                Amazon S3, Hypertable, HBase, etc

3、Spark与Hadoop的对比?

Spark的中间数据放到内存中,对于迭代运算效率更高。

Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。

Spark比Hadoop更通用。

Spark提供的数据集操作类型有很多种,不想Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap,sample,groupByKey,union,join,cogroup,mapValues,sort,pationBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count,collect,reduce,lookup,save等多种actions操作。

这些多种多样的数据集操作类型,给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。用户可以命名,物化,控制中间结果的存储、分区等。可以说变成模型比Hadoop更灵活。

不过由于RDD的特性,Spark不使用哪种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于哪种增量修改的应用模型不适合。

容错性:

在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用哪种方式来实现容错。

可用性:

Spark通过提供丰富的Scala、Java、Python API及交互式Shell来提高可用性。

4、Spark与Hadoop的结合?

Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行与同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。

5、Spark的适用场景?

Spark是给予内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需去读的数据量越大,受益越大,数据量小但是计算密度较大的场合,受益就相对较小。

由于RDD的特性,Spark不适用哪种异步细粒度更新状态的应用,例如web服务的存储或者是增量的爬虫和索引。就是对于那种增量修改该的应用模型不适合。

总的来说Spark的使用面比较广泛且比较通用。

6、运行模式?

本地模式

Standalone模式

Mesoes模式

yarn模式

7、Spark生态系统?

Shark(Hive on Spark):Shark基本上就是在Spark的框架基础上提供和Hive一样的HiveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapReduce。通过配置Shark参数,Shark可以自动在内存中混村特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。

Spark streaming:构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片段(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面相比于基于Record的其他处理框架(如Storm),RDD数据集更容易做高效的容错处理。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。

Bagel:Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法。

8、在业界的使用?

Spark项目在2009年启动,2010年开园,现在使用的有:Berkeley,Princeton,Klout,Foursquare,Conviva,Quantifind,Yahoo! Research &others,淘宝等,豆瓣也在使用Spark的Python克隆版Dpark。

9、Spark核心概念?

Resilient Distributed Dataset(RDD)弹性分布数据集

RDD是Spark的最基本抽象,是对分布式内存的抽象使用,是吸纳了以操作本地集合的方式来操作分布式数据集的抽象实现。RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行操作的数据结合,不同的数据集格式对应不同的RDD实现。RDD必须是可序列化的。RDD可以cache到内存中,每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。这对于迭代运算比较常见的机器学习算法,交互式数据挖掘来说,效率提升比较大。

时间: 2024-08-03 21:09:10

Spark系列之二——一个高效的分布式计算系统的相关文章

Spark:一个高效的分布式计算系统

http://tech.uc.cn/?p=2116 概述 什么是Spark Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点:但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法.其架构如下图所示: Sp

Spark:一个高效的分布式计算系统--转

原文地址:http://soft.chinabyte.com/database/431/12914931.shtml 概述 什么是Spark ◆ Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机

Parallel Python——一个简易的分布式计算系统

如何搭建一个快速的分布式计算平台?Parallel python提供了简易的方式来实现此目的. Parallel Python(http://www.parallelpython.com/content/view/15/30/#QUICKCLUSTERS)是Python进行分布式计算的开源模块,能够将计算压力分布到多核CPU或集群的多台计算机上,能够非常方便的在内网中搭建一个自组织的分布式计算平台. 在不同节点运行服务器程序,并自动发现运行服务器的节点,命令如下: node-1> ./ppser

Spark系列(二) Spark Shell各种操作及详细说明

并行化scala集合(Parallelize) //加载数据1~10 val num=sc.parallelize(1 to 10) //每个数据项乘以2,注意 _*2记为一个函数(fun) val doublenum = num.map(_*2) //内存缓存数据 doublenum.cache() //过滤数据,每个数据项 % 3 为0的数据为结果集: val threenum = doublenum.filter(_ % 3 == 0) //释放缓存 threenum.unpersist(

Parallel Python——一个简单的分布式计算系统

如何建立一个高速的分布式计算平台?Parallel python此目的. Parallel Python(http://www.parallelpython.com/content/view/15/30/#QUICKCLUSTERS)是Python进行分布式计算的开源模块.可以将计算压力分布到多核CPU或集群的多台计算机上.可以很方便的在内网中搭建一个自组织的分布式计算平台. 在不同节点执行server程序,并自己主动发现执行server的节点.命令例如以下: node-1> ./ppserve

高效分布式计算系统:Spark

一. 什么是Spark? Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点:但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法.其架构如下图所示: 二.Spark与Hadoop的对比 Spark的中间数

容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析

摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark + OSS on ACK,允许Spark分布式计算节点对阿里云OSS对象存储的直接访问. 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark + OSS on

分布式理论系列(二)2PC 到 3PC 到 Paxos 到 Raft 到 Zab

分布式理论系列(二)2PC 到 3PC 到 Paxos 到 Raft 到 Zab 本文介绍一致性实现的几种方案: 2PC 到 3PC 到 Paxos 到 Raft 到 Zab 两类一致性(操作原子性与副本一致性) 2PC 3PC 协议用于保证属于多个数据分片上的操作的原子性.这些数据分片可能分布在不同的服务器上,2PC 协议保证多台服务器上的操作要么全部成功,要么全部失败. Paxos Raft Zab 协议用于保证同一个数据分片的多个副本之间的数据一致性.当这些副本分布到不同的数据中心时,这个

Android:一个高效的UI才是一个拉风的UI(二)

趁今晚老大不在偷偷早下班,所以有时间继续跟大伙扯扯UI设计之痛,也算一个是对上篇<Android:一个高效的UI才是一个拉风的UI(一)>的完整补充吧.写得不好的话大家尽管拍砖~(来!砸死我把~) 前言 前篇博客翻箱倒柜的介绍了优化UI设计的两个方法,第一个就是使用尽量少的组件来实现布局功能,第二个就是使用<meger>标签来减少不必要的根节点,这两个方法都可以提高应用UI的运行效率,但是够了吗?远远是不够的,方法就像money一样永远不嫌多,所以不再介绍多一些UI设计优化的方法说