【问题标题】:What performance parameters to set for spark scala code to run on yarn using spark-submit?为使用 spark-submit 在纱线上运行的 spark scala 代码设置哪些性能参数?
【发布时间】:2017-09-29 21:42:49
【问题描述】:

我的用例是合并两个表,其中一个表包含 200 个列的 3000 万条记录,另一个表包含 200 个列的 100 万条记录。我对小表使用广播连接。我将两个表都加载为数据-来自 HDFS 上的 hive 托管表的帧。

我需要为此用例设置驱动程序内存和执行程序内存以及其他参数的值。

我的纱线集群有这个硬件配置:

Spark 版本 2.0.0

Hdp 版本 2.5.3.0-37

1) 纱线客户 20

2) 最大。为容器分配的虚拟核心 (yarn.scheduler.maximum.allocation-vcores) 19

3) 最大。为一个纱线容器分配的内存 216gb

4) 可用集群内存 3.1 TB 可用

您需要的任何其他信息我都可以为此集群提供。

我必须减少完成这个过程的时间。

我一直在使用一些配置,但我认为它是错误的,我花了 4.5 分钟完成它,但我认为 spark 有能力减少这个时间。

【问题讨论】:

  • 您是否将表缓存到 RAM 中?
  • No @anshul_cached 我只是使用“spark.table("table_name")”代码将表加载为数据帧,然后继续帧进行合并。合并后我将表写回蜂巢将其存储为 ORC。
  • 将数据帧缓存到 RAM 并执行计数操作,然后应用其余的
  • 我尝试缓存两个数据帧,然后在缓存数据帧然后处理它时花费更多时间。 @anshul_cached
  • 缓存是惰性的。您是否在缓存后对数据帧执行计数操作?

标签: apache-spark apache-spark-sql spark-dataframe hadoop-yarn hortonworks-data-platform


【解决方案1】:

当你想加速你的 Spark 应用程序时,主要有两件事要考虑。

缓存/持久性

这不是加快处理速度的直接方法。当您有多个操作(reduce、join 等)并且您希望避免在失败的情况下重新计算 RDD 并因此减少应用程序运行时间时,这将非常有用。

增加并行度

这是加速 Spark 应用程序的实际解决方案。这可以通过增加分区的数量来实现。根据用例,您可能需要增加分区

  • 无论何时创建数据帧/rdds:这是增加分区的更好方法,因为您不必触发代价高昂的随机操作来增加分区。

  • 通过调用 repartition:这将触发 shuffle 操作。

注意:一旦你增加了分区的数量,然后增加执行器(可能是非常多的小容器,vcores和几GB的内存) p>

增加每个执行器内部的并行度 通过向每个执行程序添加更多内核,您可以增加分区级别的并行度。这也将加快处理速度。

为了更好地了解配置,请参考this post

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 2020-05-20
    • 2017-06-24
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多