目录
- 背景
- 第一部分 常用快捷键
- 参考文献及资料
背景
https://mikolaje.github.io/2019/pyspark_slower.html
https://blog.csdn.net/oTengYue/article/details/105379628
https://www.readfog.com/a/1631040025628086272
spark为了保证核心架构的统一性,在核心架构外围封装了一层python,spark的核心架构功能包括计算资源的申请,task的管理和分配, driver与executor之间的通信,executor之间的通信,rdd的载体等都是在基于JVM的
spark的这种设计可以说是非常方便的去进行多种开发语言的扩展。但是也可以明显看出与在jvm内部运行的udf相比,在python worker中执行udf时,额外增加了数据在executor jvm和pythin worker之间序列化、反序列化、及通信IO等损耗,并且在程序运行上python相比java的具有一定的性能劣势。在计算逻辑比重比较大的spark任务中,使用自定义udf的pyspark程序会明显有更多的性能损耗。当然在spark sql 中使用内置udf会降低或除去上述描述中产生的性能差异。
程序模型提交命令:
1 | [root@quickstart pysparkExample]# cat run.sh |
1 | [root@quickstart pysparkExample]# ./run.sh |
yarn日志:
1 | 21/05/15 16:19:29 INFO yarn.ApplicationMaster: Registered signal handlers for [TERM, HUP, INT] |
http://sharkdtu.com/posts/pyspark-internal.html
https://cloud.tencent.com/developer/article/1589011
https://cloud.tencent.com/developer/article/1558621
https://www.nativex.com/cn/blog/2019-12-27-2/
但是在大数据场景下,JVM和Python进程间频繁的数据通信导致其性能损耗较多,恶劣时还可能会直接卡死,所以建议对于大规模机器学习或者Streaming应用场景还是慎用PySpark,尽量使用原生的Scala/Java编写应用程序,对于中小规模数据量下的简单离线任务,可以使用PySpark快速部署提交。
pyspark与py4j线程模型简析
https://www.jianshu.com/p/013fe44422c9
pyspark日志输出:
1 | from pyspark import SparkContext |
对于Spark1.5.1
版本(),
1 | from pyspark import SparkContext |
参考文献及资料
1、Job Scheduling,链接:https://spark.apache.org/docs/latest/job-scheduling.html#configuration-and-setup