Spark——知识梳理(一)

    技术2022-07-10  198

    一、 资源管理工具

    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支持的两种模式:
    、yarn-cluster:Driver运行在 YARN集群下的某台机器上的JVM进程中,适用于生产环境;、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 介绍》

    Processed: 0.009, SQL: 9