java - Spark - 在执行期间更改并行度

标签 java scala apache-spark hbase distributed-computing

我的工作分为两部分:

  • 第一部分使用 Spark 从 HBase 检索数据
  • 第二部分计算大量 CPU 密集型机器学习算法

问题是,由于执行器/核心数量较多,HBase 集群的查询过于频繁,这可能会导致生产不稳定。 由于执行器/核心太少,机器学习计算需要很长时间才能执行。

由于执行器和核心的数量是在启动时设置的,我想知道是否有办法减少作业第一部分的执行器数量。

我显然希望避免运行两个单独的作业,就像 Hadoop 在这两个步骤之间使用强制磁盘序列化所做的那样。

感谢您的帮助

最佳答案

我猜dynamic allocation就是您正在寻找的。这也可以与 Spark Streaming 一起使用。

我认为您可能还需要稍微调整一下 RDD 大小,以平衡数据摄取和数据处理,但根据您的实际用例,这可能确实具有挑战性。

关于java - Spark - 在执行期间更改并行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41644035/

相关文章:

java - Apache Camel - 仅当队列大小大于时才使用消息

json - 如何使用带有 UTF-8 字符的 json4s 序列化 JSON?

scala - 错误 : value += is not a member of Long Scala

apache-spark - flatMapGroupsWithState 中 OutputMode 的目的是什么?如何/在哪里使用它?

exception - NoSuchMethodError:org.apache.spark.sql.SQLContext.sql

java - 推土机给我异常(exception)

java - 请求线程是否在 http 请求之间重用?

用于替换通过 B 值链接的两个映射 Map<A,B>, Map<B,C> 的 Java 数据结构

scala - 缓存的 Spark RDD(从序列文件中读取)有无效条目,我该如何解决?

apache-spark - Spark Streaming 1.6.0 - 执行器弹跳