竹笋

首页 » 问答 » 环境 » 大数据开发之Spark入门
TUhjnbcbe - 2023/3/24 20:33:00
贵州白癜风QQ交流群 http://nvrenjkw.com/nxzx/5604.html

什么是Spark?

·大数据的电花火石。

·Spark类似于MapReduce的低延迟的交互式计算框架。

·Spark是UCBerkeleyAMPLab开发的是一种计算框架,分布式资源工作交由集群管理软件(Mesos、YARN)。

·Spark是处理海量数据的快速通用引擎。

Spark发展历程

·Hadoop在年从Nutch发展到Lucene,在Yahoo成长,进入Apache孵化,年获得大量使用。但一直存在MR算法少、每次Reduce都需要磁盘读写、MR需要成对出现、Master节点调度慢、单节点等等问题。

·Spark年在Yahoo起步,用于改善MR算法。年独立为一个项目,年开源,年进入Apache孵化。被称为以下一代计算平台。

·Berkeley大学成为大数据技术中心,BerkeleyDataAnalysisStack(BDAS)逐步形成大数据平台。

·:Spark诞生于伯克利大学AMPLab

·:开源

·.6:Apache孵化器项目

·.2:Apache顶级项目

目前为止,发布的最新版本为Spark2.4.0

Spark在最近6年内发展迅速,相较于其他大数据平台或框架而言,Spark的代码库最为活跃。

截止年6月

·Spark的Contributor比年涨了3倍,达到人;

·总代码行数也比年涨了2倍多,达到40万行;

·Spark应用也越来越广泛,最大的集群来自腾讯——个节点,单个Job最大分别是阿里巴巴和Databricks——1PB;

Spark特点

1.先进架构

·Spark采用Scala语言编写,底层采用了actormodel的akka作为通讯框架,代码十分简洁高效。

·基于DAG图的执行引擎,减少多次计算之间中间结果写到Hdfs的开销。

·建立在统一抽象的RDD(分布式内存抽象)之上,使得它可以以基本一致的方式应对不同的大数据处理场景。

2.高效

·提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销。

·与Hadoop的MapReduce相比,Spark基于内存的运算比MR要快倍;而基于硬盘的运算也要快10倍!

3.易用

·Spark提供广泛的数据集操作类型(20+种),不像Hadoop只提供了Map和Reduce两种操作。

·Spark支持Java,Python和ScalaAPI,支持交互式的Python和Scala的shell。

4.提供整体解决方案

·以其RDD模型的强大表现能力,逐渐形成了一套自己的生态圈,提供了full-stack的解决方案。

·主要包括Spark内存中批处理,SparkSQL交互式查询,SparkStreaming流式计算,GraphX和MLlib提供的常用图计算和机器学习算法。

5.与Hadoop无缝衔接

·Spark可以使用YARN作为它的集群管理器。

·读取HDFS,HBase等一切Hadoop的数据。

Spark整体架构

·Spark提供了多种高级工具:SharkSQL应用于即席查询(Ad-hocquery)、SparkStreaming应用于流式计算、MLlib应用于机器学习、GraphX应用于图处理。

·Spark可以基于自带的standalone集群管理器独立运行,也可以部署在ApacheMesos和HadoopYARN等集群管理器上运行。

·Spark可以访问存储在HDFS、Hbase、Cassandra、AmazonS3、本地文件系统等等上的数据,Spark支持文本文件,序列文件,以及任何Hadoop的InputFormat。

Spark优势

轻量级快速处理。Spark允许Hadoop集群中的应用程序在内存中以倍的速度运行,即使在磁盘上运行也能快10倍。Spark通过减少磁盘IO来达到性能提升,它将中间处理的数据全部放到了内存中。

·易于使用,Spark支持多语言。Spark支持Java、Scala及Python,这允许开发者在自己熟悉的语言环境下进行工作。

·支持复杂查询。在简单的“map”及”reduce”操作之外,Spark还支持SQL查询、流式查询及复杂查询。

·实时的流处理。对比MapReduce只能处理离线数据,Spark支持实时的流计算。

·可以与Hadoop和已存Hadoop数据整合。

·支持mysql数据库和HBase数据库。

Spark适用场景

·目前大数据在互联网公司主要把Spark应用在广告、报表、推荐系统等业务上。

·在广告业务方面需要大数据做应用分析、效果分析、定向优化等。

·在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击分析等。

这些应用场景的普遍特点是计算量大、效率要求高。Spark恰恰满足了这些要求。

总的来说Spark的适用面比较广泛且比较通用。

Spark部署

·安装Scala

·配置文件:spark-env.sh

·部署的四种模式:Standalone、SparkOnYarn、SparkOnMesos、SparkOnCloud

Spark程序运行方式

·运行自带样例:run-example

·交互式:spark-shell

·提交到集群:spark-submitspark-class

spark-submit参数:

--class应用程序类名

--mastersparkmaster地址

--jars依赖库文件

--executor-memory内存

--total-executor-coresCPUcore

Spark运行模式

目前ApacheSpark支持四种分布式部署方式,分别是standalone、sparkonmesos和sparkonYARN、Sparkoncloud。

standalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。Spark在standalone模式下单点故障问题是借助zookeeper实现的,思想类似于Hbasemaster单点故障解决方案。

SparkOnMesos模式,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。在SparkOnMesos环境中,用户可选择两种调度模式之一运行自己的应用程序,粗粒度模式(Coarse-grainedMode)和细粒度模式(Fine-grainedMode)。

SparkOnYARN模式,这是一种最有前景的部署模式。但限于YARN自身的发展,目前仅支持粗粒度模式(Coarse-grainedMode)。

SparkOncloud模式,比如AWS的EC2,使用这种模式,方便的访问Amazon的S3。

SparkonStandalone

·Master和Worker是standalone的角色,Driver和Executor是Spark的角色。

·Master负责分配资源,分配Driver和Executor,让Worker启动driver和executor,只管理到executor层,不涉及任务;

·Driver负责生成task,并与executor通信,进行任务的调度和结果跟踪,不涉及资源。

执行流程描述:

1.客户端把作业发布到Master

2.Master让一个Worker启动Driver,并将作业推送给Driver

3.Driver进程生成一系列task

4.Driver向Master申请资源

5.Master让调度的Worker启动Exeuctor

6.Exeuctor启动后向Driver注册

7.Driver将task调度到Exeuctor执行

8.Executor执行结果写入文件或返回Driver

执行流程描述:

1.客户端启动后直接运行用户程序,启动Driver

2.Driver进程生成一系列task

3.Driver向Master申请资源

4.Master让调度的Worker启动Exeuctor

5.Exeuctor启动后向Driver注册

6.Driver将task调度到Exeuctor执行

7.Executor执行结果写入文件或返回Driver

SparkonYarn

·与Standalone类似,不过YARN架构更通用,可以在同一集群部署Hadoop、Spark等。

·RM、NM和AM是YARN的角色,Driver和Executor是Spark的角色。

·RM负责资源分配,分配AppMaster和Executor;AM负责向RM申请资源,启动Driver和启动Executor。

·Driver负责task的生成,task的调度和结果跟踪。

Driver运行在AM(ApplicationMaster):

1.客户端把作业发布到YARN

2.RM为该job在某个NM上分配一个AM,NM启动AppMaster,AppMaster启动Driver

3.AM启动后完成初始化作业。Driver生成一系列Task

4.AM向RM申请资源,RM返回Executor信息

5.AM通过RPC启动相应的SparkExecutor

6.Driver向Executor分配task

7.Executor执行结果写入文件或返回Driver

Driver运行在Cleint:

1.客户端启动后直接运行用户程序,直接启动Driver

2.Driver初始化并生成一系列Task

3.客户端将AppCommands发布到YARN

4.RM为该job在某个NM上分配一个AM

5.AM向RM申请资源,RM返回Executor信息

6.AM通过RPC启动相应的SparkExecutor

7.Exeuctor启动后向Driver注册

8.Driver向Executor分配task

9.Executor执行结果写入文件或返回Driver

1
查看完整版本: 大数据开发之Spark入门