Spark 简介

Spark 简介

Spark 概述:

  • Spark发行与2013年6月,早于Yarn的发行,所以内置一套资源调度框架。
  • Spark基于内存进行数据的分析计算,中间过程只要不涉及Shuffle就不会落盘,减少了磁盘IO,所以性能更高。

Spark 内置模块:

  1. Spark Core :封装了RDD的API,实现Spark基本功能,即任务调度、内存管理、错误恢复、与存储系统交互。
  2. Spark SQL :是Spark用来操作结构化数据的程序包。
  3. Spark Streaming :用于实时数据的流式计算,提供了操作数据流的API。
  4. Spark Mlib :机器学习功能的程序库。
  5. Spark Graphx :用于图形并行计算和图挖掘系统的组件。

Spark 特点:

  • 运行快:基于内存,中间结果不落盘。
  • 易用:支持Scala、Python、Java。
  • 通用:支持SQL交互查询、流式处理、机器学习、图计算。
  • 兼容性强:可以方便和Yarn、Mosos、Kubernetes融合。

Spark 部署模式:

  • 单机模式:本地部署单个Spark服务,多用于测试。

    说明:本地模式下,默认的调度器为FIFO。

  • 集群模式:

    1. Standalone :

      • Standalone模式使用Spark自带的资源调动引擎,构建一个由Master和Worker构成的Spark集群,Spark运行在集群中。

      • Master:Spark特有的资源调度系统的leader,掌管整个集群的资源,类似于RM。

      • Worker:Spark特有资源调度系统的slave,掌握单个节点的资源信息,类似NM。

        说明:Master和Worker是standalone模式下Spark的守护进程、集群资源管理者,只在standalone模式下才会有。 Spark的资源调度框架是为了自己使用是轻量级的,所以没有必要用Container,效率更高。

        • 'tandalone-clien': Driver程序运行在本地节点。本地服务通过SparkSubmit提交任务时会在本地启Driver,然后Driver向Master注册Spark应用程序,然后Master会启动相应的Worker分配资源,并在Woker中启动Executor,Executor启动后Driver会向其发送任务,待Executor执行完任务和会向Driver反向注册返回结果。
        • 'standalone-cluster':Driver程序运行在集群上的某个节点,本地服务通过SparkSubmit提交任务后不会在本地启动Driver,而是直接向Master注册Spark应用程序,然后Master会向指定的Worker发送启动Driver命令,Worker会启动Driver,Dirver启动后会向Master申请资源,Master收到请求后会指定Worker分配资源,收到请求的Worker会启动Executor,然后Driver会向Executor发送任务,收到任务的Executor执行完任务后会向Driver反向注册并返回结果。

        Spark高可用:

        • 只有单节点Master时存在单点故障问题,可以通过配置Spark的高可用。配置多个Master注册到Zookeeper并由zookeeper管理,当Active的Master故障后zookeeper会将standby的Master这是为Active的状态,待故障的节点修复好重启后,会变为standby的状态,不会和当前处于Active的Master进行状态的切换。Spark高可用后提交任务是 Master 需要填两个,因为不知道那个是master。
    2. Yarn :

      • 使用YARN组件进行资源调度与任务分配。Spark客户端直接连接Yarn,不需要额外构建Spark集群。

      • ExecutorLauncher:NodeManager上的一个线程,执行的还是AppMaster的main方法,类似封装了AM。

      • ExecutorBackend:NodeManager上的一个进程,里面封装了Executor对象。

        • 'YarnClient' : Dirver运行在本地。Spark-Submit提交任务后在本地启动Driver,Driver会初始化SC,并对任务进行划分。然后向RM申请启动ExecutorLauncher,RM收到申请后会选择一台NM启动ExecutorLauncher,EL启动后会向RM申请资源,然后EL会在申请到资源的节点上启动ExecutorBackend,EB启动后会创建Executor对象,最后Driver会向Executor发送任务,待Executor任务执行完后会向Driver反向注册返回任务执行结果。
        • 'YarnCluster': Driver运行在集群内。通过Spark-Submit提交任务会在本地客户端执行main方法,然后封装并向RM发送指令,RM收到请求后会选择一台NM启动AM,AM内会启动Driver线程执行用户作业,初始化SC,并对任务进行切分。然后Driver向RM申请资源,并向申请到资源的NM启动EB,EB启动后会创建Executor对象然后Driver向Executor分配任务,待Executor执行完任务和向Driver返回计算结果。

        注意:1.集群模式下,Driver会和Executor进行内网通信,并且Driver启动在服务器节点比本地节点好。
        2.Spark Yarn模式默认使用hadoop集群配置文件。

    3. Mesos:

      • 使用Mesos平台进行资源与任务的调度。

      说明:Spark 3.0 还支持跑在 kubernetes(K8S) 上,K8S用来管理docker。

Spark 常用端口:

  • 4040 Spark正在运行的应用程序的端口号,运行结束看不到,每个spark应用程序会占用一个端口号,再来一个会累加。
  • 7077 是 Master 和 Worker的内部通信端口。
  • 8032 RM 和 NM 的内部通信端口。
  • 8080 Master的默认web配置高可用时需要改,避免和ZK端口冲突。

补充:

  1. 每个worker 默认启动8个核心数, 每个executor给1g内存。
  2. SparkContext是SparkCore的程序入口。
  3. Spark是SparkSQL的程序入口。
  4. 'spark-submit'用于将jar包上传到集群。
  5. 'spark-shell'是一个命令工具,本身是一个Application,是一个阻塞式的sparksbumit。
posted @ 2021-05-31 14:49  yuexiuping  阅读(162)  评论(0编辑  收藏  举报