Spark调研笔记第4篇 – PySpark Internals

Spark调研笔记第4篇 – PySpark Internals

大家好,又见面了,我是全栈君。

事实上。有两个名为PySpark的概念。一个是指Sparkclient内置的pyspark脚本。而还有一个是指Spark Python API中的名为pyspark的package。

本文仅仅对第1个pyspark概念做介绍。

1. Sparkclient内置的pyspark”命令”
Sparkclient支持交互模式以方便应用调试。通过调用pyspark能够进入交互环境:
cd /path/to/spark/ && ./bin/pyspark
用编辑器查看可知,pyspark事实上是个shell脚本,部分内容摘出例如以下:
Spark调研笔记第4篇 - PySpark Internals
从上面的脚本片段可知,若调用./bin/pyspark时传入要运行的python脚本路径,则pyspark是直接调用spark-submit脚本向spark集群提交任务的;若调用./bin/pyspark时未带不论什么參数,则会通过调起Python解释器($PYSPARK_DRIVER_PYTHON)进入交互模式。当中调起Python解释器前,pyspark脚本会通过export PYTHONPATH将与Spark Python API相关的库增加Python解释器的载入路径,以便交互环境中能正确import与Spark相关的库。

2. PySpark Internals
通过上面的介绍。我们已经清楚Sparkclient内置pyspark脚本的用处。那么,当通过./bin/pyspark进入交互模式后,本地的Python driver进程(即Python解释器进程)和Spark集群worker节点的executor(s)进程是怎么交互的呢?以下来回答这个问题。
其实。当我们在本地机器通过./bin/pyspark进入交互模式并向Spark集群提交任务时。本地会在运行pyspark脚本时先启动一个被称为driver program的Python进程并创建SparkContext对象,而后者会通过Py4J启动一个JVM进程并创建JavaSparkContext对象,该JVM进程负责与集群的worker节点传输代码或数据。

从Spark Wiki关于PySpark Internals的说明可知,PySpark建立在Spark Java API之上,数据按Python的语法行为被处理,运行结果由JVM负责cache或shuffle。数据流交互结构例如以下图所看到的:
Spark调研笔记第4篇 - PySpark Internals
由上图可知,用户提交的Python脚本中实现的RDD transformations操作会在本地转换为Java的PythonRDD对象。后者由本地的JVM发往Spark集群节点。

在远程的worker节点上,PythonRDD对象所在的JVM进程会调起Python子进程并通过pipe进行进程间通信(如向Python子进程发送用户提交的Python脚本或待处理的数据)。

以上就是当我们调用./bin/pyspark时,sparkclient和集群节点之间的内部结构。

理解这些内容有助于我们从整体上加深对Spark这个分布式计算平台的认识。

比如,当调用rdd.collect()时。这个action操作会把数据从集群节点拉到本地driver进程。

假设数据集比較大。则可能报出类似于”spark java.lang.OutOfMemoryError: Java heap space”的错误。

而由本文的介绍可知,提交任务时,本地driver进程启动了一个JVM进程,默认的JVM是有最大内存限制的。假设数据集的大小超过driver默认的最大内存限制。就会报出OOM的错误。解决的方法是在spark-defaults.conf中添加配置项spark.driver.memory,将其值设置到较大值。

【參考资料】
1. Spark Wiki Homepage: PySpark Internals

========================== EOF ======================


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115349.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • api接口开放平台_手机系统分享接口在哪里

    api接口开放平台_手机系统分享接口在哪里免费在线接口(资源链接)1.csdnhttps://blog.csdn.net/c__chao/article/details/785737372.sojsonhttps://www.sojson.com/api/3.bejsonhttp://www.bejson.com/knownjson/webInterface/4.csdnhttps://blog.csdn.net/ishxiao/article/details/528573615.juhe(部分免费)https://www.j

    2022年10月3日
    3
  • 史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

    史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无~中招了咩~,还有一些同学依旧在使用eclipse或者Myeclipse开发,我想对这些朋友说IDEA的编译速度很快,人生苦短,来不及解释了,直接上手idea吧。这篇文章每一步搭建过程都测试过了,应该不会有什么差错。本文章还有个比较优秀的特点,就是idea的使用,基本上关于idea的操作都算是比较详细的,所以不用太担心不会撸idea!最后,本文

    2022年6月14日
    33
  • NotePad++ 正则表达式替换 高级用法[通俗易懂]

    NotePad++ 正则表达式替换 高级用法[通俗易懂]在我们处理文件时,很多时候会用到查找与替换。当我们想将文件中某一部分替换替换文件中另一部分时,怎么办呢?下面正则表达式给我提供方法。正则表达式,提供复杂并且弹性的查找与替换注意:不支持多行表达式(involving\n,\r,etc).1基本表达式PatternMeaning.匹配任意字符,除了新一行(\n)。也就是说“.”可以匹配\r,当文件中同时含有\ra

    2022年5月13日
    71
  • 逛数学研发论坛 – Powered by Discuz! http://bbs.emath.ac.cn/forum.php发现的小游戏,宽容和信任

    逛数学研发论坛 – Powered by Discuz! http://bbs.emath.ac.cn/forum.php发现的小游戏,宽容和信任信任的进化https://www.sekai.co/trust/

    2022年9月20日
    2
  • linux中ll命令用法_linux命令ll与ls的区别

    linux中ll命令用法_linux命令ll与ls的区别ll并不是linux下一个基本的命令,它实际上是ls-l的一个别名。一些Linux系统默认不支持命令ll,必须用ls-l,这样使用起来不是很方便。如果要使用此命令,可以作如下修改:打开~/.bashrc增加aliasll=‘ls-l’aliasll=’ls-l’(关闭原来的终端才能使命令生效)这样个人用户可以使用ll命令,当切换成超级用户后,使用ll命令时提示找不到命令,那是因为你只是修改了个人用户的配置,所以,切换成root后做相同的操作即可解决问题。启示:我们可以通

    2022年9月15日
    5
  • sqldeveloper如何连接数据库_创建数据库的五个步骤

    sqldeveloper如何连接数据库_创建数据库的五个步骤转载出处:https://blog.csdn.net/u010185220/article/details/53106196SQLDeveloper不能用于创建Oracle数据库,只能用来连接已经创建的数据库,数据库的建立要通过DatabaseConfigurationAssistant(DBCA)来完成。找到开始菜单中Oracle-OraDb11g_home1下…

    2022年9月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号