作业并行度设置

最近更新时间:2019-10-23 17:34:51

作业并行度说明

什么是作业的并行度

流计算作业在运行时是并行执行的。简单来讲,所有算子及其之间的连接关系,组成了整个作业的运行图,而运行图中的各个算子组成了一个个的任务(Task)。每个任务可以分为若干个并行执行的子任务(Subtask),这些子任务的个数就是算子的并行度(Parallelism)。

对同一个作业而言,所有算子中最大的并行度,就是整个作业的并行度。例如下图中,有4个算子,前3个算子的并行度为2,最后一个算子的并行度为1,那么整个作业的并行度取最大值2。
算子的并行度

为什么要调整并行度

由上图可以看到,理论上来讲,算子的并行度越大,每个算子同时处理数据的能力相对就越强,同时整个作业的吞吐量也会提升,相应地资源占用也会上升;反之,降低并行度,那么每个算子处理能力减少,但整个作业的资源占用也会降低。当作业资源不足时,提升并行度,可以实现扩容;当作业资源冗余时,降低并行度,可以实现缩容。

因此,可以根据作业的实际运行情况,得到一个理想的并行度,从而在保证处理能力的情况下,避免资源浪费,节省成本。

作业并行度和计算资源 CU 的关系

在流计算 Oceanus 中,目前作业的并行度与 CU 之间的比例为1:1。例如,如果一个作业运行后,实际的并行度是8,那么它所消耗的计算资源 CU 数就是8。

在未来的版本中,会开放并行度与 CU 之间的比例调整,例如允许一个计算资源 CU 对应2个及以上并行度,以更灵活地适配多种场景(例如对 CPU 要求不高的 I/O 密集型作业)。

作业并行度与默认并行度的关系

流计算 Oceanus 作业在【购买】和【变配】时,允许设置“默认并行度”。默认并行度只是一个默认值,代表如果程序里未显式指定某个算子的并行度,那么就以默认并行度为准。

  • 对于 SQL 作业,由于目前不提供运行图算子并行度的设置,那么可以认为购买或变配时设置的“默认并行度”就是最终的作业并行度。
  • 对于 JAR 作业,用户可以在代码里显式设置每个算子的并行度信息,因此作业并行度 = 提交 JAR 作业时生成的运行图中所有算子的并行度中最大的值。

作业默认并行度初始设置

  • 选择【作业管理】>【新建SQL作业】,进入作业创建页面。在这个页面,用户需要选择“计算资源”。由于 SQL 作业目前不提供单个算子的并行度调整选项,这里的计算资源数,可以认为是默认并行度。
  • 选择【作业管理】>【新建JAR作业】,首先要选择集群,集群选择后,会进入作业创建界面。在这个界面,用户需要选择“算子默认并行度”。

作业默认并行度查看和调整

查看一个作业的默认并行度,选择【作业管理】>【操作】>【变配】,在弹出对话框中,会显示当前作业的默认并行度,并可以对这个值进行调整。

  • 对 SQL 作业进行扩容和缩容,可通过调整作业的默认并行度;
  • 对 JAR 作业进行扩容和缩容,可对作业代码中未显式指定并行度的算子并行度。
    注意:

    如果您在 JAR 作业的代码里,将所有算子的并行度已经设置完毕,那么界面上的“变配”操作并不能起到扩容或缩容的作用。