【问题标题】:Spark with Hadoop Yarn : Use the entire cluster nodesSpark with Hadoop Yarn:使用整个集群节点
【发布时间】:2018-04-10 21:47:29
【问题描述】:

我将SparkHDFS Hadoop 存储和Yarn 一起使用。我的集群包含 5 个节点(1 个主节点和 4 个从节点)。

  • 主节点:48Gb RAM - 16 个 CPU 内核
  • 从节点:12 Gb RAM - 16 个 CPU 内核

我正在执行两个不同的进程:WordCount 方法和具有两个不同文件的 SparkSQL。一切正常,但我在问一些问题,也许我不太了解 Hadoop-Spark。

第一个例子:字数

我执行了 WordCount 函数,得到了两个文件(part-00000 和 part-00001)的结果。 part-00000 的可用性是 slave4 和 slave1,part-00001 的可用性是 slave3 和 slave4。

为什么不在 slave2 上的一部分?正常吗?

当我查看 application_ID 时,我看到只有 1 个奴隶完成了这项工作:

为什么我的任务没有很好地分布在我的集群上?

第二个例子:SparkSQL

在这种情况下,我没有保存文件,因为我只想返回一个 SQL 结果,但也只有 1 个从节点工作。

那么为什么我只有 1 个从节点来执行任务,而我有一个似乎工作正常的集群?

执行此操作的命令行是:

time ./spark/bin/spark-submit --master yarn --deploy-mode cluster /home/valentin/SparkCount.py

谢谢!

【问题讨论】:

  • 你还没有说明你的数据集有多大...为什么你认为所有节点都需要使用?
  • 因为我相信在集群模式下所有节点都被用于制作我的流程。我正在尝试使用最大的数据集来查看这个假设。
  • 只使用尽可能多的节点来处理数据的所有 InputSplit。这并不一定意味着所有将被使用...此外,您没有明确设置执行程序的数量或spark-submit 的执行程序内存使用超过默认值

标签: apache-spark hadoop


【解决方案1】:

spark.executor.instances defaults to 2

你需要增加这个值来让更多的执行器同时运行

您还可以调整分配给每个执行程序的内核和内存。据我所知,没有神奇的公式。

如果您不想手动指定这些值。我可能会建议阅读 Spark 文档中关于推测执行的部分

【讨论】:

  • 我搜索了可以将执行者编号修改为 spark 文件的位置。到目前为止没有结果,是否可以在我的命令中更改此值? --num-executors 4 之类的东西?
  • 只是一个问题:我必须在每个节点(master + slaves)上安装 Spark 还是只在 master 节点上安装(我现在有什么)?所以我只有在主节点上有主节点/工作节点,但我正在使用 YARN 执行 Spark。
  • Yes --num-executors 将执行者添加到作业中。但是,一台机器上可以容纳多个执行程序。 Spark 代码只需要在单台机器上编译即可。虽然您可以在所有机器上安装 Spark,但您只需要类路径中的 Spark 库。 HDFS 对此有所帮助,YARN 将这些文件复制到执行程序。例如,集群仅在其节点上本地提供 Spark 1.6。我可以自己从外部下载和配置 Spark 2.3,将其指向 YARN,如果我 upload my Spark2 libraries to HDFS,它仍然会运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2016-09-06
  • 1970-01-01
相关资源
最近更新 更多