zoukankan      html  css  js  c++  java
  • Spark调研笔记第4篇

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

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

    1. Sparkclient内置的pyspark"命令"
    Sparkclient支持交互模式以方便应用调试。通过调用pyspark能够进入交互环境:
    cd /path/to/spark/ && ./bin/pyspark
    用编辑器查看可知,pyspark事实上是个shell脚本,部分内容摘出例如以下:

    从上面的脚本片段可知,若调用./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。数据流交互结构例如以下图所看到的:

    由上图可知,用户提交的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 ======================


  • 相关阅读:
    【java虚拟机】垃圾回收机制详解
    【java虚拟机】分代垃圾回收策略的基础概念
    【java虚拟机】内存分配与回收策略
    【java虚拟机】jvm内存模型
    【转】新说Mysql事务隔离级别
    【转】互联网项目中mysql应该选什么事务隔离级别
    有关PHP的字符串知识
    php的查询数据
    php练习题:投票
    php的数据访问
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5388620.html
Copyright © 2011-2022 走看看