Apache Spark 黑名单机制介绍

在使用 Apache Spark的时候,作业会以分布式的方式在不同的节点上运行;特别是当集群的规模很大时,集群的节点出现各种问题是很常见的,比如某个磁盘出现问题等。我们都知道 Apache Spark是一个高性能、容错的分布式计算框架,一旦它知道某个计算所在的机器出现问题(比如磁盘故障),它会依据之前生成的 lineage 重新调度这个 Task。

我们现在来考虑下下面的场景:

  • 有个节点上的磁盘由于某些原因出现间歇性故障,导致某些扇区不能被读取。假设我们的 Spark 作业需要的数据正好就在这些扇区上,这将会导致这个 Task 失败。
  • 这个作业的 Driver 获取到这个信息,知道 Task 失败了,所以它会重新提交这个 Task。
  • Scheduler 获取这个请求之后,它会考虑到数据的本地性问题,所以很可能还是把这个 Task 分发到上述的机器,因为它并不知道上述机器的磁盘出现了问题。
  • 因为这个机器的磁盘出现问题,所以这个 Task 可能一样失败。然后 Driver 重新这些操作,最终导致了 Spark 作业出现失败!

上面提到的场景其实对我们人来说可以通过某些措施来避免。但是对于 Apache Spark 2.2.0 版本之前是无法避免的,不过高兴的是,来自 Cloudera 的工程师解决了这个问题:引入了黑名单机制 Blacklist(详情可以参见Spark-8425

,具体的设计文档参见 Design Doc for Blacklist Mechanism),并且随着 Apache Spark 2.2.0 版本发布,不过目前还处于实验性阶段。

黑名单机制其实是通过维护之前出现问题的执行器(Executors)和节点(Hosts)的记录。当某个任务(Task)出现失败,那么黑名单机制将会追踪这个任务关联的执行器以及主机,并记下这些信息;当在这个节点调度任务出现失败的次数超过一定的数目(默认为2),那么调度器将不会再将任务分发到那台节点。调度器甚至可以杀死那台机器对应的执行器,这些都可以通过相应的配置实现。

我们可以通过 Apache Spark WEB UI 界面看到执行器的状态(Status):如果执行器处于黑名单状态,你可以在页面上看到其状态为 Blacklisted ,否则为 Active。如下图所示:

0109.png

拥有了黑名单机制之后,上面场景的问题就可以很好的解决。

目前黑名单机制可以通过一系列的参数来控制,主要如下:

参数

默认值

含义

spark.blacklist.enabled

false

如果这个参数这为 true,那么 Spark 将不再会往黑名单里面的执行器调度任务。黑名单算法可以由其他“spark.blacklist”配置选项进一步控制,详情参见下面的介绍。

spark.blacklist.timeout

1h

(实验性) How long a node or executor is blacklisted for the entire application, before it is unconditionally removed from the blacklist to attempt running new tasks.

spark.blacklist.task.maxTaskAttemptsPerExecutor

1

(实验性) For a given task, how many times it can be retried on one executor before the executor is blacklisted for that task.

spark.blacklist.task.maxTaskAttemptsPerNode

2

(实验性) For a given task, how many times it can be retried on one node, before the entire node is blacklisted for that task.

spark.blacklist.stage.maxFailedTasksPerExecutor

2

(实验性) How many different tasks must fail on one executor, within one stage, before theexecutor is blacklisted for that stage.

spark.blacklist.stage.maxFailedExecutorsPerNode

2

(实验性) How many different executors are marked as blacklisted for a given stae, before the entire node is marked as failed for the stage.

spark.blacklist.application.maxFailedTasksPerExecutor

2

(实验性) How many different tasks must fail on one executor, in successful task sets, before the executor is blacklisted for the entire application. Blacklisted executors will be automatically added back to the pool of available resources after the timeout specified byspark.blacklist.timeout. Note that with dynamic allocation, though, the executors may get marked as idle and be reclaimed by the cluster manager.

spark.blacklist.application.maxFailedExecutorsPerNode

2

(实验性) How many different executors must be blacklisted for the entire application, before the node is blacklisted for the entire application. Blacklisted nodes will be automatically added back to the pool of available resources after the timeout specified byspark.blacklist.timeout. Note that with dynamic allocation, though, the executors on the node may get marked as idle and be reclaimed by the cluster manager.

spark.blacklist.killBlacklistedExecutors

false

(实验性) If set to "true", allow Spark to automatically kill, and attempt to re-create, executors when they are blacklisted. Note that, when an entire node is added to the blacklist, all of the executors on that node will be killed.

因为黑名单机制目前还处于实验性状态,所以上面的一些参数可能会在后面的 Spark 中有所修改。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏刘远的专栏

【 airflow 实战系列】 基于 python 的调度和监控工作流的平台

airflow 是一个使用python语言编写的data pipeline调度和监控工作流的平台。Airflow被Airbnb内部用来创建、监控和调整数据管道。...

2.7K00
来自专栏xingoo, 一个梦想做发明家的程序员

循序渐进,了解Hive是什么!

一直想抽个时间整理下最近的所学,断断续续接触hive也有半个多月了,大体上了解了很多Hive相关的知识。那么,一般对陌生事物的认知都会经历下面几个阶段: ...

25950
来自专栏别先生

一脸懵逼学习Hadoop-HA机制(以及HA机制的配置文件,测试)

1:能否让两个NameNode都正常影响客户端请求?   应该让两个NameNode节点在某个时间只能有一个节点正常影响客户端请求,相应请求的必须为Active...

24860
来自专栏Hans362 's Lab

Apache Spark:承诺与挑战

如果您正在寻找处理大量数据的解决方案,那么现在有很多选择。根据您的使用情况以及您希望对数据执行的操作类型,您可以选择各种各样的数据处理框架,如Apache Sa...

17300
来自专栏PPV课数据科学社区

实用 | Apache Hadoop 3.0.0-alpha2版本发布

作者:Andrew Wang,Ray Chiang Andrew Wang是Cloudera公司HDFS团队的一名软件工程师、Apache Hadoop PMC...

29540
来自专栏FreeBuf

macOS 0-day漏洞详情披露,可被利用完全接管系统

2017 年 12 月 31 日,一名推特账号为 Siguza 的安全研究人员公布了 macOS 0-day 漏洞的详情。该漏洞是一个本地提权漏洞,影响到所有 ...

20870
来自专栏大数据和云计算技术

新数仓系列:Hbase周边生态梳理(1)

本文简单梳理下其中一个应用比较广的HBASE的生态,可能不全,有更多的请大家留言。具体HBASE的基本原理扫描大家可以自行百度下,另外,要系统掌握HBASE,推...

48670
来自专栏about云

Cloudera Enterprise 6.0发布【集成Hadoop3.0】

问题导读 1.cloudera集成了哪些新的组件? 2.Cloudera Manager可以管理多少节点? 3.升级版本有哪些条件? 看到同行Fayson文章...

20130
来自专栏北京马哥教育

大数据Hadoop之HDFS认识

源自Google的GFS(Google分布式文件系统)论文,分布式文件系统(HDFS)是GFS的克隆版。HDFS负责数据文件的存储,可让多机器上分享存储空间,让...

42580
来自专栏王燚的专栏

腾讯云大数据平台的产品组件介绍及测试方法

本文将基于数据采集->数据存储->数据处理->数据展现的生命周期,描述一些大数据平台中使用的一些技术,对技术的框架、使用场景进行描述。

2K00

扫码关注云+社区

领取腾讯云代金券