【大数据】Spark 体系(一)

Spark

一、Spark基础入门(环境搭建、入门概念)

1. Spark 框架概述

1.1 Spark 是什么

  • 定义:Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎
    【大数据】Spark 体系(一)_第1张图片
  • Spark是一款分布式内存计算的统一分析引擎。
  • 其特点就是对任意类型的数据进行自定义计算。
  • Spark可以计算:结构化、半结构化、非结构化等各种类型的数据结构,同时也支持使用Python、Java、Scala、R以及SQL语言去开发应用程序计算数据。
  • Spark的适用面非常广泛,所以,被称之为 统一的(适用面广)的分析引擎(数据处理)

1.2 Spark风雨十年

【大数据】Spark 体系(一)_第2张图片

1.3 Spark VS Hadoop(MapReduce)

【大数据】Spark 体系(一)_第3张图片

  • 尽管Spark相对于Hadoop而言具有较大优势,但Spark并不能完全替代Hadoop
  • 在计算层面,Spark相比较MR(MapReduce)有巨大的性能优势,但至今仍有许多计算工具基于MR构架,比如非常成熟的Hive
  • Spark仅做计算,而Hadoop生态圈不仅有计算(MR)也有存储(HDFS)和资源管理调度(YARN),HDFS和YARN仍是许多大数据体系的核心架构。
  • Hadoop的基于进程的计算和Spark基于线程方式优缺点?
  • 答案:Hadoop中的MR中每个map/reduce task都是一个java进程方式运行,好处在于进程之间是互相独立的,每个task独享进程资源,没
    有互相干扰,监控方便,但是问题在于task之间不方便共享数据,执行效率比较低。比如多个map task读取不同数据源文件需要将数据源加载到每个map task中,造成重复加载和浪费内存。而基于线程的方式计算是为了数据共享和提高执行效率,Spark采用了线程的最小的执行单位,但缺点是线程之间会有资源竞争。

1.4 Spark四大特点

  • 速度快
    • 由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。
    • Spark处理数据与MapReduce处理数据相比,有如下两个不同点:
      • 其一、Spark处理数据时,可以将中间处理结果数据存储到内存中;
      • 其二、Spark 提供了非常丰富的算子(API), 可以做到复杂任务在一个Spark 程序中完成.
  • 易于使用
    • Spark 的版本已经更新到 Spark 3.2.0(截止日期2021.10.13),支持了包括 Java、Scala、Python 、R和SQL语言在内的多种语言。为了兼容Spark2.x企业级应用场景,Spark仍然持续更新Spark2版本。
  • 通用性强
    • 在 Spark 的基础上,Spark 还提供了包括Spark SQL、Spark Streaming、MLib 及GraphX在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。
      【大数据】Spark 体系(一)_第4张图片
  • 运行方式
    • Spark 支持多种运行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone的独立运行模式,同时也可以运行在云Kubernetes(Spark 2.3开始支持)上。
      【大数据】Spark 体系(一)_第5张图片
    • 对于数据源而言,Spark 支持从HDFS、HBase、Cassandra 及 Kafka 等多种途径获取数据。

1.5 Spark 框架模块

  • 整个Spark 框架模块包含:Spark Core、 Spark SQL、 Spark Streaming、 Spark GraphX、 Spark MLlib,而后四项的能力都是建立在核心引擎之上
    【大数据】Spark 体系(一)_第6张图片

1.6 Spark的运行模式

  • Spark提供多种运行模式,包括:
    • 本地模式(单机)
      • 本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境
    • Standalone模式(集群)
      • Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境
    • Hadoop YARN模式(集群)
      • Spark中的各个角色运行在YARN的容器内部,并组成Spark集群环境
    • Kubernetes模式(容器集群)
      • Spark中的各个角色运行在Kubernetes的容器内部,并组成Spark集群环境
    • 云服务模式(运行在云平台上)
      【大数据】Spark 体系(一)_第7张图片

1.7 Spark的架构角色

  • YARN角色回顾
    • YARN主要有4类角色,从2个层面去看:
      • 资源管理层面
        • 集群资源管理者(Master):ResourceManager
        • 单机资源管理者(Worker):NodeManager
      • 任务计算层面
        • 单任务管理者(Master):ApplicationMaster
        • 单任务执行者(Worker):Task(容器内计算框架的工作角色)
          【大数据】Spark 体系(一)_第8张图片
  • Spark运行角色
    【大数据】Spark 体系(一)_第9张图片
    【大数据】Spark 体系(一)_第10张图片

1.8 总结

  • Spark解决什么问题?
    • 海量数据的计算,可以进行离线批处理以及实时流计算
  • Spark有哪些模块?
    • 核心SparkCore、SQL计算(SparkSQL)、流计算(SparkStreaming)、图计算(GraphX)、机器学习(MLlib)
  • Spark特点有哪些?
    • 速度快、使用简单、通用性强、多种模式运行
  • Spark的运行模式?
    • 本地模式
    • 集群模式(StandAlone、YARN、K8S)
    • 云模式
  • Spark的运行角色(对比YARN)?
    • Master:集群资源管理(类同ResourceManager)
    • Worker:单机资源管理(类同NodeManager)
    • Driver:单任务管理者(类同ApplicationMaster)
    • Executor:单任务执行者(类同YARN容器内的Task)

2. Spark 环境搭建 - Local

2.1 服务器环境

  • 使用三台Linux虚拟机服务器来学习, 三台虚拟机的功能分配是:
    • node1: Master(HDFS\YARN\Spark) 和 Worker(HDFS\ YARN\ Spark)
    • node2: Worker(HDFS\ YARN\ Spark)
    • node3: Worker(HDFS\ YARN\ Spark) 和 Hive
  • 集群环境的搭建
    • 方式1:自行搭建
      • 创建三台Linux虚拟机,服务器集群即可, 满足如下要求:
        • 已部署好Hadoop集群(HDFS\YARN), 要求版本Hadoop3以上
        • JDK 1.8
        • 操作系统CentOS 7 (建议7.6)
    • 方式2:使用课程中提供的虚拟机
      • 3台虚拟机的压缩包,解压后导入VMWare即可, 要求:
        • VMWare WorkStation 要求版本 15或更高
        • VMWare的网段设置为 192.168.88.0网段

2.2 基本原理

  • 本质:启动一个JVM Process进程(一个进程里面有多个线程),执行任务Task
  • Local模式可以限制模拟Spark集群环境的线程数量, 即Local[N] 或 Local[*]
  • 其中N代表可以使用N个线程,每个线程拥有一个cpu core。如果不指定N,
    则默认是1个线程(该线程有1个core)。 通常Cpu有几个Core,就指定几个
    线程,最大化利用计算能力.
  • 如果是local[*],则代表 Run Spark locally with as many worker threads as
    logical cores on your machine.按照Cpu最多的Cores设置线程数
    【大数据】Spark 体系(一)_第11张图片
  • Local 下的角色分布:
    • 资源管理:
      • Master:Local进程本身
      • Worker:Local进程本身
    • 任务执行:
      • Driver:Local进程本身
      • Executor:不存在,没有独立的Executor角色, 由Local进程(也就是Driver)内的线程提供计算能力
    • PS: Driver也算一种特殊的Executor, 只不过多数时候, 我们将Executor当做纯Worker对待, 这样和Driver好区分(一类是管理 一类是工人)
    • 注意: Local模式只能运行一个Spark程序, 如果执行多个Spark程序, 那就是由多个相互独立的Local进程在执行

2.3 搭建(Spark Local环境部署)

2.3.1 条件
  • PYTHON 推荐3.8
  • JDK 1.8
2.3.2 Anaconda On Linux 安装
  • 上传安装包:
    • 上传: 提供的Anaconda3-2021.05-Linux-x86_64.sh文件到Linux服务器上
  • 安装:
    • sh ./Anaconda3-2021.05-Linux-x86_64.sh
      【大数据】Spark 体系(一)_第12张图片
      【大数据】Spark 体系(一)_第13张图片
      在这里插入图片描述
      【大数据】Spark 体系(一)_第14张图片
      【大数据】Spark 体系(一)_第15张图片
      在这里插入图片描述
  • 看到这个Base开头表明安装好了.
  • base是默认的虚拟环境.
2.3.3 解压
  • 解压下载的Spark安装包

tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /export/server/

2.3.4 环境变量
  • 配置Spark由如下5个环境变量需要设置
    • SPARK_HOME: 表示Spark安装路径在哪里
    • PYSPARK_PYTHON: 表示Spark想运行Python程序, 那么去哪里找python执行器
    • JAVA_HOME: 告知Spark Java在哪里
    • HADOOP_CONF_DIR: 告知Spark Hadoop的配置文件在哪里
    • HADOOP_HOME: 告知Spark Hadoop安装在哪里
  • 这5个环境变量 都需要配置在: /etc/profile
    【大数据】Spark 体系(一)_第16张图片
  • PYSPARK_PYTHON和 JAVA_HOME 需要同样配置在: /root/.bashrc
    在这里插入图片描述
2.3.5 上传Spark安装包
  • 提供了: spark-3.2.0-bin-hadoop3.2.tgz
  • 上传这个文件到Linux服务器中
  • 将其解压, 将其解压(安装)到: /export/server内.
  • tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /export/server/
  • 由于spark目录名称很长, 给其一个软链接:
  • ln -s /export/server/spark-3.2.0-bin-hadoop3.2 /export/server/spark
    【大数据】Spark 体系(一)_第17张图片
    【大数据】Spark 体系(一)_第18张图片
2.3.6 测试
  • bin/pyspark
    • bin/pyspark 程序, 可以提供一个 交互式的 Python解释器环境, 在这里面可以写普通python代码, 以及spark代码
      【大数据】Spark 体系(一)_第19张图片
      在这里插入图片描述
    • 在这个环境内, 可以运行spark代码
    • 图中的: parallelizemap 都是spark提供的API
    • sc.parallelize([1,2,3,4,5]).map(lambda x: x + 1).collect()
  • WEB UI (4040)
    • Spark程序在运行的时候, 会绑定到机器的4040端口上.
    • 如果4040端口被占用, 会顺延到4041 … 4042…
      【大数据】Spark 体系(一)_第20张图片
    • 4040端口是一个WEBUI端口, 可以在浏览器内打开:
    • 输入:服务器ip:4040 即可打开:
      【大数据】Spark 体系(一)_第21张图片
    • 打开监控页面后, 可以发现 在程序内仅有一个Driver
    • 因为我们是Local模式, Driver即管理 又 干活.
    • 同时, 输入jps
      【大数据】Spark 体系(一)_第22张图片
    • 可以看到local模式下的唯一进程存在
    • 这个进程 即是master也是worker
  • bin/spark-submit (PI)
    • 作用: 提交指定的Spark代码到Spark环境中运行
    • 使用方法:
# 语法
bin/spark-submit [可选的一些选项] jar包或者python代码的路径 [代码的参数]

# 示例
bin/spark-submit /export/server/spark/examples/src/main/python/pi.py 10
# 此案例 运行Spark官方所提供的示例代码 来计算圆周率值.  后面的10 是主函数接受的参数, 数字越高, 计算圆周率越准确.
2.3.7 对比
* bin/spark-submit bin/pyspark bin/spark-shell
功能 提交java\scala\python代码到spark中运行 提供一个python
解释器环境用来以python代码执行spark程序 提供一个scala
解释器环境用来以scala代码执行spark程序
特点 提交代码用 解释器环境 写一行执行一行 解释器环境 写一行执行一行
使用场景 正式场合, 正式提交spark程序运行 测试\学习\写一行执行一行\用来验证代码等 测试\学习\写一行执行一行\用来验证代码等
2.3.8 开箱即用
  • 直接启动bin目录下的spark-shell:
    • /export/server/spark/bin/spark-shell
  • 运行成功以后,有如下提示信息:
    【大数据】Spark 体系(一)_第23张图片

2.4 总结

  • Local模式的运行原理?
    • Local模式就是以一个独立进程配合其内部线程来提供完成Spark运行时环境. Local模式可以通过spark-shell/pyspark/spark-submit等来开启
  • bin/pyspark是什么程序?
    • 是一个交互式的解释器执行环境,环境启动后就得到了一个Local Spark环境,可以运行Python代码去进行Spark计算,类似Python自带解释器
  • Spark的4040端口是什么?
    • Spark的任务在运行后,会在Driver所在机器绑定到4040端口,提供当前任务的监控页面供查看

3. Spark 环境搭建 - Standalone

3.1 Standalone 架构

  • Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模
    式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。
  • StandAlone 是完整的Spark运行环境,其中:
    • Master角色以Master进程存在, Worker角色以Worker进程存在
    • Driver和Executor运行于Worker进程内, 由Worker提供资源供给它们运行
      【大数据】Spark 体系(一)_第24张图片
  • StandAlone集群在进程上主要有3类进程:
    • 主节点Master进程:
      • Master角色, 管理整个集群资源,并托管运行各个任务的Driver
    • 从节点Workers:
      • Worker角色, 管理每个机器的资源,分配对应的资源来运行Executor(Task);
      • 每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数
    • 历史服务器HistoryServer(可选):
      • Spark Application运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息。
        【大数据】Spark 体系(一)_第25张图片
        【大数据】Spark 体系(一)_第26张图片

3.2 Standalone 环境安装操作(Spark StandAlone环境部署)

3.2.1 新角色 历史服务器
  • 历史服务器不是Spark环境的必要组件, 是可选的.

  • 回忆: 在YARN中 有一个历史服务器, 功能: 将YARN运行的程序的历史日志记录下来, 通过历史服务器方便用户查看程序运行的历史信息.

  • Spark的历史服务器, 功能: 将Spark运行的程序的历史日志记录下来, 通过历史服务器方便用户查看程序运行的历史信息.

  • 搭建集群环境, 我们一般推荐将历史服务器也配置上, 方面以后查看历史记录

3.2.2 集群规划
  • 使用三台Linux虚拟机来组成集群环境,分别是:
    • node1\ node2\ node3
    • node1运行: Spark的Master进程 和 1个Worker进程
    • node2运行: Spark的1个Worker进程
    • node3运行: Spark的1个Worker进程
    • 整个集群提供: 1个Master进程 和 3个Worker进程
3.2.3 在所有机器安装Python(Anaconda)
  • 参考 以上内容, 如何在Linux上安装anaconda
  • 同时不要忘记 都创建pyspark虚拟环境 以及安装虚拟环境所需要的包pyspark jieba pyhive
3.2.4 在所有机器配置环境变量
  • 参考 Local模式下 环境变量的配置内容
  • 确保3台都配置
3.2.5 配置配置文件
  • 进入到spark的配置文件目录中, cd $SPARK_HOME/conf
  • 配置workers文件
# 改名, 去掉后面的.template后缀
mv workers.template workers

# 编辑worker文件
vim workers
# 将里面的localhost删除, 追加
node1
node2
node3
到workers文件内

# 功能: 这个文件就是指示了  当前SparkStandAlone环境下, 有哪些worker
  • 配置spark-env.sh文件
# 1. 改名
mv spark-env.sh.template spark-env.sh

# 2. 编辑spark-env.sh, 在底部追加如下内容

## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk

## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop

## 指定spark老大Master的IP和提交任务的通信端口
# 告知Spark的master运行在哪个机器上
export SPARK_MASTER_HOST=node1
# 告知sparkmaster的通讯端口
export SPARK_MASTER_PORT=7077
# 告知spark master的 webui端口
SPARK_MASTER_WEBUI_PORT=8080

# worker cpu可用核数
SPARK_WORKER_CORES=1
# worker可用内存
SPARK_WORKER_MEMORY=1g
# worker的工作通讯地址
SPARK_WORKER_PORT=7078
# worker的 webui地址
SPARK_WORKER_WEBUI_PORT=8081

## 设置历史服务器
# 配置的意思是  将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"
  • 注意, 上面的配置的路径 要根据你自己机器实际的路径来写
  • 在HDFS上创建程序运行历史记录存放的文件夹:
hadoop fs -mkdir /sparklog
hadoop fs -chmod 777 /sparklog
  • 配置spark-defaults.conf文件
# 1. 改名
mv spark-defaults.conf.template spark-defaults.conf

# 2. 修改内容, 追加如下内容
# 开启spark的日期记录功能
spark.eventLog.enabled 	true
# 设置spark日志记录的路径
spark.eventLog.dir	 hdfs://node1:8020/sparklog/ 
# 设置spark日志是否启动压缩
spark.eventLog.compress 	true
  • 配置log4j.properties 文件 [可选配置]
# 1. 改名
mv log4j.properties.template log4j.properties

# 2. 修改内容 参考下图
# 这个文件的修改不是必须的,  为什么修改为WARN. 因为Spark是个话痨
# 会疯狂输出日志, 设置级别为WARN 只输出警告和错误日志, 不要输出一堆废话.

【大数据】Spark 体系(一)_第27张图片

3.2.6 将Spark安装文件夹 分发到其它的服务器上
scp -r spark-3.1.2-bin-hadoop3.2 node2:/export/server/
scp -r spark-3.1.2-bin-hadoop3.2 node3:/export/server/
  • 不要忘记, 在node2和node3上 给spark安装目录增加软链接
  • ln -s /export/server/spark-3.1.2-bin-hadoop3.2 /export/server/spark
3.2.7 检查
  • 检查每台机器的:
    • JAVA_HOME
    • SPARK_HOME
    • PYSPARK_PYTHON
    • 等等 环境变量是否正常指向正确的目录
3.2.8 启动历史服务器

sbin/start-history-server.sh

3.2.9 启动Spark的Master和Worker进程
# 启动全部master和worker
sbin/start-all.sh

# 或者可以一个个启动:
# 启动当前机器的master
sbin/start-master.sh
# 启动当前机器的worker
sbin/start-worker.sh

# 停止全部
sbin/stop-all.sh

# 停止当前机器的master
sbin/stop-master.sh

# 停止当前机器的worker
sbin/stop-worker.sh
3.2.10 查看Master的WEB UI
  • 默认端口master我们设置到了8080
  • 如果端口被占用, 会顺延到8081 …;8082… 8083… 直到申请到端口为止
  • 可以在日志中查看, 具体顺延到哪个端口上:
    Service 'MasterUI' could not bind on port 8080. Attempting port 8081.
    【大数据】Spark 体系(一)_第28张图片
3.2.11 连接到StandAlone集群
  • bin/pyspark
bin/pyspark --master spark://node1:7077
# 通过--master选项来连接到 StandAlone集群
# 如果不写--master选项, 默认是local模式运行

【大数据】Spark 体系(一)_第29张图片

  • bin/spark-shell
bin/spark-shell --master spark://node1:7077
# 同样适用--master来连接到集群使用

// 测试代码
sc.parallelize(Array(1,2,3,4,5)).map(x=> x + 1).collect()
  • bin/spark-submit (PI)
bin/spark-submit --master spark://node1:7077 /export/server/spark/examples/src/main/python/pi.py 100
# 同样使用--master来指定将任务提交到集群运行
3.2.12 查看历史服务器WEB UI
  • 历史服务器的默认端口是: 18080
  • 我们启动在node1上, 可以在浏览器打开:
  • node1:18080来进入到历史服务器的WEB UI上.
    【大数据】Spark 体系(一)_第30张图片
3.2.13 注意
  • 集群模式下程序是在集群上运行的,不要直接读取本地文件,应该读取hdfs上的
  • 因为程序运行在集群上,具体在哪个节点上我们运行并不知道,其他节点可能并没有那个数据文件

3.3 Spark 应用架构

【大数据】Spark 体系(一)_第31张图片

  • 登录到Spark HistoryServer历史服务器WEB UI界面,点击刚刚运行圆周率PI程序:
    【大数据】Spark 体系(一)_第32张图片
  • 查看应用运行状况:
    【大数据】Spark 体系(一)_第33张图片
  • 切换到【Executors】Tab页面:
    【大数据】Spark 体系(一)_第34张图片
  • 从图中可以看到Spark Application运行到集群上时,由两部分组成:Driver Program和Executors。
  • 第一、Driver Program
    • 相当于AppMaster,整个应用管理者,负责应用中所有Job的调度执行;
    • 运行JVM Process,运行程序的MAIN函数,必须创建SparkContext上下文对象;
    • 一个SparkApplication仅有一个;
  • 第二、Executors
    • 相当于一个线程池,运行JVM Process,其中有很多线程,每个线程运行一个Task任务,一个Task任务运行需要1 Core CPU,所有可以认为Executor中线程数就等于CPU Core核数;
    • 一个Spark Application可以有多个,可以设置个数和资源信息;
  • 用户程序从最开始的提交到最终的计算执行,需要经历以下几个阶段:
  • 1)、用户程序创建 SparkContext 时,新创建的 SparkContext 实例会连接到 ClusterManager。 Cluster Manager 会根据用户
    提交时设置的 CPU 和内存等信息为本次提交分配计算资源,启动 Executor。
  • 2)、Driver会将用户程序划分为不同的执行阶段Stage,每个执行阶段Stage由一组完全相同Task组成,这些Task分别作用于待处
    理数据的不同分区。在阶段划分完成和Task创建后, Driver会向Executor发送 Task;
  • 3)、Executor在接收到Task后,会下载Task的运行时依赖,在准备好Task的执行环境后,会开始执行Task,并且将Task的运行状态
    汇报给Driver;
  • 4)、Driver会根据收到的Task的运行状态来处理不同的状态更新。 Task分为两种:一种是Shuffle Map Task,它实现数据的重新
    洗牌,洗牌的结果保存到Executor 所在节点的文件系统中;另外一种是Result Task,它负责生成结果数据;
  • 5)、Driver 会不断地调用Task,将Task发送到Executor执行,在所有的Task 都正确执行或者超过执行次数的限制仍然没有执行成
    功时停止;

3.4 Spark 程序运行层次结构

  • 在前面我们接触到了不少的监控页面,有4040,有8080,有18080,它们有何区别吗?
  • 4040: 是一个运行的Application在运行的过程中临时绑定的端口,用以查看当前任务的状态.4040被占用会顺延到4041.4042等
    • 4040是一个临时端口,当前程序运行完成后, 4040就会被注销哦
  • 8080: 默认是StandAlone下, Master角色(进程)的WEB端口,用以查看当前Master(集群)的状态
  • 18080: 默认是历史服务器的端口, 由于每个程序运行完成后,4040端口就被注销了. 在以后想回看某个程序的运行状态就可以通过历史
    服务器查看,历史服务器长期稳定运行,可供随时查看被记录的程序的运行过程.
  • 运行起来一个Spark Application, 然后打开其4040端口,并查看:
    /export/server/spark/bin/spark-shell --master spark://node1.itcast.cn:7077
  • 在node1运行pyspark-shell,WEB UI监控页面地址:http://node1:4040
    【大数据】Spark 体系(一)_第35张图片
  • 可以发现在一个Spark Application中,包含多个Job,每个Job有多个Stage组成,每个Job执行按照DAG图进行的。
  • 其中每个Stage中包含多个Task任务,每个Task以线程Thread方式执行,需要1Core CPU。
    【大数据】Spark 体系(一)_第36张图片
  • Spark Application程序运行时三个核心概念:Job、Stage、Task,说明如下:
    • Job:由多个 Task 的并行计算部分,一般 Spark 中的 action 操作(如 save、collect,后面进一步说明),会生成一个 Job。
    • Stage:Job 的组成单位,一个 Job 会切分成多个 Stage,Stage 彼此之间相互依赖顺序执行,而每个 Stage 是多个 Task 的集合,类似 map 和 reduce stage。
    • Task:被分配到各个 Executor 的单位工作内容,它是 Spark 中的最小执行单位,一般来说有多少个 Paritition(物理层面的概念,即分支可以理解为将数据划分成不同部分并行处理),就会有多少个 Task,每个 Task 只会处理单一分支上的数据。

3.5 总结

  • StandAlone的原理?
    • Master和Worker角色以独立进程的形式存在,并组成Spark运行时环境(集群)
  • Spark角色在StandAlone中的分布?
    • Master角色:Master进程,
    • Worker角色:Worker进程,
    • Driver角色和Executor角色:以线程运行在Worker中
  • Standalone如何提交Spark应用?
    • bin/spark-submit --master spark://server:7077
  • 4040\8080\18080分别是什么?
    • 4040是单个程序运行的时候绑定的端口可供查看本任务运行情况
  • Job\State\Task的关系?
    • 一个Spark程序会被分成多个子任务(Job)运行, 每一个Job会分成多个State(阶段)来运行, 每一个State内会分出来多个Task(线程)来执行具体任务

你可能感兴趣的:(大数据,big,data,spark)