Spark调研笔记第1篇 - Spark简介

在公司线上项目中引入Spark已经将近1年时间了,从效果来看,Spark确实是能提高生产力的优秀分布式计算平台。

从本篇笔记开始,会把之前调研Spark时的调研报告分享出来(限于篇幅,会分成几篇文章),以便帮助刚接触Spark的朋友们尽快入门。

下面开始正文。

1. 项目背景

Spark项目于2009年诞生于UC Berkeley AMP Lab并于2010年正式提交Apache Software Foundation成为开源项目。目前已经成为Apache下的明星项目,其代码提交活跃度在整个社区的所有项目中名列前茅。

2. Spark的性能

若运算过程全部在内存中完成,与Hadoop集群支持Map/Reduce的Streaming计算相比,在计算速度方面,Spark会有100x倍的性能提升;即使运算会产出中间文件,速度也有10x倍的提升。

3. 编译

从官网下载合适的Spark版本,建议下载pre-built版本,可以省去不少依赖问题。

Installing Doc的build guide是用Maven来编译Spark源码的,且编译过程中有些细节参数需要指定,这里不再赘述,直接参考官网guide即可。

4. Spark集群的部署模式

4.1 Spark集群部署模式

目前支持以下几种部署方式:

1) Standalone模式

将Spark集群单独部署,不与任何现有系统耦合,cluster manager由Spark的master实例担任。这是最简单的部署模式。

具体部署时,可启多个master实例,借助zookeeper消除单点故障,从而实现HA:zookeepr选出”现役”的master,其余实例standby,若当前master实例故障,则zookeeper从standby的实例中选新主。

2) Apache Mesos模式

cluster manager由mesos master实例来担任,实现资源分配及任务调度。

3) Hadoop YARN模式

cluster manager由YARN ResourceManager来担任

注意:Spark程序编译时需要引入YARN支持才能应用YARN模式。

关于这3种部署模式的详细说明,可参考官网文档的说明。

4.2 Spark集群典型结构

Cluster Mode Overview文档可知,一个典型的Spark集群包含的组件如下图所示。

Spark应用提交Spark集群后,任务脚本中创建的Spark context对象(又称为driver program,其实是在Spark客户端所在机器上启动的一个JVM进程)会依次执行如下步骤:

1) 建立与cluster manager进程的连接

2) 向manager申请任务所需资源(worker节点上的executor进程,实现具体的计算及数据存储)

3) 将应用程序代码(jar或.py文件)发往申请到的executor进程

4) 向executor进程发送由调度器分解job->stages->tasks后的tasks并由后者负责执行

几点补充说明:

1) Spark context无法也无须感知其底层的cluster manager是何种类型(3种可能:Spark standalone/apache mesos/hadoop yarn),只要它可以通过culster manager申请到executor进程,它就可以执行Spark应用。

2) 每个Spark应用均会申请独立的executor进程(即不同的Spark任务对应的进程间相互独立)。优点:实现应用隔离,从调度端看,不同应用创建各自的Spark context实例,每个driver只调度自己的任务;从执行端看,不同应用的executor进程运行在各自的JVM上;缺点:若不借助外部存储系统,数据无法在不同的Spark应用间共享。

3) Spark应用申请的executor进程在应用的执行时间内保持alive,且它以multi-threading方式执行具体的计算任务。

4) Spark context实例所属的driver program负责在集群上调度任务,故在部署上,driver的部署节点应尽可能靠近worker节点,最好部署在同一局域网内。

未完待续,下篇笔记将会介绍如何通过Spark客户端向Spark集群提交计算任务。

【参考资料】

1. Spark Overview

2. Cluster Mode Overview

3. Spark Documentation  PS: 这里有不少从浅到深的Spark资料

========================= EOF ====================

时间: 2024-10-12 15:53:21

Spark调研笔记第1篇 - Spark简介的相关文章

Spark调研笔记第5篇 - Spark API简介

由于Spark是用Scala实现的,所以Spark天生支持Scala API,此外,还支持Java和Python API.以Spark 1.3版本的Python API为例,其模块层级关系如下图所示: 从上图可知,pyspark是Python API的顶层package,它包含了几个重要的subpackages,其中: 1) pyspark.SparkContext 它抽象了指向spark集群的一条连接,可用来创建RDD对象,它是API的主入口. 2) pyspark.SparkConf 通过它

Spark调研笔记第6篇 - Spark编程实战FAQ

本文主要记录我使用Spark以来遇到的一些典型问题及其解决办法,希望对遇到同样问题的同学们有所帮助. 1. Spark环境或配置相关 Q: Spark客户端配置文件spark-defaults.conf中,spark.executor.memory和spark.cores.max应该如何合理配置? A: 配置前,需要对spark集群中每个节点机器的core和memory的配置有基本了解.比如由100台机器搭建的spark集群中,每个节点的配置是core=32且memory=128GB,那么,向该

Spark调研笔记第5篇 - Spark API简单介绍

因为Spark是用Scala实现的,所以Spark天生支持Scala API.此外,还支持Java和Python API. 以Spark 1.3版本号的Python API为例.其模块层级关系例如以下图所看到的: 从上图可知,pyspark是Python API的顶层package,它包括了几个重要的subpackages.当中: 1) pyspark.SparkContext 它抽象了指向spark集群的一条连接,可用来创建RDD对象,它是API的主入口. 2) pyspark.SparkCo

Spark调研笔记第3篇 - Spark集群相应用的调度策略简单介绍

Spark集群的调度分应用间调度和应用内调度两种情况,下文分别进行说明. 1. 应用间调度 1) 调度策略1: 资源静态分区 资源静态分区是指整个集群的资源被预先划分为多个partitions,资源分配时的最小粒度是一个静态的partition. 依据应用对资源的申请需求为其分配静态的partition(s)是Spark支持的最简单的调度策略. 我们已经知道,不同的应用有各自的Spark Context且占用各自的JVM和executor(s).依据Spark Job Scheduling文档的

Spark调研笔记第3篇 - Spark集群对应用的调度策略简介

Spark集群的调度分应用间调度和应用内调度两种情况,下文分别进行说明. 1. 应用间调度 1) 调度策略1: 资源静态分区 资源静态分区是指整个集群的资源被预先划分为多个partitions,资源分配时的最小粒度是一个静态的partition.根据应用对资源的申请需求为其分配静态的partition(s)是Spark支持的最简单的调度策略. 我们已经知道,不同的应用有各自的Spark Context且占用各自的JVM和executor(s).根据Spark Job Scheduling文档的说

Spark调研笔记第7篇 - 应用实战: 如何利用Spark集群计算物品相似度

本文是Spark调研笔记的最后一篇,以代码实例说明如何借助Spark平台高效地实现推荐系统CF算法中的物品相似度计算. 在推荐系统中,最经典的推荐算法无疑是协同过滤(Collaborative Filtering, CF),而item-cf又是CF算法中一个实现简单且效果不错的算法. 在item-cf算法中,最关键的步骤是计算物品之间的相似度.本文以代码实例来说明如何利用Spark平台快速计算物品间的余弦相似度. Cosine Similarity是相似度的一种常用度量,根据<推荐系统实践>一

日志收集系统Flume调研笔记第1篇 - Flume简介

用户行为数据的收集无疑是构建推荐系统的先决条件,而Apache基金会下的Flume项目正是为分布式的日志收集量身打造的,本文是Flume调研笔记的第1篇,主要介绍Flume的基本架构,下篇笔记将会以实例说明Flume的部署和使用步骤. 本文所用的Flume版本为目前最新版的ver1.5.2,它属于Flume-NG,在系统架构上与Flume-OG有所区别,二者的不同可以参考FlumeWiki文档的说明. 1. Flume是什么 Flume是Apache基金会下的一个开源项目,它实现了一套分布式的.

Spark调研笔记第4篇 - PySpark Internals

其实,有两个名为PySpark的概念,一个是指Spark客户端内置的pyspark脚本,而另一个是指Spark Python API中的名为pyspark的package. 本文只对第1个pyspark概念做介绍. 1. Spark客户端内置的pyspark"命令" Spark客户端支持交互模式以方便应用调试,通过调用pyspark可以进入交互环境: cd /path/to/spark/ && ./bin/pyspark 用编辑器查看可知,pyspark其实是个shel

Spark发行笔记8:解读Spark Streaming RDD的全生命周期

本节主要内容: 一.DStream与RDD关系的彻底的研究 二.StreamingRDD的生成彻底研究 Spark Streaming RDD思考三个关键的问题: RDD本身是基本对象,根据一定时间定时产生RDD的对象,随着时间的积累,不对其管理的话会导致内存会溢出,所以在BatchDuration时间内执行完RDD操作后,需对RDD进行管理. 1.DStream生成RDD的过程,DStream到底是怎么生成RDD的? 2.DStream和RDD到底什么关系? 3.运行之后怎么对RDD处理? 所