Spark——知识梳理(一)

一、 资源管理工具

1.资源调度模式
1.1 local模式(本地)

运行该模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程( 只有采用集群的Standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非要用到HDFS文件系统)。
Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。将Spark应用以多线程的方式直接运行在本地,一般都是为了方便调试,本地单机模式分三类:
local: 只启动一个executor
local[k]: 启动k个executor
local[*]: 启动跟cpu数目相同的 executor

1.2 standalone模式

即独立模式, 自带完整的服务,可单独部署到一个集群中,资源管理和任务监控是Spark自己监控,无需依赖任何其他资源管理系统。这个模式也是其他模式的基础. 不使用其他调度工具时会存在单点故障,使用Zookeeper等可以解决

1.3 on-yarn模式

这是一种最有前景的部署模式。但限于YARN自身的发展,目前仅支持**粗粒度模式(**Coarse-grained Mode)。这是由于YARN上的Container资源是不可以动态伸缩的,一旦Container启动之后,可使用的资源不能再发生变化,不过这个已经在YARN计划中了。

应用场景:

考虑到尽量用一个统一的资源调度模式来运行多种任务,
这样可以减轻运维的工作压力,
同时也可以减少资源调度之间的配合(基于集群考虑)

spark-on-yarn支持的两种模式:
  1. 、yarn-cluster:Driver运行在 YARN集群下的某台机器上的JVM进程中,适用于生产环境;
  2. 、yarn-client:Driver 运行在当前提交程序的机器上,适用于交互、调试
    yarn-cluster和yarn-client的区别在于yarn appMaster,每个yarn app实例有一个appMaster进程,是为app启动的第一个container;负责从ResourceManager请求资源,获取到资源后,告诉NodeManager为其启动container。在实际生产环境中一般都采用yarn-cluster;而如果你仅仅是Debug程序,可以选择yarn-client。
1.4 mesos模式

这是很多公司采用的模式,官方推荐这种模式(当然,原因之一是血缘关系)。正是由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。目前在Spark On Mesos环境中,用户可选择两种调度模式之一运行自己的应用程序:

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

2)、细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。
与粗粒度模式一样,应用程序启动时,先会启动executor,但每个executor占用资源仅仅是自己运行所需的资源,不需要考虑将来要运行的任务,之后,mesos会为每个executor动态分配资源,每分配一些,便可以运行一个新任务,单个Task运行完之后可以马上释放对应的资源。每个Task会汇报状态给Mesos slave和Mesos Master,便于更加细粒度管理和容错,这种调度模式类似于MapReduce调度模式,每个Task完全独立,优点是便于资源控制和隔离,但缺点也很明显,短作业运行延迟大。

1.5 docker

Docker是一种相比虚拟机更加轻量级的虚拟化解决方案,所以在Docker上搭建Spark集群具有可行性。

1.6 cloud
2.这么多资源调度模式,到底用哪种比较好?

需要通过公司需求和运行速度来综合衡量

3.哪种调度模式速度快呢?

standalone模式

4.为什么又很多企业在用spark-on-yarn模式?

1.考虑到尽量用一个统一的资源调度模式来运行多种任务,
2.这样可以减轻运维的工作压力,
3.同时也可以减少资源调度之间的配合(基于集群考虑)

5.yarn的任务调度流程

1、client向ResourceManager注册并提交任务
2、ResourceManager向NodeManager进行通信,开始在某个NodeManager启动AppMaster
3、AppMaster启动后开始向ResourceManager申请资源
4、ApplicationManager开始资源调度,开始通知NodeManager启动YarnChild
5、YarnChild开始和AppMaster进行通信,AppMaster对所有YarnChild进行监控
6、MR执行完成以后,YarnChild被AppMaster回收,AppMaster把自己回收掉

二、 spark资源调度?

1.Spark-standalone

Standalone的模式下,spark的资源管理和调度是自己来管理和调度的,主要由master来管理。

2.Spark-yarn

ResourceManager

NodeManager

ApplicationMaster

Container(资源)

Task

Hadoop集群上面 Yarn执行任务的流程:

Client提交任务给resourceManager,resourceManager会选择一台机器开启一个container,在container里面开启一个applicationaster服务进程,applicationMaster进行任务的管理和调度,applicationMaster会向resourceManager申请资源,resourcemanager会在其他的机器上开启container进行资源分配。applicationMaster在resourcemanager分配的资源进行任务调度,在container里面运行task(map和 reduce)

Spark集群基于yarn的时候任务的执行流程:

(1)client模式

Client提交任务给resourceManager,在提交任务的时候,在提交任务的那台机器上面开启一个driver服务进程,resourcemanager在接收到client提交的任务以后,在集群中随机选择一台机器分配一个container,在该container里面开启一个applicationmaster服务进程,driver去找applicationmaster,applicationmaster去找resourcemanager申请资源,resourcemanager会分配container,在其中开启excuter,excuter会反向向driver注册,driver把task放入到excuter里面执行。

(2)Cluster模式

Spark集群会在集群中开启一个driver,此时开启就是applicationmaster和driver合二为一了。其他的都相同。

注:Standalone和yarn上运行的业务的执行流程都是相同的,只是资源的分配和管理的方式不一样了。

3.spark-Mesos

方式类似yarn

三、 hive的优化?

见《hive优化(最全)》

四、 parquet格式?

parquet发展
parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发, Parquet的灵感来自于2010年Google发表的Dremel论文,文中介绍了一种支持嵌套结构的存储格式,并且使用了列式存储的方式提升查询性能,在Dremel论文中还介绍了Google如何使用这种存储格式实现并行查询的。

官网介绍
无论数据处理框架,数据模型或编程语言的选择如何,Apache Parquet都是Hadoop生态系统中任何项目可用的列式存储格式。

特点
1、可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。
2.压缩编码可以降低磁盘存储空间。。
3.只读取需要的列,支持向量运算,能够获取更好的扫描性能。

一个Parquet文件是由一个header以及一个或多个block块组成,以一个footer结尾。
header中只包含一个4个字节的数字PAR1用来识别整个Parquet文件格式。
文件中所有的metadata都存在于footer中。footer中的metadata包含了格式的版本信息,schema信息、key-value paris以及所有block中的metadata信息。
footer中最后两个字段为一个以4个字节长度的footer的metadata,以及同header中包含的一样的PAR1。

五、nginx 负载均衡?

《Nginx 介绍》

猜你喜欢

转载自blog.csdn.net/Aying_seeyou/article/details/107048823