-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SS]《1.1 Structured Streaming 实现思路与实现概述》讨论区 #29
Comments
@lw-lin 你好,请教一个问题。 |
是前者
呃,不会
用 1min 做 trigger,实时从 kafka 中拉数据、并写出到 HDFS dir x |
您好,我有个问题想请教下,我当前用的是spark streaming处理每个页面每小时的新增用户数问题的,具体逻辑是:批次读取stream,然后解析stream中的日志事件,用每个事件的pageid和uid拼接为key到数据库表user里查找用户是否存在,如果不存在(说明是该pageid的新用户),则更新user.new表,将对应的pageid下的时间段下的用户数+1。这个流程会有个严重的缺点,就是每条log解析出来的事件和uid都需要去到表里查找,所以表的请求量很大。现在想用structured streaming优化这个方案,目前的想法是先group by pageid,uid agg: floor(min(time)/3600)*3600 as event_time as min_table创建一个memory 表,然后再在这个表的基础上group by pageid,event_time,agg: count(distinct uid)创建一个writestream,然后输出到外部表hbase。但是感觉这种方案不可行,起码memory表会越来越大,另外如何保证尽可能少的对hbase的输出也是个问题?谢谢 |
不管是 spark streaming, 还是 structured streaming, 都可以先做一步 pageid, uid 的聚合,再往外写。structured streaming 的 memory table 确实需要有个过期机制(比如只记录最近三天、或一周的所有用户),否则 oom。 上面说的是精确记录 distinct(id) 的做法。如果不需要精确记录(比如可以接受误差在 5% 以内),那么可以考虑用基于概率的算法,占用空间非常小。比如一些概率算法的索引:http://blog.csdn.net/bagba/article/details/51822189。 |
@lw-lin |
@zhouyan8603 |
@lw-lin 万分感谢!我自己再好好考虑下 |
博主,好想看你出个CoolPlayFlink系列,讲解方式解决了我很多思考,非常受用。 |
博主你好, |
如需要贴代码,请复制以下内容并修改:
谢谢!
The text was updated successfully, but these errors were encountered: