【问题标题】:Run Spark application with custom number of cores and memory size运行具有自定义内核数和内存大小的 Spark 应用程序
【发布时间】:2017-09-20 21:01:56
【问题描述】:

我对此完全陌生,所以我不太了解它是如何做的。 我需要在我的机器上运行 spark(使用 ssh 登录)并设置内存 60g 和 6 个内核用于执行。 这是我尝试过的。

spark-submit --master yarn --deploy-mode cluster --executor-memory 60g --executor-cores 6

这就是我得到的:

SPARK_MAJOR_VERSION is set to 2, using Spark2
Exception in thread "main" java.lang.IllegalArgumentException: Missing application resource.
    at org.apache.spark.launcher.CommandBuilderUtils.checkArgument(CommandBuilderUtils.java:253)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildSparkSubmitArgs(SparkSubmitCommandBuilder.java:160)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildSparkSubmitCommand(SparkSubmitCommandBuilder.java:276)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildCommand(SparkSubmitCommandBuilder.java:151)
    at org.apache.spark.launcher.Main.main(Main.java:87)

所以,我想有一些东西要添加到此代码行以运行,我不知道是什么。

【问题讨论】:

  • 您缺少--class package.ClassName 和您要提交的JAR。

标签: apache-spark command-line pyspark distributed-computing


【解决方案1】:

这里:

spark-submit --master yarn --deploy-mode cluster --executor-memory 60g --executor-cores 6

你没有指定哪个入口点和你的应用程序!

查看spark-submit 文档,其中指出:

一些常用的选项是:

  • --class:应用程序的入口点(例如 org.apache.spark.examples.SparkPi)

  • --master:集群的主 URL(例如 spark://23.195.26.187:7077)

  • --deploy-mode:将驱动程序部署在工作节点(集群)还是本地作为外部客户端(客户端)(默认:客户端) †

  • --conf:键=值格式的任意 Spark 配置属性。对于包含空格的值,将“key=value”用引号括起来(如图所示)。

  • application-jar:捆绑 jar 的路径,包括您的应用程序和 所有依赖项。该 URL 必须在您的内部全局可见 集群,例如 hdfs:// 路径或 file:// 路径 存在于所有节点上。

  • application-arguments:传递给你的 main 方法的参数 主类,如果有的话

对于 Python 应用程序,只需传递一个 .py 文件代替 <application-jar> 而不是 JAR,然后将 Python .zip、.egg 或 .py 文件添加到带有 --py-files 的搜索路径。

这是一个包含一些 JAR 和一个 python 文件的示例(为简单起见,我没有包含您的附加参数):

./spark-submit --jars myjar1.jar,myjar2.jar --py-files path/to/my/main.py arg1 arg2

我希望我可以进入 spark shell(有那么多内存和内核)并在那里输入代码

那么你需要pyspark,而不是spark-submitWhat is the difference between spark-submit and pyspark?

所以你真正想做的是:

pyspark --master yarn --deploy-mode cluster --executor-memory 60g --executor-cores 6

【讨论】:

  • 我不确定我是否理解。我的机器上有很多 csv 文件,我需要过滤它们并保存到 pandas。所以,我没有任何文件要运行,我希望我可以进入 spark shell(有那么多内存和内核)并在那里输入代码。
【解决方案2】:

如果我正确理解您的问题,您的内核总数 = 6,总内存为 60GB。参数

--executor-memory
--executor-cores

实际上是针对spark里面的每个executor。也许你应该试试

--执行器-内存8G --executor-cores 1 这将创建大约 6 个 8Gb 的执行器(总共 6*8 = 48GB)。其余 12 GB 用于操作系统处理和元数​​据。

【讨论】:

  • 不,不。我有大约 12 个内核,也许更多,还有很多内存,60 GB 大约是每个内核的一半。
  • 在这种情况下,您可以尝试 spark-submit 并仅使用一个参数(使用 pythonscript),看看是否有任何错误。
  • 是的,您还没有添加要在 spark-submit 中运行的脚本。
  • 我找到了解决方案,谢谢。我只需要输入 pyspark 而不是 spark-submit。 :)
  • spark-submit 用于提交作业,pyspark 用于交互式 spark 访问
猜你喜欢
  • 1970-01-01
  • 2015-03-07
  • 2016-10-16
  • 2021-04-09
  • 2017-05-29
  • 1970-01-01
  • 2012-01-28
  • 2014-04-06
  • 2019-02-06
相关资源
最近更新 更多