【问题标题】:Query on Yarn and Spark查询 Yarn 和 Spark
【发布时间】:2019-04-23 05:36:54
【问题描述】:

我需要使用 spark 将数据从 Hive(分区)导出到 Teradata(非分区)。

集群规格:120 个工作节点,每个节点有 16 个核心处理器,128 GB RAM。 表大小约为 130GB,当我用它创建数据帧时,它会产生 1,30,000 个分区。

val df=spark.sql("select * from <hive-external-table>")

df.mode(SaveMode.Append).write.jdbc(<jdbc_url>,<teradata_table>,<connectionproperties>)

我正在使用以下配置在客户端模式下启动 Spark:

--executor-cores 5 --executor-memory 16G --num-executors 200

作业运行顺利,但它在 Teradata 端创建了 300 多个 JDBC 连接,DBA 惊慌失措并杀死了它们,导致我的作业失败。

现在,我的问题是:

  1. 我应该使用合并来将分区数从 1,30,000 减少吗?如果是,什么是最优的,如何选择?

  2. 正如我所说,这项工作运行得非常快,它使用了我请求的 1500 个 vcore 中的大约 900 个: 阶段 0> ->-------------- (40230+932)/1,30,000

  3. 我如何配置它以使我的作业不会创建超过 100 个 JDBC 连接?

  4. 如果 Teradata 端的目标表分区在同一列上会有帮助吗?怎么样?

    它从 Yarn 获得了很多 vcore,因为它们处于空闲状态,但是当提交其他生产作业时,它们运行非常缓慢,因为它们没有获得所需数量的 executor。

  5. 最重要的问题:Yarn 不应该解除它最初为我的工作提供的执行器并将它们分配给其他工作吗?我在没有任何特殊优先级的默认队列中运行我的工作。

  6. 我应该不使用 spark 而使用 Sqoop 吗?

如果您需要系统的任何其他信息,请告诉我,如果我不清楚我的问题,请原谅我,因为我没有火花经验。

【问题讨论】:

    标签: apache-spark hive teradata hadoop-yarn


    【解决方案1】:

    我将尝试回答上述一些问题:

    1. 没有关于可遵循的合并功能的通用指南。您需要查看哪一个在 vcore 数量和任务执行方面更适合您。

    2. YARN 的动态分配功能可确保在初始分配完成后返回执行程序,并且执行程序在执行期间不会被使用。这有助于释放集群上的资源,并确保我们不会将集群资源硬连接到一个作业。

    3. Spark 和 Sqoop 是两个不同的东西。 Spark 用于数据的内存处理/并行处理(来自一个或多个数据源/分布式系统)。 Sqoop 从一个来源获取数据并加载到另一个来源。比较这两者并不是一个好主意。

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2018-12-07
      • 2019-07-25
      • 1970-01-01
      • 2017-10-31
      • 2021-10-13
      相关资源
      最近更新 更多