DataStream统计uv问题

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

DataStream统计uv问题

ゞ野蠻遊戲χ
大家好!


     想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题:
     1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值,
          这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。
     2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。


DataStream<UvPer10Min&gt; uvPer10MinDataStream = userBehaviorSource
.windowAll(TumblingProcessingTimeWindows.of(Time.days(1L)))
.trigger(CountTrigger.of(1L))
.evictor(CountEvictor.of(0L, true))
.process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&gt;() {
private transient MapState<String, String&gt; userIdState;
private transient ValueState<Long&gt; uvCountState;
&nbsp; &nbsp;
谢谢!
Jiazhi
Reply | Threaded
Open this post in threaded view
|

Re: DataStream统计uv问题

Yun Gao

您好:
   1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。
   2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------
Sender:ゞ野蠻遊戲χ<[hidden email]>
Date:2020/07/07 22:32:51
Recipient:user-zh<[hidden email]>
Theme:DataStream统计uv问题

大家好!


&nbsp; &nbsp; &nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题:
&nbsp; &nbsp; &nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。
&nbsp; &nbsp; &nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。


DataStream<UvPer10Min&gt; uvPer10MinDataStream = userBehaviorSource
.windowAll(TumblingProcessingTimeWindows.of(Time.days(1L)))
.trigger(CountTrigger.of(1L))
.evictor(CountEvictor.of(0L, true))
.process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&gt;() {
private transient MapState<String, String&gt; userIdState;
private transient ValueState<Long&gt; uvCountState;
&nbsp; &nbsp;
谢谢!
Jiazhi
Reply | Threaded
Open this post in threaded view
|

回复: DataStream统计uv问题

ゞ野蠻遊戲χ
意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null?


------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"Yun Gao"<[hidden email]&gt;;
发送时间:&nbsp;2020年7月9日(星期四) 上午10:07
收件人:&nbsp;"ゞ野蠻遊戲χ"<[hidden email]&gt;;"user-zh"<[hidden email]&gt;;

主题:&nbsp;Re: DataStream统计uv问题




您好:
&nbsp;&nbsp; 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。
&nbsp;&nbsp; 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------
Sender:ゞ野蠻遊戲χ<[hidden email]&gt;
Date:2020/07/07 22:32:51
Recipient:user-zh<[hidden email]&gt;
Theme:DataStream统计uv问题

大家好!


&amp;nbsp; &amp;nbsp; &amp;nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题:
&amp;nbsp; &amp;nbsp; &amp;nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。
&amp;nbsp; &amp;nbsp; &amp;nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。


DataStream<UvPer10Min&amp;gt; uvPer10MinDataStream = userBehaviorSource
.windowAll(TumblingProcessingTimeWindows.of(Time.days(1L)))
.trigger(CountTrigger.of(1L))
.evictor(CountEvictor.of(0L, true))
.process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&amp;gt;() {
private transient MapState<String, String&amp;gt; userIdState;
private transient ValueState<Long&amp;gt; uvCountState;
&amp;nbsp; &amp;nbsp;
谢谢!
Jiazhi
Reply | Threaded
Open this post in threaded view
|

Re: 回复: DataStream统计uv问题

Yun Gao
逻辑上这么说也没有问题;可以认为它是先把收到的记录(根据key和time)分配到特定的窗口中,然后不同的窗口的状态和计算都是独立的



 ------------------Original Mail ------------------
Sender:ゞ野蠻遊戲χ <[hidden email]>
Send Date:Thu Jul 9 10:16:06 2020
Recipients:user-zh <[hidden email]>
Subject:回复: DataStream统计uv问题
意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null?


------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"Yun Gao"<[hidden email]&gt;;
发送时间:&nbsp;2020年7月9日(星期四) 上午10:07
收件人:&nbsp;"ゞ野蠻遊戲χ"<[hidden email]&gt;;"user-zh"<[hidden email]&gt;;

主题:&nbsp;Re: DataStream统计uv问题




您好:
&nbsp;&nbsp; 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。
&nbsp;&nbsp; 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------
Sender:ゞ野蠻遊戲χ<[hidden email]&gt;
Date:2020/07/07 22:32:51
Recipient:user-zh<[hidden email]&gt;
Theme:DataStream统计uv问题

大家好!


&amp;nbsp; &amp;nbsp; &amp;nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题:
&amp;nbsp; &amp;nbsp; &amp;nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。
&amp;nbsp; &amp;nbsp; &amp;nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。


DataStream<UvPer10Min&amp;gt; uvPer10MinDataStream = userBehaviorSource
.windowAll(TumblingProcessingTimeWindows.of(Time.days(1L)))
.trigger(CountTrigger.of(1L))
.evictor(CountEvictor.of(0L, true))
.process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&amp;gt;() {
private transient MapState<String, String&amp;gt; userIdState;
private transient ValueState<Long&amp;gt; uvCountState;
&amp;nbsp; &amp;nbsp;
谢谢!
Jiazhi
Reply | Threaded
Open this post in threaded view
|

回复: 回复: DataStream统计uv问题

Cayden chen
我建议你用ContinuousEventTimeTrigger,可以在窗口范围内,连续触发。
你这个countTrigger,促发次数太多了,而且你后面是processWindowFunction,导致计算压力比较大。
建议你用aggregateWindowFuntion




------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"Yun Gao"<[hidden email]&gt;;
发送时间:&nbsp;2020年7月9日(星期四) 上午10:18
收件人:&nbsp;"ゞ野蠻遊戲χ"<[hidden email]&gt;;"user-zh"<[hidden email]&gt;;

主题:&nbsp;Re: 回复: DataStream统计uv问题



逻辑上这么说也没有问题;可以认为它是先把收到的记录(根据key和time)分配到特定的窗口中,然后不同的窗口的状态和计算都是独立的



&nbsp;------------------Original Mail ------------------
Sender:ゞ野蠻遊戲χ <[hidden email]&gt;
Send Date:Thu Jul 9 10:16:06 2020
Recipients:user-zh <[hidden email]&gt;
Subject:回复: DataStream统计uv问题
意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null?


------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
发件人:&amp;nbsp;"Yun Gao"<[hidden email]&amp;gt;;
发送时间:&amp;nbsp;2020年7月9日(星期四) 上午10:07
收件人:&amp;nbsp;"ゞ野蠻遊戲χ"<[hidden email]&amp;gt;;"user-zh"<[hidden email]&amp;gt;;

主题:&amp;nbsp;Re: DataStream统计uv问题




您好:
&amp;nbsp;&amp;nbsp; 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。
&amp;nbsp;&amp;nbsp; 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------
Sender:ゞ野蠻遊戲χ<[hidden email]&amp;gt;
Date:2020/07/07 22:32:51
Recipient:user-zh<[hidden email]&amp;gt;
Theme:DataStream统计uv问题

大家好!


&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题:
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值,
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。


DataStream<UvPer10Min&amp;amp;gt; uvPer10MinDataStream = userBehaviorSource
.windowAll(TumblingProcessingTimeWindows.of(Time.days(1L)))
.trigger(CountTrigger.of(1L))
.evictor(CountEvictor.of(0L, true))
.process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&amp;amp;gt;() {
private transient MapState<String, String&amp;amp;gt; userIdState;
private transient ValueState<Long&amp;amp;gt; uvCountState;
&amp;amp;nbsp; &amp;amp;nbsp;
谢谢!
Jiazhi
Reply | Threaded
Open this post in threaded view
|

回复: 回复: DataStream统计uv问题

ゞ野蠻遊戲χ
不错的想法




------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"1193216154"<[hidden email]&gt;;
发送时间:&nbsp;2020年7月9日(星期四) 上午10:25
收件人:&nbsp;"user-zh"<[hidden email]&gt;;

主题:&nbsp;回复: 回复: DataStream统计uv问题



我建议你用ContinuousEventTimeTrigger,可以在窗口范围内,连续触发。
你这个countTrigger,促发次数太多了,而且你后面是processWindowFunction,导致计算压力比较大。
建议你用aggregateWindowFuntion




------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
发件人:&amp;nbsp;"Yun Gao"<[hidden email]&amp;gt;;
发送时间:&amp;nbsp;2020年7月9日(星期四) 上午10:18
收件人:&amp;nbsp;"ゞ野蠻遊戲χ"<[hidden email]&amp;gt;;"user-zh"<[hidden email]&amp;gt;;

主题:&amp;nbsp;Re: 回复: DataStream统计uv问题



逻辑上这么说也没有问题;可以认为它是先把收到的记录(根据key和time)分配到特定的窗口中,然后不同的窗口的状态和计算都是独立的



&amp;nbsp;------------------Original Mail ------------------
Sender:ゞ野蠻遊戲χ <[hidden email]&amp;gt;
Send Date:Thu Jul 9 10:16:06 2020
Recipients:user-zh <[hidden email]&amp;gt;
Subject:回复: DataStream统计uv问题
意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null?


------------------&amp;amp;nbsp;原始邮件&amp;amp;nbsp;------------------
发件人:&amp;amp;nbsp;"Yun Gao"<[hidden email]&amp;amp;gt;;
发送时间:&amp;amp;nbsp;2020年7月9日(星期四) 上午10:07
收件人:&amp;amp;nbsp;"ゞ野蠻遊戲χ"<[hidden email]&amp;amp;gt;;"user-zh"<[hidden email]&amp;amp;gt;;

主题:&amp;amp;nbsp;Re: DataStream统计uv问题




您好:
&amp;amp;nbsp;&amp;amp;nbsp; 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。
&amp;amp;nbsp;&amp;amp;nbsp; 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------
Sender:ゞ野蠻遊戲χ<[hidden email]&amp;amp;gt;
Date:2020/07/07 22:32:51
Recipient:user-zh<[hidden email]&amp;amp;gt;
Theme:DataStream统计uv问题

大家好!


&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题:
&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值,
&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。
&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。


DataStream<UvPer10Min&amp;amp;amp;gt; uvPer10MinDataStream = userBehaviorSource
.windowAll(TumblingProcessingTimeWindows.of(Time.days(1L)))
.trigger(CountTrigger.of(1L))
.evictor(CountEvictor.of(0L, true))
.process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&amp;amp;amp;gt;() {
private transient MapState<String, String&amp;amp;amp;gt; userIdState;
private transient ValueState<Long&amp;amp;amp;gt; uvCountState;
&amp;amp;amp;nbsp; &amp;amp;amp;nbsp;
谢谢!
Jiazhi
Reply | Threaded
Open this post in threaded view
|

回复:DataStream统计uv问题

Yichao Yang
In reply to this post by ゞ野蠻遊戲χ
Hi,


我看了下你统计uv的方法,是不是可以思考转换一下计算uv的方式,开一天的窗口可能不是一个合适的方法,可以参考[1]中的方案。


[1]&nbsp;https://lists.apache.org/thread.html/rbe00ee38e2d07310d4e3c796de86c65205d1f5deecfc1678d9ebbdea%40%3Cuser-zh.flink.apache.org%3E




------------------&nbsp;原始邮件&nbsp;------------------
发件人:&nbsp;"ゞ野蠻遊戲χ"<[hidden email]&gt;;
发送时间:&nbsp;2020年7月7日(星期二) 晚上10:32
收件人:&nbsp;"user-zh"<[hidden email]&gt;;

主题:&nbsp;DataStream统计uv问题



大家好!


&amp;nbsp; &amp;nbsp; &amp;nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题:
&amp;nbsp; &amp;nbsp; &amp;nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。
&amp;nbsp; &amp;nbsp; &amp;nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。


DataStream<UvPer10Min&amp;gt; uvPer10MinDataStream = userBehaviorSource
.windowAll(TumblingProcessingTimeWindows.of(Time.days(1L)))
.trigger(CountTrigger.of(1L))
.evictor(CountEvictor.of(0L, true))
.process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&amp;gt;() {
private transient MapState<String, String&amp;gt; userIdState;
private transient ValueState<Long&amp;gt; uvCountState;
&amp;nbsp; &amp;nbsp;
谢谢!
Jiazhi