概要

这是一个看前一段时间spark的python支持的时,有点简单的后pyspark内python代码,我们把一个一般流程。虽然几乎没有python,但基本上能看懂pyspark它是如何使不同的虚拟机之间的数据传输、怎么样python通话环境java类别、pyspark SDK的丰富程度取决于什么、须要做些什么流程和封装等。

我看了下,应该仅仅有Pyspark Internals这篇wiki里介绍了pyspark的实现机制。大体是以下这张图就能够表示:

在python driver端,SparkContext利用Py4J启动一个JVM并产生一个JavaSparkContext。Py4J仅仅使用在driver端,用于本地python与java SparkContext objects的通信。大量数据的传输使用的是还有一个机制。

RDD在python下的转换会被映射成java环境下PythonRDD。在远端worker机器上,PythonRDD对象启动一些子进程并通过pipes与这些子进程通信,以此send用户代码和数据。

大致流程

java_gateway.py里启动了py4j.JavaGateWay。并从java里导入了所须要的主要类。

python能通过py4j訪问jvm的前提是,jvm开启了GatewayServer,而在coreproject的deployproject下,PythonRunner单例里启动了GatewayServer。可能能够理解为py4j是基于socket的一套简单封装了调用java类和方法的协议吧。并且走的本地不同port。

py4j的包为$SPARK_HOME/python/lib/py4j-0.8.1-src.zip。里面是py4j源代码的几个类。

上述java_gateway的launch_gateway()方法是在context.py初始化的时候调用。

context.py初始化的时候,把SparkContext和其部分主要方法增加到了python环境中。所以大多数的调用都是通过py4j直接调用java的类。

java的类主要是指core项目里的java api里的内容。序列化採用了cPickle库的PickleSerializer。

像python下使用spark sql的话,在sql.py里,从jvm里获取了SQLContext/HiveContext类,从而得到spark sql里的关键方法。

还有一方面,worker.py里,worker启动的时候会起一个socket。从socket里。能够获取工作文件夹名字。能够获取PYTHONPATH下的其它要引入的.zip或.egg文件。将其加到file_dir里。这里的反序列化使用的是UTF8Deserializer;能够获取广播的变量,这里的反序列化使用的是PickleSerializer。

在daemon.py里,通过分配socketport,启动POOLSIZE个worker。(里面还有非常多其它细节)。使用os.fork的方式创建子进程来启动。

在rdd.py里。声明了rdd的非常多action和transformations。有些操作会触发数据在python worker上的传输。

传输大量数据的时候。Py4J非常慢。由于socket.readline()非常低效。传输的时候。把数据(序列化后)dump成一个文件。

兴许把这个文件反序列化回来后,能够转成python的类型和结构进行查看和输出(如collect),也能够调用PythonRDD的asJavaRDD方法(如PipelinedRDD计算时)。在各个worker上启动python进程运行反序列化之后的函数,通过管道与python进程进行通信,最后得到JavaRDD。

管道传输利用的是Popen,这样做标准输入

总结

过了一下pyspark是怎么让不同虚拟机之间数据传输并在python环境调用java类的。两者使用的是不同的网络实现在的方法。

掌声 :)

版权声明:本文博客原创文章。博客,未经同意,不得转载。

pyspark简要原则的更多相关文章

  1. Python学习笔记整理(十七)异常处理

    一.异常基础 try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行 ...

  2. SOA 的基本概念及设计原则浅议

    SOA是英文词语"Service Oriented Architecture"的缩写,中文有多种翻译,如"面向服务的体系结构"."以服务为中心的体系结 ...

  3. REST简介及设计原则

    rest,即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 简介 REST (R ...

  4. Dalvik虚拟机简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...

  5. Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析

    原文发表于 2013 年 8 月 28 日 由 三石 根据前文描述的Doug Lea的理论基础,在JDK1.7中已经给出了Fork Join的实现.在Java SE 7的API中,多了ForkJoin ...

  6. [转]Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp85   根据前文描述的Doug Lea的理论基础,在JDK1.7中已经给 ...

  7. Spark核心类:弹性分布式数据集RDD及其转换和操作pyspark.RDD

    http://blog.csdn.net/pipisorry/article/details/53257188 弹性分布式数据集RDD(Resilient Distributed Dataset) 术 ...

  8. PySpark理解wordcount.py

    在本文中, 我们借由深入剖析wordcount.py, 来揭开Spark内部各种概念的面纱.我们再次回顾wordcount.py代码来回答如下问题 对于大多数语言的Hello Word示例,都有mai ...

  9. 精通Web Analytics 2.0 (13) 第十一章:变身分析忍者的指导原则

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十一章:变身分析忍者的指导原则 这个激动人心的一章,分析了几乎所有工作的各个方面. 目标很简单:使用成熟的方法来帮助避免淹死的 ...

随机推荐

  1. dell N5010

    Inspiron N5010Microsoft Windows 10 企业版 (64位) (英特尔)Intel(R) Core(TM) i3 CPU       M 370  @ 2.40GHz(24 ...

  2. Java 小样例:图书馆课程设计(Java 8 版)

    用 Java 模拟一个图书馆.包含创建图书.创建读者.借书.还书.列出全部图书.列出全部读者.列出已借出的图书.列出过期未还的图书等功能. 每一个读者最多仅仅能借 3 本书,每一个书最多仅仅能借 3 ...

  3. JAVA 根据经纬度算出附近的正方形的四个角的经纬度

    /** * * @param longitude 经度 * @param latitude 纬度 * @param distance 范围(米) * @return */ public static ...

  4. SVN 的revert操作

  5. iPhone 6 首发无大陆,DevStore要去香港吗?

    iPhone 6 正式公布,微博已经被刷屏.iPhone 6 的各种信息都已经明了,先不说什么配置,什么设计,就说一点--iPhone6 首发地方是没有中国大陆的.这让我想起来最近參加的源代码大赛,这 ...

  6. 官方原版Windows XP SP3(VOL)中文简体版ISO下载

    今天,向各位朋友推荐今年五月,由MSDN官方集成的XP With SP3专业VOL版.    文 件:Windows XP Professional with Service Pack 3 (x86) ...

  7. Hive综合HBase——经Hive阅读/书写 HBase桌子

    社论: 本文将Hive与HBase整合在一起,使Hive能够读取HBase中的数据,让Hadoop生态系统中最为经常使用的两大框架互相结合.相得益彰. watermark/2/text/aHR0cDo ...

  8. [置顶] LLVM每日谈之十五 LLVM自带的examples

    作者:snsn1984 在LLVM源码的目录下,有一个目录叫做examples,这个目录下边有几个LLVM的例子,初学者一般不会太关注这些例子,但是这些例子确实是精华中的精华,在LLVM的学习过程中不 ...

  9. altKey,ctrlKey,shiftKey

    <1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>< ...

  10. PM俱乐部之旅7-弱活着

     有些人认为,最终我们放松一点时间,有意想不到的事情发生--公司组织结构调整. 公司由于业务范围调整,所以要进行对应的组织结构调整.PMO部门也随之重组,项目经理俱乐部的活动改成项目交流会,请项目 ...