Apache顶级项目介绍6 - Spark

火花四溢,热情洋溢。极客朋友么知道,我们翘首以盼的Spark来了。

提及Spark, 这几年如日中天,谈到大数据如果不提及Spark, Hadoop,就好比这年代带耳机不是2B的,你都不好意思带。Spark最初由加州大学伯克利分校(太屌的大学,出了多少名人,名作啊)的AMPLab Matei为主的小团队使用Scala开发,其核心代码只有63个Scala文件(早期版本,这里提及一下Scala语言又是一个创时代的大作,有人说它太锋利,有人说它太妖魔)。

Spark作者Matei:

Spark于2010年才成为Apache开源项目之一。经过短短几年的发展,尤其是在2014年很多知名重量级公司如IBM, Cloudera等大力支持,到如今已经是登峰造极,在大数据并行计算,MapReduce领域,完全无人能及其只右,甚至已然代替了Hadoop的MapReduce模块,以及到后来Hadoop也只好把Spark作为其生态重要的一部分作为介绍。

老样子,看看Spark官方如何介绍吧:

Spark官网是作者比较喜欢的风格,虽说没有后来Docker那么cool,但简单,清新,美观,有图有真相,显然看起来是一个产品,不像Hadoop的官网,这个...

Spark是一个高速,通用大数据计算处理引擎。简单明了,低调中包涵了野心。

官网继续介绍亮点:

1. 速度快,Spark直接上数据,超过Hadoop内存MapReduce速度100+以上,又或者磁盘MapReduce速度10+以上。why?Spark拥有高级DAG(有向无环图)引擎支持数据循环利用,多步数据管道以及in-memory computing。

其实Spark用到了减少IO以及其精华RDD。其实我们在上一篇介绍Hadoop的时候提到了虽然MR
v2解决了MR v1的一些问题,但是由于其对HDFS的频繁操作(包涵了计算临时结果持久化,数据备份以及shuffle等)导致了磁盘I/O成为系统瓶颈,因而只适用于离线数据处理,无法支持大规模实时数据处理能力,从而也为其埋下了重大隐患,被Spark乘胜追击。

2.易用性,支持Java,
Scala, Python, R. 简单,高效。还记得我们介绍

hadoop的时候提到案例word count,spark只用下面2行甚至可以简化到1行代码就实现hadoop几十,上百行的功能,不得感慨其之强大,这里提一下之所以着么简单是得益于函数式编程以及RDD.

3.功能强大,涵盖数据各个领域: SQL, Streaming, Analytics, Machine

Learning, Graph X, 野心勃勃,一统大数据江山。

4.兼容各大生态圈,可以运行在Hadoop,
Mesos单机或者云端。同时支持访问多种多样的数据源:HDFS, Cassandra, HBase, S3.

可以看出,Spark的团队除了包涵技术大拿,还有顶级的宣传广告达人,看完了这些介绍,你想不用Spark都难。换句话说,Spark提供了一站式大数据解决方案:

Spark目前官方稳定版本为1.6于2016年3月9日发布,当然激动人心的大版本2.x正在紧锣密鼓中,我们下面也会提到其新特性。

下面开始介绍一些核心模块。

架构图如下:

如果我们在缩放一下的化看spark的设计架构:

RDD(Resilient
Distributed Dataset):

我们首先介绍其最核心的RDD(Resilient Distributed Dataset), 中文翻译叫弹性分布式数据集,Spark将数据存储在不同分区上的RDD之中。RDD最初思想源于Matei Zaharia自己发表的研究论文。

官方抽象介绍,RDD是一个支持容错,可以用于并行计算的数据集。够抽象!

其核心是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集,并且已经被Partition。不同的数据集格式对应不同的RDD实现。RDD要支持分布式必然要可序列化,并默认缓存到内存中(如果内存不足,也可以存储于磁盘)。每次RDD数据集的操作后的结果,都存放到内存中,并且可以作为下一个操作的源。这样省去了MR的大量磁盘读写,效率提升至秘籍。说起来容易,这可是Spark最核心之一啊。
另外,其主要特点包括,RDD可以重新安排计算并优化数据处理过程;具有重建RDD和重新计算的容错性;RDD是不可变的,我们可以修改RDD,但修改后的Transformation是一个新的RDD, 原有的

RDD保持不变。这么设计显然是为了支持高并发。

值得一提的是,RDD的存储级别还包涵,useDisk, useMemory, deserialized, replication, useOfHeap等等12种,其中OFF_HEAP被保存在Tachyon(一个基于内存的分布式文件系统,潜力巨大)。

Spark提供两种主要方法创建一个RDD: Parallelizing an existing collection OR External Dataset, i.e. HDFS, HBase etc.

1> Parallelizing an existing collection.

2> External Dataset, i.e. from HDFS File (这个路径必须可以被所有工作节点访问)

以上两种方法看起来都很简单直接。一旦你有了RDD, 接下来空间无限, 如:

distFile.map( s => s.length ).reduce( (a,b) => a + b)

RDD支持两种类型操作,Transformation与Action:

Transformation从现有数据集中创建返回一个全新的RDD,如map, filter, flatMap, groupByKey etc.;RDD1 => RDD2, 实际操作是lazy模式。

Action是基于当前数据集计算后返回的一个值,如reduce, collect, count, first, countByKey,save etc. Action主要用来启动Spark计算。

如简单sample:

上边第二句map是一个transformation;第三句reduce是一个action。注意,因为是lazy模式,所有的第二,第三句都是action后启动。Spark在action启动后, 内核会绘制一张关于计算路径的有向无环图DAG, 之后把计算分解成stage运行于独立机器,并提交每一个机器会运行M/R,并返回结果。

有向无环图DAG:

有了计算的DAG, Spark内核下一步就是根据DAG图在划分stage时充分考虑分布式计算中的流水线pipeline部分来提高效率,这个过程中RDD引入了Lineage在数据集转换过程中纪录了操作数据集的关系,每个操作只关心其父操作,出现错误时恢复单个部分,保证了其卓越的性能,其他大多数系统采用类似LOG或备份机制。根据不同transformation操作,RDD在Lineage依赖分为窄依赖Narrow
Dependencies和宽依赖Wide Dependencies。窄依赖指生成的RDD的每一个partition都依赖父RDD(s)的固定的partition,如map,filter,union等;对应的宽依赖则生成RDD的每一个partition都依赖于父RDD(s)的所有partition,如groupby,sort等,其往往对应shuffle。所以,对于窄依赖,Spark会尽量把其划分在同一个stage中,以为他们可以进行并行,流水线计算。

上图:

整体内核计算DAG与Stage划分如下:

上面我们花了很大的篇幅介绍RDD,这个是Spark的核心之核心,这个不理解的话后续会吃力。

时间篇幅问题,下面简要介绍Spark大数据一站式服务的其他功能。

Spark Streaming

Spark Streaming提供了高吞吐,高容错的实时流处理机制。这里数据来源可以是多种多样,如Kafka, Flume, Twitter, ZeroMQ, Kinesis, TCP. Spark会将流式计算分解成一系例短小的批处理作业Discretized Stream, 每一段数据都转换成

RDD,然后将DStream的transformation操作转变为针对RDD的transformation。

具体处理流程:

Spark SQL

显然,Spark SQL使得运行SQL和HiveQL查询非常简单,并提供了定位相应表与原数据。查询时候既可以使用SQL, 也同时支持DataFrame API(RDD)。

SQL使用起来很直接:

DataFrame是一种以RDD为基础,类似与传统数据table的抽象,含带了schema元信息。可以从sqlContext(已存在RDD, Hive table,或者上图数据源)。

DataFrame其实从另一个层面是面向对象的数据访问查询, 并提供DSL.

不知大家有没有看出,Spark SQL为所有的数据源Hive, Avro, Parquet, ORC,

JSON, JDBC提供了统一的访问接口模型,甚至跨数据源访问,这个非常棒。

Machine Learning

机器学习,属于高大上AI范畴了。主要理念是算法通过经验自动改进算法的研究,如著名的AlphaGo. Spark MLib是Spark对常用的机器学习算法的实现库,包括了相关的测试和数据生成器。四种常见机器学习问(shu)题(xue):二元分类,回归,聚类以及协同过滤。抱歉,太深了,虽然学数学出身,但你懂的。

总体来说, MLib支持在大数据中进行机器学习,如数据源HDFS, HBase;

并且Spark MLib提供的高质量算法,性能100+倍于Hadoop MapReduce. 就不能给老大哥点面子啊?当然,这在此说明了基础架构的重要性,完全得益于核心之核心RDD.

Spark Graph X

Spark Graph X是一个分布式图处理框架,提供了对图计算和图挖掘的各种接口。有什么用?举例来说,我们常用的社交网络微信,微博等,都需要图计算处理很多人与人之间的关系链,又如著名的PageRank; 类似Pregel(Google的三架马车之一)在Spark(Scala)上的实现优化。

Spark 2.0

最后,令人期待的Spark 2.0版本也即将发布。主要核心功能如下:

好了,我们先介绍到这里了。Spark博大精深,我们抛砖引玉,大家共同分享吧。

最后,看到Spark SUMMIT 2016会在6月初在旧金山举办,声势浩大,关键演讲人除了Spark创始人兼CTO, 还包括了Google, Microsoft, 还有我们百度的科学家,Andrew Ng可是业界的顶尖大牛啊!

wechat:erixhao

时间: 2024-10-19 23:12:20

Apache顶级项目介绍6 - Spark的相关文章

Apache顶级项目介绍2-Kafka

Apache顶级项目介绍系列-1,我们从Kafka说起.why?流行 + 名字cool. Kafka官网是见过比较简单,直叙的网站,"kafka是一个高吞吐的分布式的消息系统". Kafka最初起家于LinkedIn,当时原本作为linkedin用来管理活动流(PV,用户行为分析,搜索情况)和运营数据处理的pipline的基础. 因为其分布式以及高吞吐被广泛使用,如与Cloudera, Hadoop, Storm, Spark etc. kafka首先作为一个消息系统,提供了基本功能,

Apache顶级项目介绍系列1-概览

我们希望开始介绍一整套精华Apache TLP顶级项目介绍,包括Kafka, Zookepper, Hadoop, Spark, HBase etc.   公众号:技术极客TechBooster

Apache顶级项目介绍7 - HBase

今天我们来继续介绍Apache顶级项目大数据三巨头之一的HBase.恰逢今天(5.24)是HBase Con2016旧金山盛会,比较应景,而且还有朋友@Luke Han去演讲Kylin. 1. 官网简介: 老样子,HBase官网的介绍, "HBase is the Hadoop database, a distributed, scalable, big data store.",所以HBase   =  Hadoop Database,并且提供了分布式可扩展的数据存储.(HBase的

Apache顶级项目介绍4 - Hadoop

大象起舞,天下太平,极客们应该知道我们的重量级人物Hadoop登场了. 提到Hadoop, 正所谓饮水思源,我们不得不提及一下Hadoop之父,其对技术界的影响,在近10年可谓重大, 他就是Doug Cutting, 其传奇人生及其大作这里不赘述了,大家可以Google/Bing一下,之后或许我们会推出一些技术大牛的介绍以及好书推荐. 值得提及的是Hadoop之所以诞生于2005-2006之际,是Doug当时受到来自 Google Lab公开发布的几篇paper启发,包括Map/Reduce(2

Dubbo下一站:Apache顶级项目

导读: 近日,在Apache Dubbo开发者沙龙杭州站的活动中,阿里巴巴中间件技术专家曹胜利(展图)向开发者们分享了Dubbo2.7版本的规划. 本文将为你探秘 Dubbo 2.7背后的思考和实现方式. 作者:(按姓氏拼音排序,排名不分先后) 曹胜利(展图):Apache Dubbo Committer. 刘军(陆龟):Apache Dubbo Committer. Dubbo 2.7 将围绕 异步支持优化.元数据改造,引入JDK8的特性.Netty4.0的特性以及MetricsAPI 5个方

盘点Apache毕业的11个顶级项目

自1999年成立至今,Apache 软件基金会已成功建立起自己强大的生态圈.其社区涌现了非常多优秀的开源项目,同时有越来越多国内外项目走向这个国际开源社区进行孵化.据悉,目前所有的 Apache 项目都需要经过孵化器孵化,满足一系列质量要求之后才可毕业.从孵化器里毕业的项目,要么独立成为顶级项目,要么成为其他顶级项目的子项目. 为便于大家了解 Apache 孵化的标准,本文盘点了 Apache 从2016年1月1日至2017年1月19日所有孵化成功并独立管理的顶级项目,共有11个.同时,欢迎大家

Apache孵化器主席Justin Mclean:如何成为Apache顶级开源项目

摘要: 近日,Apache孵化器主席.Apache基金会成员.Dubbo & RocketMQ等开源项目的导师Justin Mclean来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个Apache顶级项目,以及项目孵化过程会遇到的一些盲点和挑战. 近日,Apache孵化器主席.Apache基金会成员.Dubbo & RocketMQ等开源项目的导师Justin Mclean来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个Apache顶级项目,以及项目孵化过程会遇到的一些盲点和挑战.

Apache Drill 成为 Apache 基金会顶级项目

Apache 基金会今天宣布 Apache Drill 成为基金会的顶级项目.项目新的首页是:http://drill.apache.org/ 为了帮助企业用户寻找更为有效.加快Hadoop数据查询的方法,Apache软件基金会发起了一项名为"Drill"的开源项目.Apache Drill 实现了 Google's Dremel. 该项目将会创建出开源版本的谷歌Dremel Hadoop工具(谷歌使用该工具来为Hadoop数据分析工具的互联网应用提速).而"Drill&qu

【转】apache开源项目的介绍

Jakarta项目是ASF(The Apache Software Foundation)的一部分.ASF是一个非赢利组织,她鼓励基于开放的软件许可下进行合作.注重实效的开发,并提供各个领域的高质量软件,她涉及到Http服务器,编译工具,类库,开发架构,服务器端Java技术,J2EE容器,数据库工具,日志工具,XML解析等等诸多领域.ASF提供的java项目有一部分在Jakarta中,还有一些成为独立的诸如Tomcat的项目,Jakarta项目则提供了多种多样开源的java解决通用方案. 先介绍