Databricks 是不是为给定的集群和数据集提供推荐的 spark 参数?

Posted

技术标签:

【中文标题】Databricks 是不是为给定的集群和数据集提供推荐的 spark 参数?【英文标题】:Does Databricks provide a recommended spark parameters for a given cluster and dataset?Databricks 是否为给定的集群和数据集提供推荐的 spark 参数? 【发布时间】:2016-07-11 21:39:10 【问题描述】:

我刚刚创建了一个 7 节点 spark 集群,每个 worker 有 8GB 内存和 4 个内核。它不是一个巨大的集群,但由于 “超出 GC 开销限制”而失败 一个简单的 terasort 只需 10GB 的数据。

我想知道如何确定 Spark 集群的这些基本参数,以便作业不会随着数据大小的增长而失败。

    执行者数量 分区数 并行性 执行器核心 执行程序内存

如果配置不正确,我不介意作业运行缓慢,但由于内存不足而导致进程死亡是一个很大的危险信号。

【问题讨论】:

【参考方案1】:

一些信息,如 spark 版本、输入格式(文本、parquet、orc)、压缩等,肯定会有所帮助。

但简而言之,以下通常是经验法则。

    num-executors - 这是整个集群将用于此作业的执行器总数。 Executor 可以包含一个或多个任务。人们倾向于认为一个节点=一个执行者。每个节点最好有一个以上的执行者。稍后将在答案中详细介绍。 executor-cores - 这是每个执行程序的核心(任务)总数。在您的情况下,起点是每个执行程序 4 个核心(即每个节点)。 executor-memory - 每个执行程序的总内存。这由执行程序中的所有任务或核心共享。

最有可能的配置(但效果较差) 执行程序数=7,执行程序核心数=4,执行程序内存=8g 在这种情况下,一个执行者被 4 个任务共享。如果其中一个失败,则整个 executor 被标记为失败。

更好的配置 num-executors=14(每个节点 2 个),executor-cores=2(每个执行器 2 个),executor-memory=3g(每个执行器 3g,其余进程留 2g)

请注意,每个执行器 1 个核心也不好,因为在这种情况下执行器启动时间可能会过长。

在这种情况下,您正在划分资源以避免杀死整个执行程序。

平行度 这取决于输入数据的格式。

【讨论】:

以上是关于Databricks 是不是为给定的集群和数据集提供推荐的 spark 参数?的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Databricks 的集群 Spark Config 中设置数据湖连接

无法使用 jdbc 和 spark 连接器从 databricks 集群连接到 Azure 数据库 for MySQL 服务器

启用进程隔离的集群尚不支持 Databricks Connect

Databricks 中使用的集群管理器是啥?如何更改 Databricks 集群中的执行程序数量?

自建Hive数据仓库跨版本迁移到阿里云Databricks数据洞察

如何使用 Databricks 查询外部 Hive 表