Flink-Learning训练营:课时1:使用Flink实时发现最热Github项目
课程地址:https://developer.aliyun.com/trainingcamp/0bcc1ab57cf841a2af632d6252fecbab
使用flink实时发现最热Github项目
内容简介
一、实验准备
二、实验内容
一、实验准备
在进行实验前,需要我们开通阿里云实时计算flink版免费试用,在开通之后,我将和大家一起通过flink对get hub的实时事件流进行分析,并通过报表直观展示了解git HUB的最新热门趋势。特定仓库或者组织的活跃度,操作完本实验后,您将能够对flink SQL基础能力和Flink实施处理特性有直观的初步体验。
1.开通步骤
要开通实时计算flink版试用,首先我需要我们借用阿里云试用中心链接:http://free.aliyun.com/?crowd=enterpise&pipCode=sc ,点击就会出现试用的卡片,然后我们点击立即试用这个按键即可开通试用,当开通试用之后我们就进入产品控制台开始实验。本次实验我将会带领,大家介绍一下什么是git hub公开数据集,然后接着通过三个小实验,然后将结果通过报表展示进行分析,看看会不会有一些有意思的结论。
2.git hub公开数据集的介绍
git hub公开数据集的链接为http://www.gharchiye.org/ 我们点进去就可以跳转到官方地址看啊,在这里我们可以看到一些详细的介绍git hub公开数据集是git hub提供的一个开放数据集合,它包含了每个公共仓库的事件数据,git hub公开数据集的数据可以用与各种类型的研究和分析,例如开源社区的写作情况,开发者的行为特征,编程语言的发展趋势等等,使开发者能更好的了解git hub上的活动和趋势,并从中获取有价值的信息,每一条数据都是git hub仓库进行的各种操作活动事件,其中包含了仓库名称、用户名、组织名称和操作事件类型,操作事件类型的地址为GitHub event types,我们点击跳转过去就可以看到有很多种操作事件,比如说我们fork一个仓库的时候就会请求一个fork invent被记录下来,当我们对一个仓库进行star的时候,一个watch invent就会被记录下来。本次实验数据就是将GH数据集的数据实时同步到SLS日志中,以供我们的实验使用。
二、实验内容
实验一 、如何实施发现GitHub最热项目
接下来我们开始第一项实验,如何实时发现GitHub最热项目,我将和大家一起在vap平台上进行操作。
首先,我们进入vap平台,在进行作业开发之前,我们需要先创建Session集群,只有flink集群存在了,才能执行具体的任务。在本次实验中,我们需要开启circle previews。开启circle preview之后,我们就不需要指定具体的think,而是能直接将select结果进行输出,然后通过简单的报表配置,就能够将结果直白的展现出来。只要我们进行作业开发,首先我们通过ddl创建一个ss原表。
这是一个临时表,里面的字段与ss日志里面的字段是一一对应的,我们通过ss connect进行连接,然后指定它的存放数据的ss项目以及对应的lock store,然后指定网络,指定它的连接key,并且每批最多读取500的数据,开始时间为6月1日,这个start time就是消费SSLOG从哪个时间段开始,如果不指定的话就默认消费最新的数据,再进行设置的时候数据尽量设置近一点,比如说你要统计一周的数据,你就将数据尽量放在一周偏前面一点点。因为前期无效计算会耗费的时间比较长,结果一直无法输出。我们通过开启mini batch和作业并发,然后加速它的计算速度,我们看看具体的业务代码。因为star数最能反映项目的热度,所以我们这边tab采用是watch event,并且为了统计某个仓库一天之内的数据量,我们就按照天和仓库名进行分组,统计一天之内的总量,然后进行排序,选择前五项,我们验证一下SQL是否正确,验证通过,我们就开始执行。
执行时结果可以多种格式进行输出,比如说我们可以通过简单的报表输出,因为这边是排行榜,我希望更直观的展示我就采用这个y8。使用y8的时候,我需要设置y轴表示是数量,x轴我需要转换的是仓库名,所以这边那个group办我就设置成People name,就能够直观的展示,然后数据就源源不断的被计算。我们看一看我得到的数据,
可以看到第一名和第五名都是AI视频换脸。第二名和第四名都是大模型相关的。而第三名的是大麦网抢票,可能最近的演唱会比较多,目前由于热度太高,可能创作者担心涉及到侵权,目前已经停止维护。根据这些结果,可以看到,在过去一周内AI是GitHub技术关注的领域,其中最受关注的子方向就是AI视频换脸和大模型。
实验二 全球化协作让Apache更有活力
实验二希望从orgnize即从组织的角度出发,看一个组织在一段时间内的和活跃度变化趋势,为了使结果更加明显,我这边选取了GitHub 比较活跃的组织,比如Apache开源组织,比如说阿里巴巴,看他们在一天之内的活跃度变化,总结出一些有意思的规律。我们再次回到VIP平台,首先将上一次的任务停止。我这边之所以停止,是因为我这边C型集群设置的CPU数比较少,一个任务基本就占据的差不多,无法启动第二个任务,如果你这边绑定的CPU数比较多的话,其实是可以同时执行多个任务的,然后进入作业二。
第二个任务的Ttl和第一个任务基本基本相同,唯一的区别就是start time是不相同的。由6月1日变成6月7日,其从最终的结果来看是没有区别的,因为在vr条件中已经将早于一天前的数据进行过滤。虽然结果不同,中间六天的无效数据还是要流经Flink进行计算的,耗费的资源比较长,耗费的无效时间比较长,如果设成6月1日,你会发现很长一段时间内没有数据写入。
那我们来具体看一下circle,我这边统计Apache这个组织从昨天这个时候开始的,事件总量进行count。因为要统计一个总量,这边没有设置具体的事件类型。为什么要这个node呢?这个node其实是个无效值,但是不加这个node的话,仅仅是这两项,输出的结果只有一个值,我希望以折线图的形式来进行展示。所以需要一个历史的累加值,所以说这边设置now之后它会显示一个累加值,我们进行执行。可以发现,数据也没有立马出来,这是因为当前时间已经昨天的下午六点,但这个时间设置成昨天下午两点,所以中间有四个小时的时间来进行无效的数据需要计算,不过也很快,可以看到确实是从昨天的六点开始计算。我这边希望以折线图的形式更加直观的显示这个变化,所以我们这边需要设置采用折线图。x轴就是时间,y轴应该是采用的是事件总量。
因为这count放在这里,然后它就显示了我们想要的结果,可以看到数据是源源不断的过来的,所以说他这个图表是一直在变化的。如果我们想统计阿里巴巴将这边设置成阿里巴巴即可。我可以看到最终的结果,
最终结果Apache的折线图趋势在上面,阿里巴巴的折线图趋势在下面,这张图对比这两张图可以看到Apache作为一个全球化的开源组织,其实他的代码提交,它的活跃度,使用量其实比较均匀的。但在阿里巴巴,其实它更多的侧重在在国内。可以看到它的趋势,在晚上九点之后,它的变化就非常平缓,夜里基本就没有什么变化,在早上九点之后可以看到它的一个增长显著提升。
实验三 Flink&park的评论热力图
实验三希望以热度的形式来反映某个仓库或者某个组织在一段时间内的活跃度的具体的分布情况。我们回到VIP平台。
前面的代码基本没有任何区别,唯一的区别就是select语句,我们来具体看一下。所以我们希望反应每个小时的变化情况,所以就统计小时的总量,我们group by的时候根据天和小时进行group by,然后对每个小时进行统计。我们计算是从七天之前开始,早于七天之前的数据,我没将它过滤,统计的仓库是Apache flink,具体这些事件可以看到,不管是push代码还对push进行PR请求,或是对他进行review,企业ashol,这些都是与开发者相关的一些动作,所以我们把它给放入其中。我们可以验证一下,失败报数说明表不存在,选定的这些,还有上面的这些detail,所以说如果全局的话,验证是没有问题的。然后我们进行执行。执行和刚才一样,因为毕竟他是从两点开始的,如果对到七天前的,至少应该到下午六点,所以他还是需要一定时间的延迟。可以看到数据就开始出现了,然后我们这边热力图可以看到group 代表是横轴,我们把它设置为comment date,他们在对着这其实都你是都可以把它设置为其他字段的。这些都是可以设置的,然后它的纵轴通过这个spring split by,我们按照小时来进行分配,然后每一个都代表一个统计的区域,然后数据颜色我们就通过comment count,sum的用处不大,因为我们在circle里面进行计算了,所以这么一个区域其实是只有一个值,就是具体的总量。其实这个sum就是对这个这一段时间区内出现的总数进行聚合,可以看到从一周前慢慢开始计算,一直计算最新的数据之后就源源不断的拉取新的数据。如果我们想要统计spark,只需要把它改成spark即可。如果统计总量,把这一段去掉即可。我们来看看最终的结果。
第一张表是flink,它的热在过去一周的热力图,第二张是Spark在过去中的热力图,最后一个是所有的仓库的热力图。从整体来看,可以看到白天的话,颜色比较浅,晚上的颜色比较深,所以按这个推断,国外开发者应该是更活跃,国外的开发者肯总量加起来是比国内高的我。而spark和 flink可以看到,国内开发者是比较活跃。与spark相比,flink的开发者其实更侧重于国内,特别是在网上其实是比较淡的,有的甚至数据量非常少。而高峰期基本在下午,下午的两点到六点也符合国内开发者的工作黄金时间。
然后6月3日到四日作为周末,可以看到flink基本没人工作,但是spark周末还是有好多人在卷,所以从这样看看起来flink开发者是比Spark开发者更会享受周末,本次实验大致就是以上内容。