【发布时间】:2016-11-14 12:04:21
【问题描述】:
我有 128 个内核,8 个节点,每个节点有 186Gb 内存。
我有从 jdbc 源加载的数据帧 (Df)。它有一个分区。然后我打电话:
c = Df.repartition(128*3).cache().count()
应用程序 Web UI 显示缓存的 rdd 具有 384 个分区,但所有分区都位于一个节点(我们称之为节点 1)上,内存大小为 57Mb。
当我查看计数阶段时,我看到 384 个任务,全部在节点 1 上执行。
为什么 Spark 没有将数据帧均匀分布在所有节点上?
我在 pycharm 中运行它。以下是我设置的配置值:
spark = SparkSession \
.builder \
.master("spark://sparkmaster:7087") \
.appName(__SPARK_APP_NAME__) \
.config("spark.executor.memory", "80g") \
.config("spark.eventlog.enabled", "True") \
.config("spark.eventlog.dir", r"C:\Temp\Athena\UAT\Logs") \
.config("spark.cores.max", 128) \
.config("spark.sql.crossJoin.enabled", "True") \
.config("spark.executor.extraLibraryPath","/net/share/grid/bin/spark/UAT/bin/vertica-jdbc-8.0.0-0.jar") \
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
.getOrCreate()
这是我的火花属性
【问题讨论】:
-
如何提交/执行 Spark 应用程序?你是独立使用纱线还是火花?
-
Spark 独立集群。我的驱动程序位于开发人员工作站上。它具有合理的规格(12 核,64Gb 内存)
-
你能提供你的 spark-submit 命令吗?
-
很遗憾,我的公司不喜欢员工发布代码... :-( 你有什么特别想检查的吗?
-
重新分区后还需要指定执行器的数量、每个执行器的核心数和每个执行器的内存,以将分区/任务分配到不同的节点。
标签: apache-spark pyspark pyspark-sql