当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pyspark SparkContext.setJobGroup用法及代码示例


本文简要介绍 pyspark.SparkContext.setJobGroup 的用法。

用法:

SparkContext.setJobGroup(groupId, description, interruptOnCancel=False)

将组 ID 分配给此线程启动的所有作业,直到组 ID 设置为不同的值或被清除。

通常,应用程序中的一个执行单元由多个 Spark 操作或作业组成。应用程序程序员可以使用这种方法将所有这些作业组合在一起并给出组说明。设置后,Spark Web UI 会将此类作业与该组相关联。

应用程序可以使用 SparkContext.cancelJobGroup() 取消该组中所有正在运行的作业。

注意

如果作业组的 interruptOnCancel 设置为 true,则作业取消将导致在作业的执行线程上调用 Thread.interrupt()。这有助于确保任务实际上及时停止,但由于 HDFS-1208,HDFS 可能会通过将节点标记为死节点来响应 Thread.interrupt(),因此默认情况下处于关闭状态。

如果您并行运行作业,请使用 pyspark.InheritableThread 进行线程本地继承,并防止资源泄漏。

例子

>>> import threading
>>> from time import sleep
>>> from pyspark import InheritableThread
>>> result = "Not Set"
>>> lock = threading.Lock()
>>> def map_func(x):
...     sleep(100)
...     raise RuntimeError("Task should have been cancelled")
>>> def start_job(x):
...     global result
...     try:
...         sc.setJobGroup("job_to_cancel", "some description")
...         result = sc.parallelize(range(x)).map(map_func).collect()
...     except Exception as e:
...         result = "Cancelled"
...     lock.release()
>>> def stop_job():
...     sleep(5)
...     sc.cancelJobGroup("job_to_cancel")
>>> suppress = lock.acquire()
>>> suppress = InheritableThread(target=start_job, args=(10,)).start()
>>> suppress = InheritableThread(target=stop_job).start()
>>> suppress = lock.acquire()
>>> print(result)
Cancelled

相关用法


注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.SparkContext.setJobGroup。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。