大数据高速计算引擎Spark

第一部分 Spark Core

第1节 Spark概述

1.1 什么是Spark

Spark 是一个快速、通用的计算引擎。Spark的特点:
速度快。与 MapReduce 相比,Spark基于内存的运算要快100倍以上,基于硬
盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内
存来高效处理数据流;
使用简单。Spark支持 Scala、Java、Python、R的API,还支持超过80种高级算
法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala
的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法;
通用。Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询
(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算
(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的
解决方案非常具有吸引力,企业想用统一的平台去处理遇到的问题,减少开发和
维护的人力成本和部署平台的物力成本;
兼容好。Spark可以非常方便地与其他的开源产品进行融合。Spark可以使用
YARN、Mesos作为它的资源管理和调度器;可以处理所有Hadoop支持的数
据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特
别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark
也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置
的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可
以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署
Standalone的Spark集群的工具。

1.2 Spark 与 Hadoop

从狭义的角度上看:Hadoop是一个分布式框架,由存储、资源调度、计算三部分组 成; Spark是一个分布式计算引擎,由 Scala 语言编写的计算框架,基于内存的快速、通 用、可扩展的大数据分析引擎; 从广义的角度上看,Spark是Hadoop生态中不可或缺的一部分;

MapReduce的不足:
	表达能力有限
	磁盘IO开销大
	延迟高
		任务之间的衔接有IO开销
		在前一个任务执行完成之前,后一个任务无法开始。难以胜任复杂的、多阶段计算任务

Spark在借鉴MapReduce优点的同时,很好地解决了MapReduce所面临的问题。

  • 备注:Spark的计算模式也属于MapReduce;Spark框架是对MR框架的优化 ;

在实际应用中,大数据应用主要包括以下三种类型:

  • 批量处理(离线处理):通常时间跨度在数十分钟到数小时之间
  • 交互式查询:通常时间跨度在数十秒到数分钟之间
  • 流处理(实时处理):通常时间跨度在数百毫秒到数秒之间

当同时存在以上三种场景时,传统的Hadoop框架需要同时部署三种不同的软件。 如:

  • MapReduce / Hive 或 Impala / Storm

这样做难免会带来一些问题:

  • 不同场景之间输入输出数据无法做到无缝共享,通常需要进行数据格式的转换
  • 不同的软件需要不同的开发和维护团队,带来了较高的使用成本
  • 比较难以对同一个集群中的各个系统进行统一的资源协调和分配

Spark所提供的生态系统足以应对上述三种场景,即同时支持批处理、交互式查询和 流数据处理:

  • Spark的设计遵循“一个软件栈满足不同应用场景”的理念(all in one),逐渐形成了一套完整的生态系统

  • 够提供内存计算框架,也可以支持SQL即席查询、实时流式计算、机器学习 和图计算等

  • Spark 在资源管理器YARN之上,提供一站式的大数据解决方案

Spark 为什么比 MapReduce 快: 1 Spark积极使用内存。MR框架中一个Job 只能拥有一个 map task 和一个 reduce task。如果业务处理逻辑复杂,一个map和一个reduce是表达不出来的,这时就需 要将多个 job 组合起来;然而前一个job的计算结果必须写到HDFS,才能交给后一个 job。这样一个复杂的运算,在MR框架中会发生很多次写入、读取操作操作;Spark 框架则可以把多个map reduce task组合在一起连续执行,中间的计算结果不需要落 地; 复杂的MR任务:mr + mr + mr + mr +mr ... 复杂的Spark任务:mr -> mr -> mr ......

2、多进程模型(MR) vs 多线程模型(Spark)。MR框架中的的Map Task和Reduce Task是进程级别的,而Spark Task是基于线程模型的。MR框架中的 map task、 reduce task都是 jvm 进程,每次启动都需要重新申请资源,消耗了不必要的时间。 Spark则是通过复用线程池中的线程来减少启动、关闭task所需要的系统开销。

1.3 系统架构

Spark运行架构包括:

  • Cluster Manager
  • Worker Node
  • Driver
  • Executor

Cluster Manager 是集群资源的管理者。Spark支持3种集群部署模式:

Standalone、Yarn、Mesos;

Worker Node 工作节点,管理本地资源;

Driver Program。运行应用的 main() 方法并且创建了 SparkContext。由Cluster Manager分配资源,SparkContext 发送 Task 到 Executor 上执行;

Executor:在工作节点上运行,执行 Driver 发送的 Task,并向 Dirver 汇报计算结果;

1.4 Spark集群部署模式

Spark支持3种集群部署模式:Standalone、Yarn、Mesos;

  • 1、Standalone模式 *独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。从一定程度上说,该模式是其他两种的基础

    Cluster Manager:Master

    Worker Node:Worker

    仅支持粗粒度的资源分配方式

  • 2、Spark On Yarn模式

Yarn拥有强大的社区支持,且逐步已经成为大数据集群资源管理系统的标准
在国内生产环境中运用最广泛的部署模式
Spark on yarn 的支持两种模式:
	yarn-cluster:适用于生产环境
	yarn-client:适用于交互、调试,希望立即看到app的输出
Cluster Manager:ResourceManager
Worker Node:NodeManager
仅支持粗粒度的资源分配方式
  • 3、Spark On Mesos模式
	官方推荐的模式。Spark开发之初就考虑到支持Mesos
	Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然
	Cluster Manager:Mesos Master
	Worker Node:Mesos Slave
	支持粗粒度、细粒度的资源分配方式

粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和 若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task。 应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过 程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。

细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计 算,核心思想是按需分配。

  • 三种集群部署模式如何选择: 生产环境中选择Yarn,国内使用最广的模式

    Spark的初学者:Standalone,简单

    开发测试环境,可选择Standalone

    数据量不太大、应用不是太复杂,建议可以从Standalone模式开始 mesos不会涉及到

1.5 相关术语

	Application 用户提交的spark应用程序,由集群中的一个driver 和 许多
	executor 组成
	Application jar 一个包含spark应用程序的jar,jar不应该包含 Spark 或 Hadoop
	的 jar,这些jar应该在运行时添加
	Driver program 运行应用程序的main(),并创建SparkContext(Spark应用程
	序)
	Cluster manager 管理集群资源的服务,如standalone,Mesos,Yarn
	Deploy mode 区分 driver 进程在何处运行。在 Cluster 模式下,在集群内部运
	行 Driver。 在 Client 模式下,Driver 在集群外部运行
	Worker node 运行应用程序的工作节点
	Executor 运行应用程序 Task 和保存数据,每个应用程序都有自己的
	executors,并且各个executor相互独立
	Task
	executors应用程序的最小运行单元
	Job
	在用户程序中,每次调用Action函数都会产生一个新的job,也就是说每个
	Action 生成一个job
	Stage
	一个 job 被分解为多个 stage,每个 stage 是一系列 Task 的集合

第2节 Spark安装配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章