【问题标题】:Jupyter notebook is 3x slower when using spark-submit yarn-client instead of spark-submit local使用 spark-submit yarn-client 而不是 spark-submit local 时,Jupyter notebook 慢 3 倍
【发布时间】:2017-12-05 10:09:49
【问题描述】:

我正在开发 Hadoop (Cloudera) 数据湖:

  • Spark 1.6.0
  • Python 3.5.2
  • IPython 4.1.1(笔记本服务器为 4.1.0)

我正在执行完全相同的代码。

  1. 计算 4M 条目 Hive 表上的条目数
  2. 计算 70M 条目 Hive 表上的条目数
  3. 在 Hive 表上具有许多连接的复杂 SQL 查询

我试图了解两者之间的区别:

  1. 运行 Hadoop 集群(“spark-submit --master yarn-cluster”使用 Oozie)
  2. 运行 Hadoop 集群的边缘节点(“spark-submit --master local”)
  3. 使用 Jupyter 笔记本(“spark-submit --master yarn-client”)
  4. 使用 Jupyter 笔记本(“spark-submit --master local”)

请在下面找到测试

---------------------------------------------------------------------------------------------------
|  test                                | wall time code 1 | wall time code 2 | wall time code 3   |
---------------------------------------------------------------------------------------------------
|  Oozie (spark-submit yarn-cluster)   |  14.50 s         | 010.69 s          |  085.74 s         |
---------------------------------------------------------------------------------------------------
|  edge node (spark-submit yarn-client)|  12.93 s         | 008.91 s          |  122.12 s         |
---------------------------------------------------------------------------------------------------
|  edge node (spark-submit local)      |  05.15 s         | 019.05 s          |  414.68 s         |
---------------------------------------------------------------------------------------------------
|  Jupyter (spark-submit yarn-client)  |  15.30 s         | 145.77 s          |  986.71 s         |
---------------------------------------------------------------------------------------------------
|  Jupyter (spark-submit local)        |  05.89 s         | 021.46 s          |  385.66 s         |
---------------------------------------------------------------------------------------------------

对我来说,使用 YARN-cluster 比使用边缘节点和 API 访问集群上的数据时,结果计算机的速度要快得多。我不明白为什么使用 Jupyter Notebook 我看到的系数是 2.5 倍:

  • 使用 Jupyter 笔记本(“spark-submit --master yarn-client”)
  • 使用 Jupyter 笔记本(“spark-submit --master local”)

我希望 Jupyter 笔记本“spark-submit --master yarn-client”比“spark-submit --master local”更快。 什么可以解释这些差异?

JupyterHub 背后的身份验证步骤和代理翻译以及多用户管理?

如何检查我们的配置有什么问题?关于如何进行最佳设置的任何文档?使用 Jupyter Notebook 进行快速数据探索非常好,所以我想了解其中的差异。

我的 Spark 设置如下

spark-submit --master yarn-cluster 
--files /etc/hive/conf/hive-site.xml 
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=/opt/cloudera/extras/anaconda3/bin/python3 
--conf spark.ui.enabled=false 
--conf spark.yarn.security.tokens.hive.enabled=false 
--conf spark.yarn.executor.memoryOverhead=6144 
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer 
--conf spark.io.compression.codec=snappy 
--conf spark.speculation=true 
--conf spark.shuffle.manager=sort 
--conf spark.shuffle.service.enabled=true 
--conf spark.dynamicAllocation.enabled=true 
--conf spark.dynamicAllocation.initialExecutors=4 
--conf spark.driver.maxResultSize=10g 
--conf spark.dynamicAllocation.minExecutors=2 
--conf spark.executor.cores=4 
--conf spark.dynamicAllocation.maxExecutors=20 
--conf spark.executor.memory=10g 
--conf spark.driver.memory=10g 
--conf spark.driver.extraJavaOptions=-Xms10g 
--conf spark.akka.frameSize=2047 
--conf spark.kryoserializer.buffer.max=2047mb 
testpyspark.py

【问题讨论】:

  • 请不要混淆yarn-cluster mode (即笔记本启动一个 Spark 启动器,然后在 YARN 上启动一个 Spark 驱动程序,然后在 YARN 上启动执行程序)running Spark on a Hadoop cluster in yarn-client mode (即笔记本启动本地Spark Driver,然后在YARN上启动executors);还有“edge”和“hedge”,不是同一个东西,bilute...
  • 你在yarn-client模式下的Spark设置是什么——容器的静态数量(即所有YARN分配延迟都包含在iPython内核启动时间中)或动态数量(即一些YARN分配延迟被延迟)到实际执行时间)?
  • 您的数据帧中有多少个分区?如果你只使用 1 个 executor,在 YARN 上运行多个 executor 不会带来任何收益。如果你使用很多(也许太多)分区/执行器,在随机播放时执行器之间传输了多少数据?在本地模式下洗牌显然比使用网络(节点之间)和文件系统(接收数据的检查点)快得多。
  • 注意Oozie不一定使用yarn-client模式; Oozie 使用虚拟 YARN 容器来启动 Spark,但 Spark 可以使用任何模式。相反,当您在边缘节点上运行 Spark 时,您可以设置任何模式,从 localyarn-clientyarn-cluster(尽管最后一个对于交互式测试运行没有意义)。
  • 感谢 cmets。我用表格中的边缘节点修复了错字。在边缘节点上运行yarn-client 时,我在表中添加了一个条目。我尝试与 Oozie 和 yarn-client 一起运行,但没有成功。也许没有意义。几周后我才开始使用 Hadoop。

标签: pyspark client local jupyter-notebook hadoop-yarn


【解决方案1】:

该问题与 Cloudera 5.8 有关。在 Jupyter 中执行的 Python 版本与 HDFS 名称节点之间存在兼容性问题。

解决方案是在内核本身所需的所有其他路径之上添加到 python 2 的 PATH:

"PATH":"/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/cloudera/extras/anaconda2/bin/"

【讨论】:

  • 内核的路径如何?内核配置文件在哪里?
猜你喜欢
  • 2016-01-18
  • 1970-01-01
  • 2015-10-14
  • 2022-11-20
  • 2019-12-04
  • 2017-01-27
  • 1970-01-01
  • 2018-04-06
  • 2017-10-29
相关资源
最近更新 更多