spark ignition模块 fluent spark模型官网_linux



Spark第二天【SparkCore内容】

主要内容

  1. Spark集群搭建
  2. Spark Spark Pi任务提交
  3. Spark on Yarn 配置
  4. Spark基于Standalone任务提交两种模式
  5. Spark基于Yarn任务提交两种模式
  6. Spark部分Transformation算子
  7. Spark部分Action算子

学习目标

spark ignition模块 fluent spark模型官网_hadoop_02

第一节 Spark 集群搭建
  1. Standalone 集群搭建与 Spark on Yarn 配置
     Standalone
    Standalone 集群是 Spark 自带的资源调度框架,支持分布式搭建,这里建议搭建 Standalone 节点数为 3 台,1 台 master 节点,2 台 worker 节点,这虚拟机中每台节点的内存至少给 2G 和 2 个 core,这样才能保证后期 Spark 基于 Standalone 的正常运行。搭建 Standalone 集群的步骤如下:
    1).下载安装包,解压
    登录 Spark 官网下载 Spark,官网地址:https://spark.apache.org 点击 “Download” 找到 “ Spark release archives ” 找到对应的 Spark 版本下载。这里选择 Spark2.3.1 版本下载。
    将下载好的 Spark 安装包上传到 Spark Master 节点,解压:
    2).改名
    3).进入安装包的 conf 目录下,修改或者复制 slaves.template文件,去掉 template 后缀,在新的 slaves 文件中添加从节点。保存。

    在 slaves 中配置 worker 节点:
    4).复制 $SPARK_HOME/conf/spark-env.sh.template 为 spark-env.sh,修改 spark-env.sh 内容:
    SPARK_MASTER_HOST:master 的 ip
    SPARK_MASTER_PORT:提交任务的端口,默认是 7077
    SPARK_WORKER_CORES:每个 worker 从节点能够支配的 core 的个数
    SPARK_WORKER_MEMORY:每个 worker 从节点能够支配的内存数
    JAVA_HOME:java 的 home,这里需要 jdk8
    5).同步到其他节点上
    6).启动集群
    进入 sbin 目录下,执行当前目录下的 ./start-all.sh
    7).搭建客户端
    将 spark 安装包原封不动的拷贝到一个新的节点上,然后,在新的节点上提交任务即可。
    注意:
  • 8080 是 Spark WEBUI 界面的端口,7077 是 Spark 任务提交的端口。
  • 修改 master 的 WEBUI 端口:
  • 修改 $SPARK_HOME/conf/spark-env.sh 即可【建议使用】:
  • 修改 start-master.sh 即可。
  • 也可以在 Master 节点上导入临时环境变量,只是作用于之后的程序,重启就无效了。
  • 删除临时环境变量:
  • yarn
    Spark 也可以基于 Yarn 进行任务调度,这就是所谓的 Spark on Yarn,Spark 基于 Yarn 进行任务调度只需要在 Spark 客户端做如下配置即可:
    同时这里需要在每台 NodeManager 节点中将每台 NodeManager 的虚拟内存关闭,在每台 NodeManager 节点的 $HADOOP_HOME/etc/hadoop/yarn-site.xml中加入如下配置:
<!-- 关闭虚拟内存检查 -->
<property>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>
  1. Spark Pi任务测试
    Spark PI案例:
  2. spark ignition模块 fluent spark模型官网_java_03

  3. Standalone 提交命令:
./spark-submit --master spark://mynode1:7077 --class
org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100

Spark on YARN 提交命令:

./spark-submit --master yarn --class 
org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
第二节 Spark 基于 Standalone 模式提交任务

Standalone 模式两种提交任务方式

  1. Standalone-client 提交任务方式
  • 提交命令
./spark-submit --master spark://mynode1:7077  
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100

或者

./spark-submit --master spark://mynode1:7077 
--deploy-mode client  
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
  • 执行原理图解
  • spark ignition模块 fluent spark模型官网_大数据_04


  • 执行流程
  1. client 模式提交任务后,会在客户端启动 Driver 进程。
  2. Driver 会向 Master 申请启动 Application 启动的资源。
  3. Master 收到请求之后会在对应的 Worker 节点上启动 Executor
  4. Executor 启动之后,会注册给 Driver 端,Driver 掌握一批计算资源。
  5. Driver 端将 task 发送到 worker 端执行。worker 将 task 执行结果返回到 Driver 端。
  • 总结
    client 模式适用于测试调试程序。Driver 进程是在客户端启动的,这里的客户端就是指提交应用程序的当前节点。在 Driver 端可以看到 task 执行的情况。生产环境下不能使用 client 模式,是因为:假设要提交 100 个 application 到集群运行,Driver 每次都会在 client 端启动,那么就会导致客户端 100 次网卡流量暴增的问题。client 模式适用于程序测试,不适用于生产环境,在客户端可以看到 task 的执行和结果
  1. Standalone-cluster 提交任务方式
  • 提交命令
./spark-submit --master spark://mynode1:7077 
--deploy-mode cluster
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
  • 执行原理图解
  • spark ignition模块 fluent spark模型官网_hadoop_05


  • 执行流程
  1. cluster 模式提交应用程序后,会向 Master 请求启动 Driver.
  2. Master 接受请求,随机在集群一台节点启动 Driver 进程。
  3. Driver 启动后为当前的应用程序申请资源。
  4. Driver 端发送 task 到 worker 节点上执行。
  5. worker 将执行情况和执行结果返回给 Driver 端。
  • 总结
    Driver 进程是在集群某一台 Worker 上启动的,在客户端是无法查看 task 的执行情况的。假设要提交 100 个 application 到集群运行,每次 Driver 会随机在集群中某一台 Worker 上启动,那么这 100 次网卡流量暴增的问题就散布在集群上。
  • 总结 Standalone 两种方式提交任务,Driver 与集群的通信包括:
  1. Driver 负责应用程序资源的申请
  2. 任务的分发。
  3. 结果的回收。
  4. 监控 task 执行情况。
第三节 Spark 基于 Yarn 模式提交任务

Yarn 模式两种提交任务方式

1. yarn-client 提交任务方式

  • 提交命令
./spark-submit 
--master yarn
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100

或者

./spark-submit 
--master yarn–client
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100

或者

./spark-submit 
--master yarn 
--deploy-mode  client 
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
  • 执行原理图解
  • spark ignition模块 fluent spark模型官网_java_06

  • 执行流程

  1. 客户端提交一个 Application,在客户端启动一个 Driver 进程。
  2. 应用程序启动后会向 RS(ResourceManager) 发送请求,启动 AM(ApplicationMaster) 的资源。
  3. RS 收到请求,随机选择一台 NM(NodeManager) 启动 AM。这里的 NM 相当于 Standalone 中的 Worker 节点。
  4. AM 启动后,会向 RS 请求一批 container 资源,用于启动 Executor.
  5. RS 会找到一批 NM 返回给 AM , 用于启动 Executor。
  6. AM 会向 NM 发送命令启动 Executor。
  7. Executor 启动后,会反向注册给 Driver,Driver 发送 task 到 Executor , 执行情况和结果返回给 Driver 端。
  • 总结
    Yarn-client 模式同样是适用于测试,因为 Driver 运行在本地,Driver 会与 yarn 集群中的 Executor 进行大量的通信,会造成客户机网卡流量的大量增加.
    • ApplicationMaster 的作用:
    1. 为当前的 Application 申请资源
    2. 给 NameNode 发送消息启动 Executor。
      注意:ApplicationMaster 有 launchExecutor 和申请资源的功能,并没有作业调度的功能。

2. yarn-cluster 提交任务方式

  • 提交命令
./spark-submit 
--master yarn 
--deploy-mode cluster 
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100

或者

./spark-submit 
--master yarn-cluster
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
  • 执行原理图解
  • spark ignition模块 fluent spark模型官网_hadoop_07


  • 执行流程
  1. 客户机提交 Application 应用程序,发送请求到 RS(ResourceManager) , 请求启动 AM(ApplicationMaster)。
  2. RS 收到请求后随机在一台 NM(NodeManager) 上启动 AM(相当于 Driver端)。
  3. AM 启动,AM 发送请求到 RS,请求一批 container 用于启动 Executor。
  4. RS 返回一批 NM 节点给 AM。
  5. AM 连接到 NM , 发送请求到 NM 启动 Executor。
  6. Executor 反向注册到AM所在的节点的 Driver。Driver 发送 task 到 Executor。
  • 总结
    Yarn-Cluster 主要用于生产环境中,因为 Driver 运行在 Yarn 集群中某一台 nodeManager 中,每次提交任务的 Driver 所在的机器都是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。只能通过 yarn 查看日志。

  • ApplicationMaster 的作用:

  1. 为当前的 Application 申请资源
  2. 给 NameNode 发送消息启动 Excutor。
  3. 任务调度。
  • 停止集群任务命令:yarn application -kill applicationID
第四节 Spark 补充 Transformation 算子

transformation

  • join , leftOuterJoin , rightOuterJoin , fullOuterJoin
    作用在 K , V 格式的 RDD 上。根据 K 进行连接,对(K,V)join(K,W) 返回(K,(V,W))
    • join 后的分区数与父 RDD 分区数多的那一个相同。
  • union
    合并两个数据集。两个数据集的类型要一致。
    • 返回新的 RDD 的分区数是合并 RDD 分区数的总和。
  • intersection
    取两个数据集的交集,返回新的 RDD 与父 RDD 分区多的一致
  • subtract
    取两个数据集的差集,结果 RDD 的分区数与 subtract 前面的 RDD 的分区数一致。
  • mapPartitions
    与 map 类似,遍历的单位是每个 partition 上的数据。
  • distinct(map+reduceByKey+map)
  • cogroup
    当调用类型(K,V)和(K,W)的数据上时,返回一个数据集(K,(Iterable<V>,Iterable<W>)),子 RDD 的分区与父 RDD 多的一致。
第五节 Spark 补充 Action 算子

action

  • foreachPartition
    遍历的数据是每个 partition 的数据。
  • collectAsMap
    对 K,V 格式的 RDD 数据回收转换成 Map<K,V>
  • takeSample(boolean,num,seed)
    takeSample 可以对 RDD 中的数据随机获取 num 个,第一个参数是有无放回,第二个参数是随机获取几个元素,第三个参数如果固定,那么每次获取的数据固定。
  • top(num)
    对 RDD 中的所有元素进行由大到小排序,获取前 num 个元素返回。
  • takeOrdered(num)
    对 RDD 中的所有元素进行由小到大的排序,获取前 num 个元素返回。

本节作业

  1. Spark 集群搭建步骤和注意问题?
  2. Spark 基于 Standalone 任务提交两种模式流程及特点?
  3. Spark 基于 Yarn 任务提交两种模式流程及特点?
  4. 所有算子代码敲一遍。