【问题标题】:RDD with 20 partitions in cluster but no workers being utilized集群中有 20 个分区但没有使用工作人员的 RDD
【发布时间】:2017-01-29 00:12:10
【问题描述】:

我有一个来自importing from Postgres via JDBC 的包含 20 个分区的 RDD。我有一个有 5 个工作人员(5 个核心)的集群。我只是想根据以下方式计算每个分区中的元素数量:

def count_in_a_partition(idx, iterator):
  count = 0
  for _ in iterator:
    count += 1
  return idx, count

rdd.mapPartitionsWithIndex(count_in_a_partition).collect()

上面的代码一直在运行,Web GUI 显示工人根本没有被利用,即“0 Used”。甚至Memory in use 也显示0.0 B Used。好像有什么不对。您会期望至少有一名工人正在做某事。我可以做些什么来加快计算速度并利用内核?

【问题讨论】:

  • 您好,您应该关注一下您的 spark 配置。大多数情况下,将 spark.executor.instances 设置为 (number of cores - 1) 都有效。您还可以减少执行程序使用的内存。我从来没有见过等待状态......你确定postgre运行良好吗?
  • 我认为减少执行程序使用的内存是正确的。谢谢!
  • 你能分享你的 spark-submit 命令吗?

标签: postgresql jdbc apache-spark pyspark rdd


【解决方案1】:

我认为Memory per Node: 20.0 GB 大于每个节点2.7 GB 中的可用内存是问题所在。降低它有帮助:

from pyspark.sql import SparkSession

spark = SparkSession\
    .builder\
    .appName("jupyter-pyspark")\
    .master("spark://spark-master:7077")\
    .config("spark.executor.memory", "2g")\
    .config("spark.driver.memory", "2g")\
    .getOrCreate()

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 2017-05-03
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多