【问题标题】:Pyspark code is running slower if imported from package in compare to plain code with no imports与没有导入的纯代码相比,如果从包中导入 Pyspark 代码运行速度较慢
【发布时间】:2018-11-01 06:18:53
【问题描述】:

我在对我的 pyspark 代码进行性能基准测试时遇到了一个特殊问题。

我正在从 kafkadstream 获取数据,然后将 rdd 转换为数据帧,然后经过一些转换,我通过 pheonix 将 spark 数据帧保存在 HBase 中。
以下是统计数据。

对于开发集群
[开发集群][没有任何包导入的纯代码]
记录数:10
DF 创建时间:0.185553 秒
DF 插入时间:0.511172 秒

[开发集群][使用包导入中的通用代码]
注意:包由“--py-files package.zip”发送
记录数:10
DF 创建时间:2.896647 秒
DF 插入时间:3.456992 秒

[开发集群][使用包导入中的通用代码]
注意:包安装在每个节点上
记录数:10
DF 创建时间:0.680334 秒
DF 插入时间:0.831929 秒


现在用于生产集群:
[生产集群][没有任何包导入的纯代码] :
记录数:10
DF 创建时间:0.184458 秒
DF 插入时间:0.736582 秒

[生产集群][使用包导入中的通用代码]
注意:包由“--py-files package.zip”发送
记录数:10
DF 创建时间:1.925941 秒
DF 插入时间:2.203001 秒

[生产集群][使用包导入中的通用代码]
注意:包安装在每个节点上
记录数:10
DF 创建时间:1.966830 秒
DF 插入时间:2.408202 秒

所以在开发集群中,当我在每个节点上安装我的代码并设置 PYTHONPATH 时,它提高了性能,并且从包导入的代码的性能几乎等于没有导入的纯 python 代码。但是在生产中这根本没有帮助。

对于上述所有场景,我都使用了 --executor-memory 1g --num-executors 1 --executor-cores=1

如果有人指出我正确的方向,我将非常感激。

【问题讨论】:

    标签: performance apache-spark pyspark apache-spark-sql


    【解决方案1】:

    如果您使用--py-files 提交代码,您必须添加时间:

    • 分发 zip。
    • 在工作目录中解压缩 zip。

    此外,如果导入了包,请增加解析和评估的时间。像这样的小时间差异并不特别令人惊讶,甚至可以在此设计中避免。

    如果您想避免该问题,请在每个节点上部署一次软件包。

    【讨论】:

    • 我已经尝试在开发和生产集群上部署包,但由于某种原因在生产中的时间与通过 zip 传递包相同。
    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2012-08-05
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2017-04-10
    • 2021-08-28
    相关资源
    最近更新 更多