Spark成为大数据高手进阶步骤

什么是Sparkweb

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的适用面比较普遍且比较通用。网络

运行模式架构

  • 本地模式app

  • 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的硬件配置 

相关文章
相关标签/搜索