黑马程序员技术交流社区

标题: 【上海校区】理解Spark运行模式(二) [打印本页]

作者: 梦缠绕的时候    时间: 2019-11-20 11:34
标题: 【上海校区】理解Spark运行模式(二)
上一篇说到Spark的yarn client运行模式,它与yarn cluster模式的主要区别就是前者Driver是运行在客户端,后者Driver是运行在yarn集群中。yarn client模式一般用在交互式场景中,比如spark shell, spark sql等程序,但是该模式下运行在客户端的Driver与Yarn集群有大量的网络交互,如果客户端与集群之间的网络不是很好,可能会导致性能问题。因此一般在生产环境中,大部分还是采用yarn cluster模式运行spark程序。
下面具体还是用计算PI的程序来说明,examples中该程序有三个版本,分别采用Scala、Python和Java语言编写。本次用Python程序pi.py做说明。
[url=][/url]
1 from __future__ import print_function 2 3 import sys 4 from random import random 5 from operator import add 6 7 from pyspark.sql import SparkSession 8 9 10 if __name__ == "__main__":11     """12         Usage: pi [partitions]13     """14     spark = SparkSession\15         .builder\16         .appName("PythonPi")\17         .getOrCreate()18 19     partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 220     n = 100000 * partitions21 22     def f(_):23         x = random() * 2 - 124         y = random() * 2 - 125         return 1 if x ** 2 + y ** 2 <= 1 else 026 27     count = spark.sparkContext.parallelize(range(1, n + 1), partitions).map(f).reduce(add)28     print("Pi is roughly %f" % (4.0 * count / n))29 30     spark.stop()[url=][/url]

程序逻辑与上一篇Scala程序一样,就不再多做说明了。
下面来以yarn cluster方式来执行这个程序,注意执行程序前先要启动hdfs和yarn,最好同时启动spark的history server,这样即使在程序运行完以后也可以从Web UI中查看到程序运行情况。
输入以下命令:
[root@BruceCentOS4 ~]# $SPARK_HOME/bin/spark-submit --master yarn --deploy-mode cluster $SPARK_HOME/examples/src/main/python/pi.py
以下是程序运行输出信息部分截图,
开始部分:
  中间部分:
  结束部分:

由于程序是以yarn cluster方式运行的,因此Driver是运行在Yarn集群当中(在BruceCentOS3上的ApplicationMaster进程当中),同时在BruceCentOS和BruceCentOS2上各运行了1个Executor进程(进程名字:CoarseGrainedExecutorBackend),而BruceCentOS4上的SparkSubmit进程仅仅作为yarn client向yarn集群提交spark程序。作为对比,在yarn client模式当中,客户端SparkSubmit进程不仅作为yarn client提交程序,而且同时还会运行Driver,并启动SparkContext,并且向Executor分配和管理Task,最后收集运行结果,因此yarn client模式程序输出信息会显示最终的打印结果。然而在yarn cluster模式当中,由于Driver运行在yarn集群的ApplicationMaster中,因此最终结果需要到ApplicationMaster进程的日志中取查看。可以通过如下命令查看。

SparkUI上的Executor信息:
  BruceCentOS4上的客户端进程:
  BruceCentOS3上的ApplicationMaster进程(包含Spark Driver):
  BruceCentOS上的Executor:
  BruceCentOS2上的Executor:

下面具体描述下Spark程序在yarn cluster模式下运行的具体流程。
这里是一个流程图:




作者: 梦缠绕的时候    时间: 2019-11-20 11:35
有任何问题欢迎在评论区留言
作者: 梦缠绕的时候    时间: 2019-11-20 11:35
或者添加学姐微信
DKA-2018




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2