首页 > 其他分享 >从入门到高深,史上最全的Spark综合帖

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

时间:2023-07-24 17:01:11浏览次数:35  
标签:Shark 框架 Scala 最全 掌握 内存 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对磁盘的要求

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

 


标签:Shark,框架,Scala,最全,掌握,内存,Spark,高深
From: https://blog.51cto.com/u_16087105/6836831

相关文章

  • 敏捷工具Leangoo领歌支持SAFe大规模敏捷框架,史上最全
    ​Leangoo领歌覆盖了敏捷项目研发全流程,包括小型团队敏捷开发,ScrumofScrums大规模敏捷。随着SAFe的越来越普及,Leangoo本次上线提供了完整的SAFe框架功能,包括:ProgramBacklog,PI规划,迭代规划,迭代执行,迭代统计等。什么是SAFe?SAFe(ScaledAgileFramework)是全球运用最广泛的大规......
  • java spark-core wordcount
    实现JavaSpark-CoreWordCount流程概述下面是实现JavaSpark-CoreWordCount的整体流程:步骤描述1.创建SparkConf创建一个SparkConf对象,设置应用程序的名称和运行模式2.创建JavaSparkContext创建一个JavaSparkContext对象,用于连接Spark集群3.加载文本文件......
  • 最全linux基础知识
    linux基础知识 [root@localhost~]#各位置表示什么意识root:表示用户名(现在的用户是root切换为test便是张三)localhost:表示主机名(当前主机名切换为别的主机就是别的主机名) ~:家目录(表示当所在的目录切换到etc下便是etc)#:管理员用户切换为$:普通用户关机命令:1,h......
  • spark可视化界面
    Spark可视化界面实现步骤在开始之前,首先要确保你已经安装了Spark并配置好了环境变量。接下来,我们将以一个示例来说明如何实现Spark可视化界面。步骤1:引入相关库和模块首先,我们需要导入pyspark库和相关的SparkSession模块。在代码中,我们使用SparkSession.builder方法来创建一个Sp......
  • spark开启historyserver
    Spark开启HistoryServer简介在使用ApacheSpark进行大数据处理时,我们常常需要查看作业的执行历史和性能指标。Spark提供了一个称为HistoryServer的组件,它能够保存和展示Spark应用程序的执行历史数据。本文将介绍如何开启Spark的HistoryServer,并提供详细的步骤和代码示例。步......
  • spark2.4 window算子如何聚合一个id下某个字段所有值
    项目背景在数据分析和处理过程中,我们经常需要对某个字段进行聚合操作,以便得到更有用的信息。例如,我们可能需要找出每个用户的最大订单金额、最小订单金额、平均订单金额等统计指标。在Spark2.4中,可以使用window算子来实现这些聚合操作。项目方案数据准备首先,我们需要准备一份......
  • spark2.4 dataframe 分组聚合window
    Spark2.4DataFrame分组聚合和窗口函数简介ApacheSpark是一个强大的分布式计算框架,可以用于处理大规模的数据。Spark提供了多种操作数据的方式,其中DataFrame是一种基于分布式数据集的API,它提供了一种高级的数据操作接口,可以方便地对大规模数据进行分组聚合和窗口函数的处理。......
  • spark-core的几个案例
    SparkCore的几个案例在大数据处理和分析中,ApacheSpark是一个强大的工具,它提供了许多功能和API来处理大规模数据集。其中,SparkCore是Spark的核心组件,提供了分布式任务调度、内存管理和错误恢复等功能。本文将介绍一些使用SparkCore的案例,并提供相关代码示例。1.WordCount案......
  • spark(Compile / compileIncremental) Compilation failed
    Spark编译失败:Compilationfailed在使用Spark进行开发时,你可能会遇到"spark(Compile/compileIncremental)Compilationfailed"这样的编译错误。本文将介绍Spark编译的一般原理,并讨论一些常见的编译错误和解决方法。Spark编译原理Spark是一个基于分布式计算的框架,它使用Java、......
  • spark-HIVE
    什么是数仓   hive特性     结构化查询语言     ......