代码之家  ›  专栏  ›  技术社区  ›  Metadata

spark.read中的num executors、executor cores、spark submit中的executor memory与spark.read中的选项(numpartitions,x)有什么区别?[复制品]

  •  0
  • Metadata  · 技术社区  · 6 年前

    我在PostgreSQL数据库上读取了一个RDBMS表,如下所示:

    val dataDF    = spark.read.format("jdbc").option("url", connectionUrl)
                                .option("dbtable", s"(${execQuery}) as year2017")
                                .option("user", devUserName)
                                .option("password", devPassword)
                                .option("numPartitions",10)
                                .load()
    

    选项:numpartitions表示将数据拆分成多个分区,然后以并行方式处理每个分区,在本例中是:10。我认为这在Spark中是一个很酷的选择,直到我遇到了Spark Submit的令人敬畏的特性:num executors、-executor cores、-executor memory。我从以下链接阅读了Spark Submit中上述三个参数的概念: here

    我不明白的是,如果两者都用于并行处理,那么它们之间有什么不同?

    有人能告诉我上述选项之间的区别吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   suj1th    6 年前

    read.jdbc(..numPartitions..) , numPartitions 是数据(数据帧/数据集)的分区数。换句话说,读取数据帧上的所有后续操作的并行度等于 数字分区 . (此选项还控制对JDBC源进行的并行连接的数量。)

    理解 --num-executors , --executor-cores , --executor-memory 你应该理解 Task . 对数据帧(或数据集)执行的每个操作都将转换为 任务 在数据帧的分区上。因此,一 任务 存在于数据的每个分区上的每个操作。

    任务 执行一个 Executor . --Num执行器 控制Spark将生成的执行器的数量;因此,这将控制 Tasks . 其他两个选项, --执行器核心 --执行者记忆 控制您提供给每个执行者的资源。除其他外,这取决于您希望在每台机器上拥有的执行器的数量。

    P.S:这假设您正在手动分配资源。火花也能 dynamic allocation .

    有关此的详细信息,可以使用以下链接:


    编辑:

    以下声明有一个重要警告:

    读取数据帧上的所有后续操作的并行度将等于 数字分区 .

    诸如连接和聚合(涉及无序移动)之类的操作以及诸如 union (不洗牌数据)可以更改分区因子。