`
kavy
  • 浏览: 888404 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

从入门到高深,史上最全的Spark综合帖

 
阅读更多

 

什么是Spark

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

Spark的适用场景

Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小(大数据库架构中这是是否考虑使用Spark的重要因素)

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

运行模式

  • 本地模式
  • Standalone模式
  • Mesoes模式
  • yarn模式

Spark生态系统

Shark ( Hive on Spark): Shark基本上就是在Spark的框架基础上提供和Hive一样的H iveQL命令接口,为了最大程度的保持和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算法。

详见【科普Spark,Spark是什么,如何使用Spark

 

成为Spark大数据高手要怎么做

伴随Spark技术的普及推广,对专业人才的需求日益增加。Spark专业人才在未来也是炙手可热,轻而易举可以拿到百万的薪酬。而要想成为Spark高手,也需要一招一式,从内功练起:通常来讲需要经历以下阶段:

 

第一阶段:熟练的掌握Scala语言

Spark框架是采用Scala语言编写的,精致而优雅。要想成为Spark高手,你就必须阅读Spark的源代码,就必须掌握Scala,;

虽然说现在的Spark可以采用多语言Java、Python等进行应用程序开发,但是最快速的和支持最好的开发API依然并将永远是Scala方式的API,所以你必须掌握Scala来编写复杂的和高性能的Spark分布式程序;

尤其要熟练掌握Scala的trait、apply、函数式编程、泛型、逆变与协变等;

入门Scala可参考以下文章:

Scala更适合用于大数据处理和机器学习

快速了解Scala技术栈

Scala基本语法初探

 

第二阶段:精通Spark平台本身提供给开发者API

掌握Spark中面向RDD的开发模式,掌握各种transformation和action函数的使用;

掌握Spark中的宽依赖和窄依赖以及lineage机制;

掌握RDD的计算流程,例如Stage的划分、Spark应用程序提交给集群的基本过程和Worker节点基础的工作原理等

扩展阅读:

Spark技术内幕:究竟什么是RDD

Spark技术内幕:Worker源码与架构解析

Spark技术内幕:Stage划分及提交源码分析

 

第三阶段:深入Spark内核

此阶段主要是通过Spark框架的源码研读来深入Spark内核部分:

通过源码掌握Spark的任务提交过程;

通过源码掌握Spark集群的任务调度;

尤其要精通DAGScheduler、TaskScheduler和Worker节点内部的工作的每一步的细节;

推荐阅读:

Spark源码分析:多种部署方式之间的区别与联系

 

第四阶级:掌握基于Spark上的核心框架的使用

Spark作为云计算大数据时代的集大成者,在实时流处理、图技术、机器学习、NoSQL查询等方面具有显著的优势,我们使用Spark的时候大部分时间都是在使用其上的框架例如Shark、Spark Streaming等:

Spark Streaming是非常出色的实时流处理框架,要掌握其DStream、transformation和checkpoint等;

Spark的离线统计分析功能,Spark 1.0.0版本在Shark的基础上推出了Spark SQL,离线统计分析的功能的效率有显著的提升,需要重点掌握;

对于Spark的机器学习和GraphX等要掌握其原理和用法;

深度了解Spark SQL可以看看这篇文章Spark SQL深度理解篇:模块实现、代码结构及执行流程总览

 

第五阶级:做商业级别的Spark项目

通过一个完整的具有代表性的Spark项目来贯穿Spark的方方面面,包括项目的架构设计、用到的技术的剖析、开发实现、运维等,完整掌握其中的每一个阶段和细节,这样就可以让您以后可以从容面对绝大多数Spark项目。

 

第六阶级:提供Spark解决方案

彻底掌握Spark框架源码的每一个细节;

根据不同的业务场景的需要提供Spark在不同场景的下的解决方案;

根据实际需要,在Spark框架基础上进行二次开发,打造自己的Spark框架;

前面所述的成为Spark高手的六个阶段中的第一和第二个阶段可以通过自学逐步完成,随后的三个阶段最好是由高手或者专家的指引下一步步完成,最后一个阶段,基本上就是到”无招胜有招”的时期,很多东西要用心领悟才能完成。

扩展阅读:Spark在腾讯雅虎优酷成功应用的深度解析

 

Spark的硬件配置有哪些要求?

 

Spark与存储系统

如果Spark使用HDFS作为存储系统,则可以有效地运用Spark的standalone mode cluster,让Spark与HDFS部署在同一台机器上。这种模式的部署非常简单,且读取文件的性能更高。当然,Spark对内存的使用是有要求的,需要合理分配它与HDFS的资源。因此,需要配置Spark和HDFS的环境变量,为各自的任务分配内存和CPU资源,避免相互之间的资源争用。

若HDFS的机器足够好,这种部署可以优先考虑。若数据处理的执行效率要求非常高,那么还是需要采用分离的部署模式,例如部署在Hadoop YARN集群上。

扩展阅读:

Spark on YARN集群模式作业运行全过程分析

 

Spark对磁盘的要求

Spark是in memory的迭代式运算平台,因此它对磁盘的要求不高。Spark官方推荐为每个节点配置4-8块磁盘,且并不需要配置为RAID(即将磁盘作为单独的mount point)。然后,通过配置spark.local.dir来指定磁盘列表。

 

Spark对内存的要求

Spark虽然是in memory的运算平台,但从官方资料看,似乎本身对内存的要求并不是特别苛刻。官方网站只是要求内存在8GB之上即可(Impala要求机器配置在128GB)。当然,真正要高效处理,仍然是内存越大越好。若内存超过200GB,则需要当心,因为JVM对超过200GB的内存管理存在问题,需要特别的配置。

内存容量足够大,还得真正分给了Spark才行。Spark建议需要提供至少75%的内存空间分配给Spark,至于其余的内存空间,则分配给操作系统与buffer cache。这就需要部署Spark的机器足够干净。

 

Spark对网络的要求

Spark属于网络绑定型系统,因而建议使用10G及以上的网络带宽。

 

Spark对CPU的要求

Spark可以支持一台机器扩展至数十个CPU core,它实现的是线程之间最小共享。若内存足够大,则制约运算性能的就是网络带宽与CPU数。

关于硬件配置的更多详尽内容见Spark的硬件配置

 

转自:http://dataunion.org/2824.html

 

分享到:
评论

相关推荐

    堆栈溢出技术从入门到高深.doc

    在本文档“堆栈溢出技术从入门到高深.doc”中,主要讲解了堆栈的原理、堆栈溢出的产生以及如何利用堆栈溢出来控制程序执行流程。 首先,堆栈是计算机内存中用于存储函数调用时临时数据的一块区域,它遵循“后进先出...

    《Python 编程:从入门到实践》阅读计划

    ### 《Python 编程:从入门到实践》阅读计划详解 #### 一、书籍概述与特色 《Python 编程:从入门到实践》是一本面向初学者的Python编程教程,由图灵社区出版。该书以清晰、易于理解的方式介绍了Python的基础知识...

    lingo让你快速入门到高深的教程

    【LINGO快速入门】 LINGO是一款强大的数学优化软件,它专用于解决线性和非线性优化问题,包括但不限于线性规划、整数规划、二次规划等。LINGO提供了一种简单易学的语言,使得用户能方便地构建大规模的优化模型,并...

    .NET 线程详解 从基础到高深

    本篇文章将从基础概念出发,逐步深入到高级应用,旨在帮助开发者全面理解并掌握.NET线程的使用技巧。 基础篇: 首先,我们要理解什么是线程以及其在.NET中的实现。线程是进程中的一个执行路径,每个进程至少有一个...

    VFP试验素材从基本到高深都有

    "VFP试验素材从基本到高深都有"这个标题暗示了这个压缩包包含了从入门到高级的全方位学习资源,覆盖了VFP的基础知识到高级应用。 在描述中提到的"绝对好用的资料,错过了一定会后悔终生的",这表明这些素材对于学习...

    Delphi7从入门到精通part1

    作为“Delphi从入门到精通”系列丛书的第七版,本书涵盖了Delphi的最新特性,包括.NET支持和内嵌工具,XML支持和Web服务,用VCL和CLX构建定制组件,以及Delphi 7运行时库等。 本书适用于了解程序设计相关知识的人士...

    Delphi7 从入门到精通part2

    作为“Delphi从入门到精通”系列丛书的第七版,本书涵盖了Delphi的最新特性,包括.NET支持和内嵌工具,XML支持和Web服务,用VCL和CLX构建定制组件,以及Delphi 7运行时库等。 本书适用于了解程序设计相关知识的人士...

    2023面试题(从基础到高深)

    "2023面试题(从基础到高深)"这个标题表明这是一个针对2023年求职季准备的面试资源集合,涵盖了从基础到深入的各类IT技术问题。这意味着该压缩包可能包含了一系列针对不同技术水平和职位的面试题目,帮助应聘者在...

    Delphi7 从入门到精通.part4.rar

    作为“Delphi从入门到精通”系列丛书的第七版,本书涵盖了Delphi的最新特性,包括.NET支持和内嵌工具,XML支持和Web服务,用VCL和CLX构建定制组件,以及Delphi 7运行时库等。 本书适用于了解程序设计相关知识的人士...

    Delphi7 从入门到精通.part3.rar

    作为“Delphi从入门到精通”系列丛书的第七版,本书涵盖了Delphi的最新特性,包括.NET支持和内嵌工具,XML支持和Web服务,用VCL和CLX构建定制组件,以及Delphi 7运行时库等。 本书适用于了解程序设计相关知识的人士...

    汇编语言(ASM)从入门到精通.chm

    某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)

    ModelSim SE 十分钟入门

    本文以ModelSim SE 5.6版本为基础,介绍ModelSim SE的最基本用法,高深的我也不会 。 当你安装完ModelSim SE之后,可以将你的ModelSim SE的起始路径设置为你的工作目录(如e:\verilog),具体方法是在右键单击执行...

    PB精讲--基础学习到高深开发

    本资料集合了从基础到高级的PB开发知识,旨在帮助初学者快速入门,并辅助有经验的开发者提升技能。 **1. PB基础** PB的基础学习主要涵盖以下几个方面: - **环境设置**:安装PowerBuilder开发环境,理解工作区...

    JVM入门.pptx

    这是一篇带你入门JVM的ppt,里面没有高深的讲解,但会把JVM中涉及的内存管理知识全部涉及,最后通过一个动画效果让你领会一段简单的代码是如何在JVM内存中执行的(全屏观看),希望能帮到你。

    命令行快速入门

    常用命令行快速入门,这本书的目的是引导学生上手笔者的其他编程书籍。很多学生不知道命令行界面的基本用法,这阻碍了他们的学习过程。这本书的设计可以让读者一天到一周内就读完,并且学到足够的命令行知识来下手别...

    汇编语言入门教程2007

    某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是...

Global site tag (gtag.js) - Google Analytics