全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
流计算

热词统计

更新时间:2017-11-28 10:07:00

热词统计分析在搜索热词、论坛热词、标签热词等场景有非常广泛的应用,例如微博搜索的实时热词统计,可以方便引导用户了解微博上最新最火的热词。热词统计分析实际上就是一个简单的WordCount作业,而流式实时热词统计分析将WordCount处理逻辑整体转换为流式实时处理,可以做到实时对热词进行统计分析,并可以实时展现。下面我们以WordCount流式作业为例,讲解下如何编写第一个流式计算作业。

Q: 什么是Wordcount?

A: 大数据的wordcount作业好比编程教学中的”Hello World”,通常均作为新手用户必不可少的入门作业。下面就以阿里云流计算的wordcount为例,讲解如何开发一个流式版本的wordcount。新手用户通过wordcount作业,可以学习基本的StreamSQL语法格式,以及作业编写/发布基本操作。

代码开发

进入阿里云流计算产品首页,点击头部导航栏【开发】模块,进入数据开发的IDE,打开阿里云流计算内置的名称为新手作业文件夹,双击选择wordcount作业。如下图:

wordcount作业

流计算的wordcount作业和批量作业原理基本一致,仅仅是在于流式的wordcount数据存储是持续且无界的,因此流计算wordcount理论上除非用户显示终止(Kill),否则不应该停止运行。

这段StreamSQL代码讲解如下:

  1. 1 create stream table stream_source(word string);
  2. 2 create result table stream_result(word string, cnt bigint);
  3. 3
  4. 4 insert into stream_result select
  5. 5 t.word
  6. 6 ,count(1)
  7. 7 from stream_source t
  8. 8 group by t.word;
  • 代码第1行,我们声明引用一张流式数据表,该数据表名称为stream_source,内部仅包含一个类型为string,名称为word的列。

    如前所述,流计算的数据驱动源来自于流式数据。因此这里的stream_source就是数据驱动源,stream_source每条(批)数据均会触发下游流计算的一次计算。

  • 代码第2行,我们声明引用一张结果表,用来存放我们的wordcount计算结果。该数据表名称为stream_result,内部包含一个类型为string,名称为word的列,另加一个类型为bigint,名称为cnt的列。

    如前所述,流计算本身不带有任何数据存储,所有的结果数据存储理论上均为普通的RDS、OTS等存储系统。我们这里声明引用一张结果表,为计算的结果数据存储所用。

  • 代码从第4行开始,进入正式的wordcount计算逻辑,熟悉SQL的用户应该很清楚这段SQL的含义:从stream_source表读取数据,针对每条进入的数据,统计各个word出现的次数/频度。

注:为了尽量减少用户学习流计算的成本,阿里云流计算提供的StreamSQL和SQL标准格式基本一致,最大限度降低用户学习门槛。

代码调试

为方便用户调试StreamSQL,阿里云流计算提供了在线调试功能,方便用户构造调试数据并方便的进行回归测试。阿里云流计算提供的调试功能非常强大,可以将流式存储、静态存储、结果存储全部进行模拟调试,方便用户构造各类数据进行SQL正确性验证。

注: 为防止对线上存储系统读写影响,流计算调试过程要求所有的输入表必须全部提供测试数据,不允许读取线上存储系统。同时需要注意的是,所有写入(insert)操作亦是在屏幕打印,不会对线上系统造成影响。

用户点击【数据开发】IDE页面上调试按钮,启动”调试作业”。在该作业初次启动调试时,系统会弹窗提示上传测试数据文件,如下:

数据调试

上图左侧是当前StreamSQL用户声明的数据表引用清单,包括流式输入表、静态维表的清单,用户需要为每个输入表提供调试数据方能够进行调试运行。为了方便用户进行数据调试,阿里云流计算针对每个表自动构建了数据模板,并在自动构建的模板文件第一行附带提供了字段名、字段类型的Title,格式为”字段名(字段类型)”。用户可以根据Title的提示信息进行修改自己需要的测试数据。在调试页面用户点击下载调试模板并根据自己的测试策略填写调试数据。流计算对于上传的调试数据有较严格的定义:

  1. 1. 调试数据文件最多支持1MB或者1K条记录
  2. 2. 调试文件仅支持UTF-8格式
  3. 3. 采用逗号分隔的CSV格式,避免内容出现逗号
  4. 4. 数值类型仅支持普通格式,不支持科学计数法

因为流计算使用的是CSV作为调试文件类型,对于下载的文件,我们推荐Windows平台下用户使用Excel软件,Mac平台下使用VIM/Sublime软件打开模板数据进行修改(Mac下Number工具修改CSV会增加很多字段信息,不推荐使用Number!),wordcount的测试模板样例如下:

数据调试编辑

新手作业为了方便用户尽快上手,我们已经提供了一份wordcount测试文件,用户点击可以直接下载该样本数据并通过测试界面上传。

  1. > 注: PDF版本文档中《热词统计测试数据》无法通过链接下载,流计算作为附件文件打包提供了测试数据,请咨询您的系统管理员索要测试数据。

点击调试按钮,流计算会立刻启动一个测试流计算作业进行调试。测试作业将直接使用用户提供的测试数据进行运行,并且最终的测试结果会直接在屏幕输出,如下:

数据调试

对于流计算而言,计算驱动源来自于流式数据触发;在测试状态下,数据存储stream_source每条数据将会直接触发一次流式计算并产出计算结果,因此我们看到测试文件有三条数据,每条导致一次计算,所以结果展示页面亦是有三条数据,其运算轨迹分别是:

  1. 第一行源头数据(数据为aliyun)到达流计算,此时流计算发现之前不存在aliyun单词,因此计算结果为<aliyun, 1>,输出屏幕。

  2. 第二行源头数据(仍然为aliyun)到达流计算,此时流计算检测发现已经存在<aliyun, 1>的记录,因此将该值+1,得出结果为<aliyun, 2>,输出屏幕。

  3. 第三行源头数据(仍然为aliyun)到达流计算,此时流计算检测发现已经存在<aliyun, 2>的记录,因此将该值+1,得出结果为<aliyun, 3>,输出屏幕。

最终我们观察结果是以最后一条产出结果为准,即<aliyun, 3>代表我们本次调试数据最终产生的结果。另外我们提供另一份测试数据,方便大家在不同word测试数据下,观察调试界面输出情况。

数据运维

代码测试完毕经验证准确无误后,我们就可以将其发布到数据运维模块,提交作业进入流计算集群进行生产运行。

在【数据开发】IDE页面点击上线作业按钮,填写后本次提交注释后,作业进入数据运维,可以随时被生产调度运行。

在【数据运维】页面,我们选择刚才发布的wordcount作业,点击启动运行,流计算作业即可被生产集群调度起来。一旦作业启动成功,作业的界面将变为绿色,同时会有流动线条提示计算正在运行。如下图:

数据运维

数据运维

可能你会关心:既然已经在分布式流计算集群运行起来了,为何这个计算作业即没有流式数据输入,也没有数据输出,那整体还能愉快地运行起来吗?原因就是我们在定义上述my_sourcemy_result表并未指定因外部引用数据存储类型。因此,在这类未指定具体数据存储类型的情况下,流计算将输入的Stream表视作内部随机产生字符串/数字的随机表,同时将输出的结果表视作直接丢弃数据。

本文导读目录