Spark集群结构
-  图  
-  名词解释 - Driver - 该进程调用 Spark 程序的 main 方法,并且启动 SparkContext
 
- Cluster Manager - 该进程负责和外部集群工具打交道,申请或释放集群资源
 
- Worker - 该进程是一个守护进程,负责启动和管理 Executor
 
- Executor - 该进程是一个 JVM 虚拟机,负责运行 Spark Task
 
 
- Driver 
-  运行一个Spark程序大致经历如下几个步骤 - 启动 Driver, 创建SparkContext
- Client 提交程序给Driver, Driver 向 Cluster Manager 申请集群资源
- 资源申请完毕,在 Worker 中启动 Executor
- Driver 将程序转化为 Tasks ,分发给 Executor 执行
 
-  问题 -  问题一:Spark 程序可以运行在什么地方? - Spark 可以将任务运行在两种模式下: - 单机,使用线程模拟并行来运行程序
- 集群,使用集群管理器来和不同类型的集群交互,将任务运行在集群中
 
- Spark 可以使用的集群管理工具有: - Spark Standalone
- Hadoop Yarn
- Apache Mesos
- Kubernetes
 
 
- Spark 可以将任务运行在两种模式下: 
-  问题二:Driver 和 Worker 什么时候被启动? -  Standalone 集群 -  Standalone 集群中,分为两个角色:Master 和 Slave,而 Slave 就是Worker ,所以在 Standalone 集群中,启动之初就会创建固定数量的 Worker 
-  Driver 的启动分为两种模式:Client 和Cluster。在 Client 模式下,Driver 运行在 Client 端,在 Client 启动的时候被启动。在 Cluster 模式下,Driver 运行在某个 Worker 中,随着应用的提交而启动 Spark Standalone图  
 
-  
-  yarn 集群 -  在 Yarn 集群模式下, 也依然分为 Client 模式和 Cluster 模式, 较新的版本中已经逐渐在废弃 Client 模式了, 所以上图所示为 Cluster 模式 
-  如果要在 Yarn 中运行 Spark 程序, 首先会和 RM 交互, 开启 ApplicationMaster, 其中运行了 Driver, Driver创建基础环境后, 会由 RM 提供对应的容器, 运行 Executor, Executor会反向向 Driver 反向注册自己, 并申请 Tasks 执行 
-  在后续的 Spark 任务调度部分, 会更详细介绍 
-  yarn图  
 
-  
 
-  
-  总结 - Master 负责总控, 调度, 管理和协调 Worker, 保留资源状况等
- Slave 对应 Worker 节点, 用于启动 Executor 执行 Tasks, 定期向 Master汇报
- Driver 运行在 Client 或者 Slave(Worker) 中, 默认运行在 Slave(Worker) 中
 
 
-  
Spark集群搭建
-  下载Spark安装包 - https://archive.apache.org/dist/spark/spark-2.2.1/
 
-  上传并解压改名 cd soft rz tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /rootmv /root/spark-2.1.1-bin-hadoop2.7 /root/spark
-  配置 -  修改 spark-env.sh-  进入配置目录, 并复制一份新的配置文件, 以供在此基础之上进行修改 cd /root/spark/conf cp spark-env.sh.template spark-env.sh vi spark-env.sh# 将以下内容复制进配置文件末尾 # 指定 Java Home export JAVA_HOME=/root/jdk# 指定 Spark Master 地址 export SPARK_MASTER_HOST=master export SPARK_MASTER_PORT=7077
 
-  
-  修改配置文件 slaves, 以指定从节点为止, 从在使用 sbin/start-all.sh 启动集群的时候, 可以一键启动整个集群所有的 Worker -  进入配置目录, 并复制一份新的配置文件, 以供在此基础之上进行修改 cd /root/spark/conf cp slaves.template slaves vi slaves# 配置所有节点的地址 master slave1 slave2
 
-  
-  配置 HistoryServer -  默认情况下, Spark 程序运行完毕后, 就无法再查看运行记录的 Web UI 了, 通过 HistoryServer 可以提供一个服务, 通过读取日志文件, 使得我们可以在程序运行结束后, 依然能够查看运行过程 
-  复制 spark-defaults.conf, 以供修改cd /root/spark/conf cp spark-defaults.conf.template spark-defaults.conf vi spark-defaults.conf
-  将以下内容复制到 spark-defaults.conf末尾处, 通过这段配置, 可以指定 Spark 将日志输入到 HDFS 中spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/spark_log spark.eventLog.compress true# (注意:spark.eventLog.dir与Dspark.history.fs.logDirectory的NameNode地址要与$HADOOP_HOME/etc/hadoop下的core-site中的namenode地址相同)
-  将以下内容复制到 spark-env.sh的末尾, 配置 HistoryServer 启动参数, 使得 HistoryServer 在启动的时候读取 HDFS 中写入的 Spark 日志# 指定 Spark History 运行参数 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://master:9000/spark_log"
-  为 Spark 创建 HDFS 中的日志目录 hdfs dfs -mkdir -p /spark_log
 
-  
 
-  
-  分发和运行 -  将 Spark 安装包分发给集群中其它机器 cd /root/ scp -r spark root@slave1:/root/ scp -r spark root@slave2:/root/
-  启动 Spark Master 和 Slaves, 以及 HistoryServer cd /root/spark sbin/start-all.sh sbin/start-history-server.sh
 
-  
-  以上是spark standalone 集群搭建 
Spark 集群高可用搭建
-  目标 - 简要了解如何使用 Zookeeper 帮助 Spark Standalone 高可用 - 对于 Spark Standalone 集群来说, 当 Worker 调度出现问题的时候, 会自动的弹性容错, 将出错的 Task 调度到其它 Worker 执行
- 但是对于 Master 来说, 是会出现单点失败的, 为了避免可能出现的单点失败问题, Spark 提供了两种方式满足高可用 - 使用 Zookeeper 实现 Masters 的主备切换
- 使用文件系统做主备切换
 
 
 
- 简要了解如何使用 Zookeeper 帮助 Spark Standalone 高可用 
-  停止 Spark 集群 cd /root/spark sbin/stop-all.sh
-  修改配置文件, 增加 Spark 运行时参数, 从而指定 Zookeeper 的位置 -  进入spark-env.sh 所在目录, 打开 vi 编辑 cd /root/spark/conf vi spark-env.sh
-  编辑 spark-env.sh, 添加 Spark 启动参数, 并注释SPARK_MASTER_HOST 地址 # 指定 Java Home export JAVA_HOME=/root/jdk# 指定 Spark Master 地址 # export SPARK_MASTER_HOST=master export SPARK_MASTER_PORT=7077# 指定 Spark History 运行参数 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node01:9000/spark_log"# 指定 Spark 运行时参数 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark"
 
-  
-  分发配置文件到整个集群 cd /export/servers/spark/conf scp spark-env.sh slave1:/root/spark/conf scp spark-env.sh slave2:/root/spark/conf
-  启动 -  在 master上启动整个集群 cd /root/spark sbin/start-all.sh sbin/start-history-server.sh
-  在 slave1上单独再启动一个 Master cd /root/spark sbin/start-master.sh
 
-  
-  查看 master master 和 slave1 master 的 WebUI - 你会发现一个是 ALIVE(主), 另外一个是 STANDBY(备)
- 如果关闭一个, 则另外一个成为ALIVE, 但是这个过程可能要持续两分钟左右, 需要耐心等待
 
运行案例测试集群
目标
- 从示例应用运行中理解 Spark 应用的运行流程 - 流程 -  进入 Spark 安装目录中 cd /root/spark/
-  运行 Spark 示例 bin/spark-submit \\ --class org.apache.spark.examples.SparkPi \\ --master spark://master:7077 \\ --executor-memory 1G \\ --total-executor-cores 2 \\ --/root/spark/examples/jars/spark-examples_2.11-2.1.1.jar \\ # 视jar包版本而定 100 # 计算100次
 
-  
 
- 流程