1.Spark介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15014327/article/details/84074812

一.Spark简介

Spark使用scala语言实现的,它是一种面向对象,函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集,它具有运行速度快、易用性好、通用性强和随处运行等特点。

1.Spark与Hadoop差异

  1. Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。
  2. Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据数据衍生过程对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。
  3. Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count; Actions包括Collect、Reduce、Lookup和Save等操作。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

2.Spark适用场景

目前大数据处理场景有以下几个类型:

(1) 复杂的批量处理(Batch Data Processing):偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时

(2) 基于历史数据的交互式查询(Interactive Query):通常的时间在数十秒到数十分钟之间

(3) 基于实时数据流的数据处理(Streaming Data Processing):通常在数百毫秒到数秒之间

目前针对以上三种场景都有比较程数的处理框架,第一种可以Hadoop MapReduce,第二种可用Impala,第三种可用Storm分布式框架。但三者是独立的,各自一套维护成本比较高,而Spark的出现能够一站式平台满意以上需求。

Spark适用场景如下:

1. Spark基于内存计算,适用与需要多次操作特定数据集的场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大。

2. 由于RDD的特性,Spark不适用增量修改的应用模型

3. 数据量不是特别大,但是实时性要求高

3.Spark术语

3.1 Spark运行模式

运行环境

模式

描述

Local

本地模式

常用于本地开发测试,本地还分为local单线程和local-cluster多线程;

Standalone

集群模式

典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持 ZooKeeper来实现HA

On yarn

集群模式

运行在yarn资源管理器框架之上,由yarn负责资源管理,Spark负责任务调度和计算

On mesos

集群模式

运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算

On cloud

集群模式

比如AWS的EC2,使用这个模式能很方便的访问Amazon的S3;

Spark支持多种分布式存储系统:HDFS和S3

3.2 Spark常用术语

术语

描述

Application

Spark的应用程序,包含一个Driver program和若干Executor

SparkContext

Spark应用程序的入口,负责调度各个运算资源,协调各个Worker Node上的Executor

Driver Program

运行Application的main()函数并且创建SparkContext

Executor

是为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。

每个Application都会申请各自的Executor来处理任务

Cluster Manager

在集群上获取资源的外部服务(例如:Standalone、Mesos、Yarn)

Worker Node

集群中任何可以运行Application代码的节点,运行一个或多个Executor进程

Task

运行在Executor上的工作单元

Job

SparkContext提交的具体Action操作,常和Action对应

Stage

每个Job会被拆分很多组task,每组任务被称为Stage,也称TaskSet

RDD

是Resilient distributed datasets的简称,中文为弹性分布式数据集;是Spark最核心的模块和类

DAGScheduler

根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler

TaskScheduler

将Taskset提交给Worker node集群运行并返回结果

Transformations

是Spark API的一种类型,Transformation返回值还是一个RDD,

所有的Transformation采用的都是懒策略,如果只是将Transformation提交是不会执行计算的

Action

是Spark API的一种类型,Action返回值不是一个RDD,而是一个scala集合;计算只有在Action被提交的时候计算才被触发。

二.Spark核心组成

1.Spark Core

2.Spark Streaming

3.Spark Sql

4.Spark Mlib

5.Spark GraphX

6.Spark R

三.Spark环境搭建

此处Hadoop和Spark集群搭建采用的是Ambari。

猜你喜欢

转载自blog.csdn.net/qq_15014327/article/details/84074812