spark初学

 1,什么是Spark?

Spark官网:http://spark.apache.org/ Apache 

Spark是新一代轻量级大数据处理平台

历史

Spark特点

快速

Spark运行速度快的原因是Spark的中间数据存放在内存中

易用

Spark支持多种语音的交互模式界面

通用

Spark框架包含多个紧密集成的组件,涵盖了机器学习、图形算法、流式计算、SQL查询和迭代计算等多种功能,组件间无缝、紧密地集成,一站式解决工作流中的问题。

随处运行

用户可以使用Spark的独立集群模式运行Spark,也可以在EC2(亚马逊弹性计算云)、Hadoop YARN或者Apache Mesos上运行Spark。并且可以从HDFS、Cassandra、HBase、Hive、Tachyon和任何分布式文件系统读取数据

代码简洁

Spark支持使用Scala,Python等编写语言。如MapReduce实现单词计数可能需要60多行代码,而Spark使用Scala语言实现只要一行

2,Spark与Hadoo,pMapReduce对比

1、Spark的中间数据放到内存中,对于迭代运算效率更高

2、Spark比Hadoop更通用

3、Spark提供了统一的编程接口

4、容错性– 在分布式数据集计算时通过checkpoint来实现容错

5、可用性– Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性

3,结构化数据与非结构化数据

结构化数据:即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据。

非结构化数据:不方便用数据库二维逻辑表来表现的数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。

4,spark的应用场景

        1. Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小;

  2. 由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合:

  3. 数据量不是特别大,但是要求实时统计分析需求。

5,Spark生态圈

Spark 生态系统以Spark Core 为核心,能够读取传统文件(如文本文件)、HDFS、Amazon S3、Alluxio 和NoSQL 等数据源,利用Standalone、YARN 和Mesos 等资源调度管理,完成应用程序分析与处理。这些应用程序来自Spark 的不同组件,如Spark Shell 或Spark Submit 交互式批处理方式、Spark Streaming 的实时流处理应用、Spark SQL 的即席查询、采样近似查询引擎BlinkDB 的权衡查询、MLbase/MLlib 的机器学习、GraphX 的图处理和SparkR 的数学计算等,如下图所示,正是这个生态系统实现了“One Stack to Rule Them All”目标。 (在这里只介绍Spark Core、Spark SQL以及Spark Streaming)

Spark Core

Spark的核心,提供底层框架及核心支持。

BlinkDB

一个用于在海量数据上进行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。

Spark SQL

可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括HiveHDFS、关系数据库(如MySQL)等。

Spark Streaming

可以进行实时数据流式计算。

MLBase

Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。

MLBase4部分组成:MLlibMLIML OptimizerMLRuntime

Spark GraphX

图计算的应用在很多情况下处理的数据量都是很庞大的。如果用户需要自行编写相关的图计算算法,并且在集群中应用,难度是非常大的。而使用GraphX即可解决这个问题,因为它内置了许多与图相关的算法,如在移动社交关系分析中可使用图计算相关算法进行处理和分析

SparkR

AMPLab发布的一个R语言开发包,使得R语言编写的程序不只可以在单机运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力。

6,Spark运行架构与原理

Spark运行架构主要由 SparkContext、Cluster Manager和Worker 组成,其中ClusterManager负责整个集群的统一资源管理,Worker节点中的Executor是应用执行的主要进程,内部含有多个Task线程以及内存空间.

Spark组件

客户端

用户提交作业的客户端

Driver

运行Applicationmain()函数并创建SparkContext

SparkContext

整个应用的上下文,控制应用的生命周期

        Cluster Manager

资源管理器,即在集群上获取资源的外部服务,目前主要有StandaloneSpark原生的资源管理器)和YARNHadoop集群的资源管理器)。

SparkWorker

集群中任何可以运行应用程序的节点,运行一个或多个Executor进程。

Executor

执行器,在Spark Worker上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executor

Task

被发送到某个Executor的具体任务。

Spark是多线程运行, MapReduce多进程运行。

1.standalone模式

与MapReduce1.0框架类似,Spark框架本身也自带了完整的资源调度管理服务,可以独立部署到一个集群中,而不需要依赖其他系统来为其提供资源管理调度服务。在架构的设计上,Spark与MapReduce1.0完全一致,都是由一个Master和若干个Slave构成,并且以槽(slot)作为资源分配单位。不同的是,Spark中的槽不再像MapReduce1.0那样分为Map 槽和Reduce槽,而是只设计了统一的一种槽提供给各种任务来使用。

 

作业流程

(1)接受到任务后向Master注册并申请资源

(2)worker定期发送心跳信息,并向Executor

   (3)Master根据收到的信息判断怎样分配资源,怎样获取资源,启动后台监管程序

(4)StandaloneExecutorBackend向SparkContext注册并申请资源

(5)SparkContext 根据 RDD 的依赖关系构建 DAG 图,DAG 图提交给 DAG 调度器进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器进行处理;Executor 向 SparkContext 申请任务,任务调度器将任务分发给 Executor 运行,同时SparkContext将应用程序代码发放给Executor。

(6)StandaloneExecutorBackend会建立Executor线程吃,开始执行任务,并报告状态,直至任务完成

2.Spark on Mesos模式

Mesos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务。Spark on Mesos模式中,Spark程序所需要的各种资源,都由Mesos负责调度。由于Mesos和Spark存在一定的血缘关系,因此,Spark这个框架在进行设计开发的时候,就充分考虑到了对Mesos的充分支持,因此,相对而言,Spark运行在Mesos上,要比运行在YARN上更加灵活、自然。目前,Spark官方推荐采用这种模式,所以,许多公司在实际应用中也采用该模式。

3. Spark on YARN模式、

 YARN是一种统一资源管理机制,在其上面可以运行多套计算框架。目前的大数据技术世界,大多数公司除了使用Spark来进行数据计算,由于历史原因或者单方面业务处理的性能考虑而使用着其他的计算框架,比如MapReduce、Storm等计算框架。Spark基于此种情况开发了Spark on YARN的运行模式,由于借助了YARN良好的弹性资源管理机制,不仅部署Application更加方便,而且用户在YARN集群中运行的服务和Application的资源也完全隔离,更具实践应用价值的是YARN可以通过队列的方式,管理同时运行在集群中的多个服务。

    Spark on YARN模式根据Driver在集群中的位置分为两种模式:一种是YARN-Client模式,另一种是YARN-Cluster(或称为YARN-Standalone模式)。

7,了解Spark核心数据集RDD

RDDResilient Distributed Datasets弹性分布式数据集),可以简单的把RDD理解成一个提供了许多操作接口的数据集合,和一般数据集不同的是,其实际数据分布存储于一批机器中(内存或磁盘中)

RDD支持两种操作,分别为转换操作和行动操作(又叫转换算子和行动算子)

转换操作主要是指将原始数据集加载为RDD数据或将一个RDD操作转换为另一个RDD操作。

行动操作主要指将RDD存储至硬盘中或触发转换操作执行的操作

Spark RDD转换和操作示例窄依赖:表现为一个父RDD的分区对应于一个子RDD的分区或者多个父RDD的分区对应于一个子RDD的分区。

宽依赖:表现为存在一个父RDD的一个分区对应一个子RDD的多个分区。

常用的RDD转换操作API
filter(func):筛选出满足函数func的元素,并返回一个新的数据集。

map(func):将每个元素传递到函数func中,并将结果返回为一个新的数据集。

flatMap(func):与map相似,但每个输入元素都可以映射到0或多个映射结果。

groupByKey():应用于(k,v)键值对的数据集时,返回一个新的(k,Iterable)形式数据集,例如有三个hello(hello,(1,1,1))

reduceByKey(func):应用于(k,v)键值对的数据集时,返回一个新的(k,v)形式数据集,其中每个值是将每个key传递到函数func中进行聚合后的结果。

常用RDD的行动操作API
count():返回数据集中的元素个数。

collect():以数组的形式返回数据集中的所有元素。

first():返回数据集中第一个元素。

take(n):以数组的形式返回数据集中的前n个元素。

reduce(func):通过函数func(输入两个参数并返回一个值)聚合数据集中的元素。

foreach(func):将数据集中的每个元素传递到函数func中运行。

Spark Stage划分依据主要是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值