加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

行使Spark Streaming SQL举办PV/UV统计

发布时间:2019-10-18 02:22:43 所属栏目:教程 来源:ligh-rain
导读:1.配景先容 PV/UV统计是流式说明一个常见的场景。通过PV可以对会见的网站做流量或热门说明,譬喻告白主可以通过PV值预估痛蚨枫告网页所带来的流量以及告白收入。其它一些场景必要对会见的用户作说明,好比说明用户的网页点击举动,此时就必要对UV做统计。

1.配景先容

PV/UV统计是流式说明一个常见的场景。通过PV可以对会见的网站做流量或热门说明,譬喻告白主可以通过PV值预估痛蚨枫告网页所带来的流量以及告白收入。其它一些场景必要对会见的用户作说明,好比说明用户的网页点击举动,此时就必要对UV做统计。

行使Spark Streaming SQL,并团结Redis可以很利便举办PV/UV的统计。本文将先容通过Streaming SQL斲丧Loghub中存储的用户会见信息,对已往1分钟内的数据举办PV/UV统计,将功效存入Redis中。

2.筹备事变

  • 建设E-MapReduce 3.23.0以上版本的Hadoop集群。
  • 下载并编译E-MapReduce-SDK包
  1. git clone git@github.com:aliyun/aliyun-emapreduce-sdk.git 
  2. cd aliyun-emapreduce-sdk 
  3. git checkout -b master-2.x origin/master-2.x 
  4. mvn clean package -DskipTests 

编译完后, assembly/target目次下会天生emr-datasources_shaded_${version}.jar,个中${version}为sdk的版本。

数据源

本文回收Loghub作为数据源,有关日记收罗、日记理会请参考日记处事。

3.统计PV/UV

一样平常场景下必要将统计出的PV/UV以及响应的统计时刻存入Redis。其他一些营业场景中,也会只生涯最新功效,用新的功效不绝包围更新旧的数据。以下起首先容第一种环境的操纵流程。

3.1启动客户端

呼吁行启动streaming-sql客户端

  1. streaming-sql --master yarn-client --num-executors 2 --executor-memory 2g --executor-cores 2 --jars emr-datasources_shaded_2.11-${version}.jar --driver-class-path emr-datasources_shaded_2.11-${version}.jar 

也可以建设SQL语句文件,通过streaming-sql -f的方法运行。

3.1界说数据表

数据源表界说如下

  1. CREATE TABLE loghub_source(user_ip STRING, __time__ TIMESTAMP)  
  2. USING loghub  
  3. OPTIONS( 
  4. sls.project=${sls.project}, 
  5. sls.store=${sls.store}, 
  6. access.key.id=${access.key.id}, 
  7. access.key.secret=${access.key.secret}, 
  8. endpoint=${endpoint}); 

个中,数据源表包括user_ip和__time__两个字段,别离代表用户的IP地点和loghub上的时刻列。OPTIONS中设置项的值按照现实设置。

功效表界说如下

  1. CREATE TABLE redis_sink  
  2. USING redis  
  3. OPTIONS( 
  4. table='statistic_info', 
  5. host=${redis_host}, 
  6. key.column='interval'); 

个中,statistic_info为Redis存储功效的表名,interval对应统计功效中的interval字段;设置项${redis_host}的值按照现实设置。

3.2建设流功课

  1. CREATE SCAN loghub_scan 
  2. ON loghub_source 
  3. USING STREAM 
  4. OPTIONS( 
  5. watermark.column='__time__', 
  6. watermark.delayThreshold='10 second'); 
  7.  
  8. CREATE STREAM job 
  9. OPTIONS( 
  10. checkpointLocation=${checkpoint_location}) 
  11. INSERT INTO redis_sink 
  12. SELECT COUNT(user_ip) AS pv, approx_count_distinct( user_ip) AS uv, window.end AS interval 
  13. FROM loghub_scan 
  14. GROUP BY TUMBLING(__time__, interval 1 minute), window; 

4.3查察统计功效

最终的统计功效如下图所示

行使Spark Streaming SQL举办PV/UV统计

可以看到,每隔一分钟城市天生一条数据,key的情势为表名:interval,value为pv和uv的值。

3.4实现包围更新

将功效表的设置项key.column修改为一个牢靠的值,譬喻界说如下

  1. CREATE TABLE redis_sink 
  2. USING redis  
  3. OPTIONS( 
  4. table='statistic_info', 
  5. host=${redis_host}, 
  6. key.column='statistic_type'); 

建设流功课的SQL改为

  1. CREATE STREAM job 
  2. OPTIONS( 
  3. checkpointLocation='/tmp/spark-test/checkpoint') 
  4. INSERT INTO redis_sink 
  5. SELECT "PV_UV" as statistic_type,COUNT(user_ip) AS pv, approx_count_distinct( user_ip) AS uv, window.end AS interval 
  6. FROM loghub_scan 
  7. GROUP BY TUMBLING(__time__, interval 1 minute), window; 

最终的统计功效如下图所示

行使Spark Streaming SQL举办PV/UV统计

可以看到,Redis中值保存了一个值,这个值每分钟都被更新,value包括pv、uv和interval的值。

4.总结

本文扼要先容了行使Streaming SQL团结Redis实现流式处理赏罚中统计PV/UV的需求。后续文章,我将先容Spark Streaming SQL的更多内容。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读