You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 忝忝向仧 <15...@qq.com> on 2020/07/05 14:47:40 UTC

【Flink的shuffle mode】

Hi,all:


看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle mode看是UNDEFINED的。
那么,shuffle mode有哪些方式?在应用里面可以设置么?


谢谢.

回复:【Flink的shuffle mode】

Posted by 夏帅 <jk...@dingtalk.com.INVALID>.
你好,可以参考下ExecutionConfigOptions,OptimizerConfigOptions和GlobalConfiguration,里面有比较清楚地介绍




------------------------------------------------------------------
发件人:忝忝向仧 <15...@qq.com>
发送时间:2020年7月6日(星期一) 12:16
收件人:user-zh <us...@flink.apache.org>
主 题:回复:【Flink的shuffle mode】

那就是说datasream默认模式就是pipeline,而批模式是batch,批的模式是存在shuffle情况下,需要等shuffle操作造成,才能发送到下游.那如果批应用有shuffle操作和没有shuffle的,是都要等这个shuffle操作完成了才能一起发给下游,还是说其他非shuffle操作完成了可以先发给下游,不用等shuffle操作完成一起再发送?



发自我的iPhone


------------------ 原始邮件 ------------------
发件人: Jingsong Li <jingsonglee0@gmail.com&gt;
发送时间: 2020年7月6日 11:03
收件人: user-zh <user-zh@flink.apache.org&gt;
主题: 回复:【Flink的shuffle mode】



Hi,

现在就两种:pipeline和batch

batch的话是block住,直到执行完毕才发给下游的,所以这个shuffle mode一般只对批作业有用。

理论上可以per transformation的来设置,see PartitionTransformation.

Best,
Jingsong

On Sun, Jul 5, 2020 at 10:48 PM 忝忝向仧 <153488125@qq.com&gt; wrote:

&gt; Hi,all:
&gt;
&gt;
&gt; 看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle
&gt; mode看是UNDEFINED的。
&gt; 那么,shuffle mode有哪些方式?在应用里面可以设置么?
&gt;
&gt;
&gt; 谢谢.



-- 
Best, Jingsong Lee

回复:【Flink的shuffle mode】

Posted by 夏帅 <jk...@dingtalk.com.INVALID>.
补充: 1.11的shuffle-mode配置的默认值为ALL_EDGES_BLOCKING
共有
ALL_EDGES_BLOCKING(等同于batch)
FORWARD_EDGES_PIPELINEDPOINTWISE_EDGES_PIPELINED
ALL_EDGES_PIPELINED(等同于pipelined)对于pipelined多出了两种选择


------------------------------------------------------------------
发件人:忝忝向仧 <15...@qq.com>
发送时间:2020年7月7日(星期二) 23:37
收件人:user-zh <us...@flink.apache.org>
主 题:回复: 【Flink的shuffle mode】

如果是批的模式,怎么在应用程序里面指定shuffle_mode呢?
另外,下面提到如果是流的计算,一定是pipeline模式.
那为什么我使用datastream做keyby流操作后,跟踪源码它的mode是UNDEFINED呢?
谢谢.




------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"Jingsong Li"<jingsonglee0@gmail.com&gt;;
发送时间:&nbsp;2020年7月6日(星期一) 中午12:19
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: 【Flink的shuffle mode】



pipeline:直接走网络传输,不buffer所有数据
batch:buffer所有数据,结束后一起发送

流一定是pipeline
批可以是pipeline(更好的性能),也可以是batch(更好的容错和更简单的资源申请)

Best,
Jingsong

On Mon, Jul 6, 2020 at 12:16 PM 忝忝向仧 <153488125@qq.com&gt; wrote:

&gt;
&gt; 那就是说datasream默认模式就是pipeline,而批模式是batch,批的模式是存在shuffle情况下,需要等shuffle操作造成,才能发送到下游.那如果批应用有shuffle操作和没有shuffle的,是都要等这个shuffle操作完成了才能一起发给下游,还是说其他非shuffle操作完成了可以先发给下游,不用等shuffle操作完成一起再发送?
&gt;
&gt;
&gt;
&gt; 发自我的iPhone
&gt;
&gt;
&gt; ------------------ 原始邮件 ------------------
&gt; 发件人: Jingsong Li <jingsonglee0@gmail.com&amp;gt;
&gt; 发送时间: 2020年7月6日 11:03
&gt; 收件人: user-zh <user-zh@flink.apache.org&amp;gt;
&gt; 主题: 回复:【Flink的shuffle mode】
&gt;
&gt;
&gt;
&gt; Hi,
&gt;
&gt; 现在就两种:pipeline和batch
&gt;
&gt; batch的话是block住,直到执行完毕才发给下游的,所以这个shuffle mode一般只对批作业有用。
&gt;
&gt; 理论上可以per transformation的来设置,see PartitionTransformation.
&gt;
&gt; Best,
&gt; Jingsong
&gt;
&gt; On Sun, Jul 5, 2020 at 10:48 PM 忝忝向仧 <153488125@qq.com&amp;gt; wrote:
&gt;
&gt; &amp;gt; Hi,all:
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; 看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle
&gt; &amp;gt; mode看是UNDEFINED的。
&gt; &amp;gt; 那么,shuffle mode有哪些方式?在应用里面可以设置么?
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; 谢谢.
&gt;
&gt;
&gt;
&gt; --
&gt; Best, Jingsong Lee



-- 
Best, Jingsong Lee

回复:【Flink的shuffle mode】

Posted by 夏帅 <jk...@dingtalk.com.INVALID>.
你好:
问题1,指定shuffle_mode
tEnv.getConfig.getConfiguration.setString(ExecutionConfigOptions.TABLE_EXEC_SHUFFLE_MODE, "pipeline")
问题2,mode是UNDEFINED的概念
使用UNDEFINED并不是说模式没有定义,而是由框架自己决定
The shuffle mode is undefined. It leaves it up to the framework to decide the shuffle mode.



------------------------------------------------------------------
发件人:忝忝向仧 <15...@qq.com>
发送时间:2020年7月7日(星期二) 23:37
收件人:user-zh <us...@flink.apache.org>
主 题:回复: 【Flink的shuffle mode】

如果是批的模式,怎么在应用程序里面指定shuffle_mode呢?
另外,下面提到如果是流的计算,一定是pipeline模式.
那为什么我使用datastream做keyby流操作后,跟踪源码它的mode是UNDEFINED呢?
谢谢.




------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"Jingsong Li"<jingsonglee0@gmail.com&gt;;
发送时间:&nbsp;2020年7月6日(星期一) 中午12:19
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: 【Flink的shuffle mode】



pipeline:直接走网络传输,不buffer所有数据
batch:buffer所有数据,结束后一起发送

流一定是pipeline
批可以是pipeline(更好的性能),也可以是batch(更好的容错和更简单的资源申请)

Best,
Jingsong

On Mon, Jul 6, 2020 at 12:16 PM 忝忝向仧 <153488125@qq.com&gt; wrote:

&gt;
&gt; 那就是说datasream默认模式就是pipeline,而批模式是batch,批的模式是存在shuffle情况下,需要等shuffle操作造成,才能发送到下游.那如果批应用有shuffle操作和没有shuffle的,是都要等这个shuffle操作完成了才能一起发给下游,还是说其他非shuffle操作完成了可以先发给下游,不用等shuffle操作完成一起再发送?
&gt;
&gt;
&gt;
&gt; 发自我的iPhone
&gt;
&gt;
&gt; ------------------ 原始邮件 ------------------
&gt; 发件人: Jingsong Li <jingsonglee0@gmail.com&amp;gt;
&gt; 发送时间: 2020年7月6日 11:03
&gt; 收件人: user-zh <user-zh@flink.apache.org&amp;gt;
&gt; 主题: 回复:【Flink的shuffle mode】
&gt;
&gt;
&gt;
&gt; Hi,
&gt;
&gt; 现在就两种:pipeline和batch
&gt;
&gt; batch的话是block住,直到执行完毕才发给下游的,所以这个shuffle mode一般只对批作业有用。
&gt;
&gt; 理论上可以per transformation的来设置,see PartitionTransformation.
&gt;
&gt; Best,
&gt; Jingsong
&gt;
&gt; On Sun, Jul 5, 2020 at 10:48 PM 忝忝向仧 <153488125@qq.com&amp;gt; wrote:
&gt;
&gt; &amp;gt; Hi,all:
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; 看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle
&gt; &amp;gt; mode看是UNDEFINED的。
&gt; &amp;gt; 那么,shuffle mode有哪些方式?在应用里面可以设置么?
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; 谢谢.
&gt;
&gt;
&gt;
&gt; --
&gt; Best, Jingsong Lee



-- 
Best, Jingsong Lee

回复: 【Flink的shuffle mode】

Posted by 忝忝向仧 <15...@qq.com>.
如果是批的模式,怎么在应用程序里面指定shuffle_mode呢?
另外,下面提到如果是流的计算,一定是pipeline模式.
那为什么我使用datastream做keyby流操作后,跟踪源码它的mode是UNDEFINED呢?
谢谢.




------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"Jingsong Li"<jingsonglee0@gmail.com&gt;;
发送时间:&nbsp;2020年7月6日(星期一) 中午12:19
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: 【Flink的shuffle mode】



pipeline:直接走网络传输,不buffer所有数据
batch:buffer所有数据,结束后一起发送

流一定是pipeline
批可以是pipeline(更好的性能),也可以是batch(更好的容错和更简单的资源申请)

Best,
Jingsong

On Mon, Jul 6, 2020 at 12:16 PM 忝忝向仧 <153488125@qq.com&gt; wrote:

&gt;
&gt; 那就是说datasream默认模式就是pipeline,而批模式是batch,批的模式是存在shuffle情况下,需要等shuffle操作造成,才能发送到下游.那如果批应用有shuffle操作和没有shuffle的,是都要等这个shuffle操作完成了才能一起发给下游,还是说其他非shuffle操作完成了可以先发给下游,不用等shuffle操作完成一起再发送?
&gt;
&gt;
&gt;
&gt; 发自我的iPhone
&gt;
&gt;
&gt; ------------------ 原始邮件 ------------------
&gt; 发件人: Jingsong Li <jingsonglee0@gmail.com&amp;gt;
&gt; 发送时间: 2020年7月6日 11:03
&gt; 收件人: user-zh <user-zh@flink.apache.org&amp;gt;
&gt; 主题: 回复:【Flink的shuffle mode】
&gt;
&gt;
&gt;
&gt; Hi,
&gt;
&gt; 现在就两种:pipeline和batch
&gt;
&gt; batch的话是block住,直到执行完毕才发给下游的,所以这个shuffle mode一般只对批作业有用。
&gt;
&gt; 理论上可以per transformation的来设置,see PartitionTransformation.
&gt;
&gt; Best,
&gt; Jingsong
&gt;
&gt; On Sun, Jul 5, 2020 at 10:48 PM 忝忝向仧 <153488125@qq.com&amp;gt; wrote:
&gt;
&gt; &amp;gt; Hi,all:
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; 看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle
&gt; &amp;gt; mode看是UNDEFINED的。
&gt; &amp;gt; 那么,shuffle mode有哪些方式?在应用里面可以设置么?
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; 谢谢.
&gt;
&gt;
&gt;
&gt; --
&gt; Best, Jingsong Lee



-- 
Best, Jingsong Lee

Re: 【Flink的shuffle mode】

Posted by Jingsong Li <ji...@gmail.com>.
pipeline:直接走网络传输,不buffer所有数据
batch:buffer所有数据,结束后一起发送

流一定是pipeline
批可以是pipeline(更好的性能),也可以是batch(更好的容错和更简单的资源申请)

Best,
Jingsong

On Mon, Jul 6, 2020 at 12:16 PM 忝忝向仧 <15...@qq.com> wrote:

>
> 那就是说datasream默认模式就是pipeline,而批模式是batch,批的模式是存在shuffle情况下,需要等shuffle操作造成,才能发送到下游.那如果批应用有shuffle操作和没有shuffle的,是都要等这个shuffle操作完成了才能一起发给下游,还是说其他非shuffle操作完成了可以先发给下游,不用等shuffle操作完成一起再发送?
>
>
>
> 发自我的iPhone
>
>
> ------------------ 原始邮件 ------------------
> 发件人: Jingsong Li <jingsonglee0@gmail.com&gt;
> 发送时间: 2020年7月6日 11:03
> 收件人: user-zh <user-zh@flink.apache.org&gt;
> 主题: 回复:【Flink的shuffle mode】
>
>
>
> Hi,
>
> 现在就两种:pipeline和batch
>
> batch的话是block住,直到执行完毕才发给下游的,所以这个shuffle mode一般只对批作业有用。
>
> 理论上可以per transformation的来设置,see PartitionTransformation.
>
> Best,
> Jingsong
>
> On Sun, Jul 5, 2020 at 10:48 PM 忝忝向仧 <153488125@qq.com&gt; wrote:
>
> &gt; Hi,all:
> &gt;
> &gt;
> &gt; 看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle
> &gt; mode看是UNDEFINED的。
> &gt; 那么,shuffle mode有哪些方式?在应用里面可以设置么?
> &gt;
> &gt;
> &gt; 谢谢.
>
>
>
> --
> Best, Jingsong Lee



-- 
Best, Jingsong Lee

回复:【Flink的shuffle mode】

Posted by 忝忝向仧 <15...@qq.com>.
那就是说datasream默认模式就是pipeline,而批模式是batch,批的模式是存在shuffle情况下,需要等shuffle操作造成,才能发送到下游.那如果批应用有shuffle操作和没有shuffle的,是都要等这个shuffle操作完成了才能一起发给下游,还是说其他非shuffle操作完成了可以先发给下游,不用等shuffle操作完成一起再发送?



发自我的iPhone


------------------ 原始邮件 ------------------
发件人: Jingsong Li <jingsonglee0@gmail.com&gt;
发送时间: 2020年7月6日 11:03
收件人: user-zh <user-zh@flink.apache.org&gt;
主题: 回复:【Flink的shuffle mode】



Hi,

现在就两种:pipeline和batch

batch的话是block住,直到执行完毕才发给下游的,所以这个shuffle mode一般只对批作业有用。

理论上可以per transformation的来设置,see PartitionTransformation.

Best,
Jingsong

On Sun, Jul 5, 2020 at 10:48 PM 忝忝向仧 <153488125@qq.com&gt; wrote:

&gt; Hi,all:
&gt;
&gt;
&gt; 看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle
&gt; mode看是UNDEFINED的。
&gt; 那么,shuffle mode有哪些方式?在应用里面可以设置么?
&gt;
&gt;
&gt; 谢谢.



-- 
Best, Jingsong Lee

Re: 【Flink的shuffle mode】

Posted by Jingsong Li <ji...@gmail.com>.
Hi,

现在就两种:pipeline和batch

batch的话是block住,直到执行完毕才发给下游的,所以这个shuffle mode一般只对批作业有用。

理论上可以per transformation的来设置,see PartitionTransformation.

Best,
Jingsong

On Sun, Jul 5, 2020 at 10:48 PM 忝忝向仧 <15...@qq.com> wrote:

> Hi,all:
>
>
> 看Flink源码时候,在应用中使用keyBy后,源码的transformations会有shuffle mode方法,这个shuffle
> mode看是UNDEFINED的。
> 那么,shuffle mode有哪些方式?在应用里面可以设置么?
>
>
> 谢谢.



-- 
Best, Jingsong Lee