阿里云 EMR StarRocks 在七猫的应用和实践

news2024/11/17 8:39:58

七猫公司简介

七猫是一家深耕文化娱乐行业的互联网企业,总部坐落在上海市前滩中心。七猫旗下原创文学网站七猫中文网于2017年5月正式上线,专注为原创作者提供创作指导、版权运营等全方位一体化服务。七猫拳头产品七猫免费小说App于2018年8月正式上线,专注为用户提供正版、免费、优质的网络文学内容阅读服务。现平台用户超6亿,规模位列数字阅读行业前列。

七猫大数据架构介绍

七猫的数仓团队主要是承接七猫各条业务线的离线数据开发、实时数据开发、指标建设、数据治理等工作。我加入七猫大约两年时间,加入后第一件事就是引入StarRocks。现在七猫有五套StarRocks集群在生产环境投入了使用。据不完全统计,数据治理前离线数据加实时数据,总数据量大约在20PB左右。那我们是如何维护和管理这些数据的呢?下面会通过一张简化版的数据架构图来介绍。

如上图所示,最左边是数据来源,这些数据源可以理解为用户在七猫APP上的用户行为数据,包括曝光、点击、阅读时长、点赞、评论、浏览广告等。这些数据会通过日志埋点的形式上报到日志接收系统。日志接收系统会将用户行为数据和广告数据进行分流,分别存在两个Kafka里面。大数据通过 Flink 实时消费两个 Kafka 的数据并实时写入到 Hive 数据表中。在 Hive 里进行一系列 ETL 操作之后,数据会流入到 StarRocks 和 Redis ,为下游的业务提供直接的数据服务,其中 Redis 主要应对的是高并发的场景。基于 StarRocks 和 Redis,下游开发各种系统,比如统一的 BI 系统、指标管理系统,AB实验系统、通用人群圈选系统等。后面将为大家重点介绍通用人群圈选系统的工作流程和设计思路。

中间部分是七猫大数据数仓的基础数据。上下两个分支分别是市场投放业务数据以及商业化业务数据。这两条业务线的数据特点是数据量非常大,实时性要求高,每秒钟可能产生几百万条数据。分别通过 Flink CDC 以及 Flink Connector 每五分钟聚合写入到 StarRocks 里,关联数仓的其它用户行为数据,为下游提供数据服务,满足业务看数和用数的需求。

除了市场投放以及商业化业务数据之外,还有其他八条业务线。所有的业务线都有用数看数的需求,要同时应对各个业务线的数据需求,必须要依靠工具的力量来提升数据的交付效率。所以我们将各条业务线的数据需求,抽象成公共的数据能力,统一的提供服务。几个比较典型的业务场景,如数据地图、自助指标分析,数据治理、AB实验等。对应地在数据资产管理平台里会提供元数据服务,统一指标库、成本核算等数据能力。

上图所示的模块,大部分都已经在生产环境使用了,只有小部分还在开发中。中间有一段是数据读写层。Flink 和 Spark 主要的功能是将数据写入到数仓中,然后 StarRocks、Kylin、Trino、ClickHouse 的主要功能是将数仓中的结果数据提供给业务线。由于历史原因,平台 OLAP 引擎多样且语法不统一,导致给数据开发和业务使用增加了门槛。所以在长期规划中,我们会逐步精简 OLAP 引擎,逐步打造基于 StarRocks + Kylin 的 OLAP 引擎,为业务数据提供统一支持。

阿里云EMR-StarRocks 在七猫的实践案例

通用人群圈选系统

通用人群圈选系统上线之前,我们数仓团队平均一周会接到2-3个用户圈选需求,系统上线之后则是平均2-3个月接到一个需求。为什么会出现这么大的变化呢?类比边缘计算的思路,边缘计算将云计算所需要完成的工作前置到终端来进行执行,从而减轻中心节点的负载和压力。同理,原先用户圈选需要由数仓同学才能够完成,现在则将这些工作前置到业务团队来完成。将圈选人群的工作下发到业务,业务同学只需要写一段 SQL 提交到系统,系统就会自动创建人群包。

用户圈选系统的实现原理如上图所示,起点是分析师/运营通过自定义的 SQL 创建人群包,将人群配置信息注册到圈选系统上,数据资产管理平台的人群圈选的模块会定期读取配置信息,然后调用作业调度系统的API,自动生成圈选作业并定时调度,同时还会解决上下游依赖问题。

第一版用户圈选系统人群信息数据主要落在Redis,通过数据服务给到业务服务使用。因为业务服务针对不同人群有不同的策略及实验,同时考虑到离线数据分析部分的人群信息,也会自动落一份数据到 Hive 里,帮助分析师或者算法同学关联数仓的用户行为指标来进行分析。这部分可以了解人群建好一段时间之后的人群表现,并通过数据关联进行分析。由于 Redis 的使用成本比较高,遂引入了 StarRocks 。StarRocks 可以存储的数据量也比较大,相对 Redis 来说,整体使用成本比较低。作业调度系统中,StarRocks、Redis、Hive 都是可选的引擎,由业务同学自己决定。可以看到在整个流程中,数仓同学几乎没有露脸,实现业务同学玩转系统初衷。碰到疑难问题,再由数仓同学介入解决,节省了人力成本以支持更多业务需求。

通用人群圈选系统截图

指标异动自动下钻探查

指标异动自动下钻探查是我们七猫数仓团队自研的功能,目前处于孵化阶段。由于还没有前端同学参与,界面稍显简陋,但因为功能强大,迫不及待跟大家分享。指标异动自动下钻探查功能,可以自动发现细分维度下,指标异常的根源,快速定位指标异动原因。

上图所示的所有节点都是指标,出现在这棵指标树上的都是异常指标。当指标出现异常如 DAU 上涨/下跌时,可以根据节点和节点之间的连接关系,一层一层下钻,找到最细维度组合下的指标异常,然后定位到负责该指标的业务同学,了解业务是否有变更,导致 DAU 波动。通过指标异动自动下钻探查功能,原本可能耗时半天的繁琐SQL查询,可以压缩至5分钟内获得洞察。

实现指标异动自动下钻探查功能,主要有两个关键技术点。第一个是如何判断指标是否异常;第二个是如何将异常指标连接展现。

异常指标判定:我们会通过预测算法,基于历史数据预测指标的正常范围。如果当前指标不在正常范围中,则视为指标异常。例如,通过分析过去数月的DAU趋势,确定当前DAU是否显著偏移预测区间。

异常指标串联展现:对指标的下钻维度进度编码,高效构建指标间的层级关系,实现从单一指标到多维度组合的逐级下钻分析,将异常的指标通过树形结构串联起来,然后进行可视化展现。

730 天微聚合数据灵活下钻分析

最近半年,七猫在提升用户标签的覆盖度和准确度方向做了很多工作,覆盖度和准确度提升的同时,也导致历史数据分析的连续性和准确性受到了干扰。如某用户从原识别为女性调整为男性,直接对比更新前后的数据可能导致误读,如看似女性用户阅读时长骤减而男性用户时长激增的现象,实则是归类调整的结果,并非真实行为变化。这对依赖于此类数据进行算法优化和业务决策的团队构成了严峻挑战,尤其是在面对大规模标签更新时,问题复杂度呈指数级增长,传统处理方式难以为继。

为应对这一难题,团队集思广益,提出了一项创新策略:每日采用最新用户标签重新计算过去730天的数据,以确保分析的一致性和时效性。然而,涉及约5亿用户、150亿指标数据,执行此策略面临的数据处理规模十分庞大,涉及的查询性能必然很差。此外,由于集群规模小,数据量庞大,数据甚至无法导入,增加节点,增大集群规模又会面临很高的成本问题。探索如采用bitmap编码优化存储与查询效率的方式,也因实施复杂度和沟通成本高而未能采纳。

最终,通过一个StarRocks使用小技巧解决了这个问题,第一步是在 Hive 表中通过行转列,将730条记录合并成1条,再将缩小了730倍的数据导入到 StarRocks 中创建视图,导入之后将数据与最新的标签数据进行 join,再将指标按照业务要求的维度进行分组,最后创建基于视图的物化视图。每天只要 Refresh 物化视图,就能够达到指标查询加速的效果,实现查询秒出。经过一段时间的运行验证,系统稳定性良好,业务部门反馈积极,用户标签更新带来的问题成功解决。

未来展望

指标加速层建设

目前我们数仓团队在 Hive 里构建数据模型和指标后,还需人工同步数据至 StarRocks,手段在 BI 系统中创建数据集,以及手动在指标管理系统内进行登记注册。后续我们计划在数据资产管理平台建设指标加速层,核心 OLAP 引擎选用 StarRocks+ Kylin,数据开发人员仅需在指标管理系统中精准定义模型和指标,即可自动生成 BI 系统数据集,同时自动完成 StarRocks 与 Redis 中的数据加速处理。

埋点全链路数据治理

2024年3月我们启动了数据治理专项,截止到5月份,在数据量持续增长的情况下,完成了降本 70万元/月 的目标。主要涉及到的工作内容如下:

1、数据开发和治理规范

  • 开发数据治理工具:自动识别需要治理的数据表和资源利用率低的任务,告警到个人。

  • 开发黑名单功能:对长时间没有优化的数据表和任务,自动 Kill 。

2、存储治理

  • 基于对象存储的归档能力,将访问频度低的分区数据进行分级归档(冷归档的存储成本大约是标准存储成本的 1/10)。

  • 基于数据血缘能力,将出度和入度较小的数据表下线,用其它热度较高数据表代替。

3、计算资源治理

  • 基于 Spark 集群的弹性扩缩容的能力,减少常驻 Spark 节点数。

  • 通过 YARN 资源的监控,对 Spark 任务进行编排,减少弹性扩容的 Spark 节点数。

值得注意的是,目前的数据治理实践主要围绕数仓内的表与任务展开,尚未覆盖至 StarRocks 。所以接下来我们计划进行面向埋点的全链路数据治理:

  • 统计报表和数据集的访问频次,下线低热度报表和数据集,数据集对应的 EMR StarRocks 数据表访问频次会响应降低;

  • 根据 EMR StarRocks 数据表的分区访问频次,分辨冷热数据表、分区,热数据保留在EMR-StarRocks中,温冷数据移动到 Hive 中;

  • Hive 表中访问频次低的字段、埋点逐步下线;

  • 借助EMR-StarRocks的存算分离的能力,根据统计信息制定规定,在本地存储和对象存储之间,自动迁移数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣213-打家劫舍 II(Java详细题解)

题目链接:213. 打家劫舍 II - 力扣(LeetCode) 前情提要: 本体是打家劫舍的一个变形题,希望大家能先做198. 打家劫舍 - 力扣(LeetCode),并看一下我上题的讲解力扣198-打家劫舍&…

TESSY创建需要手写桩的测试用例

如果需要让桩函数有额外的功能,如:传参检测、局部数据处理、多传参检测、函数实现变更等,可以进行手写桩。 我们以tessy5.1 IDE为例,给大家展示编写一个需要手写桩的测试用例过程。 1、前期的准备工作 可以参考以下文章&#xff1…

海运系统推荐:如何实现海运物流轨迹跟踪管理?

在海运业务中,物流信息的及时更新与透明化至关重要。然而,许多从事海运的企业和个人常常面临客户的连环追问,这些问题成为日常工作中的痛点:“我的货到哪了?”“怎么还没更新物流信息?”这样的情形让人感到…

错误: 编码GBK的不可映射字符的解决方法

之前我一直用的eclipse来编写java代码,从来没有出现过这个错误,但是转到VS中后我写个中文注释都没法写,写了就报错,于是开始探索原因 出现这种问题大概率你是在官网下载的JDK,默认是国际版的,他在编译时如果…

828华为云征文|基于华为云Flexus云服务器X实现个人博客搭建

文章目录 ❀前言❀部署前准备❀宝塔安装❀安全组开放❀web访问验证❀安装docker❀安装wordpress❀安全组开放18040端口❀访问博客网址❀发布个人博客❀总结 ❀前言 大家好,我是早九晚十二。 近期华为云推出了最新的华为云Flexus云服务器X,这款云主机在算…

TI DSP下载器XDS100 V2.0无法使用问题

前言 TI DSP下载器XDS100 V2.0用着用着会突然报Error,特别是你想要用Code Composer Studio烧录下载程序的时候 查看设备管理器,发现XDS100 V2.0的设备端口莫名其妙消失了 问了淘宝的厂家,他说TI的开发板信号可能会导致调试器通信信号中断&a…

ant.design【点击展示详细信息】

第一部分&#xff1a;const [Visit,setVisit]useState(false);const [data,setdata] useState({});第二部分&#xff1a; render: (text, record) > [ <a style{{marginRight:"2%"}} onClick{()>{ setVisit(true) setdata(record) }} > 详细 </a>…

【HarmonyOS】Beta最新对外版本IDE下载和环境配置

【HarmonyOS】Beta最新对外版本IDE下载和环境配置 前言 目前华为HarmonyOS的系统版本已经从Develop Beta升级为Beta预览版&#xff0c;全面开放。再也不需要白名单限制&#xff0c;才能下载使用最新的IDE和预览最新的开放文档了。 IDE下载和安装 Beta IDE下载地址 1.根据你…

linux-L9.linux中对文件 按照时间排序 显示100 个

find . -type f -exec stat --format %Y %n {} | sort -nr | head -n 100解释&#xff1a; • find . -type f&#xff1a;在当前目录下查找所有文件。 • -exec stat --format ‘%Y %n’ {} &#xff1a;对每个找到的文件执行stat命令&#xff0c;以获取文件的修改时间&#…

stm32 W25Q数据存储

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、cubemx配置二、keil中文件修改与配置三、几个重要函数的说明四、DMA方式传输&#xff08;待写&#xff09;总结 前言 W25Q128 容量为128位 128/8 16 也就…

为什么要进行MySQL增量备份?

进行MySQL增量备份的原因主要包括以下几点&#xff1a; 节省存储空间&#xff1a;增量备份只备份自上次全量或增量备份以来更改过的数据&#xff0c;而不备份所有数据。相比全量备份&#xff0c;增量备份生成的文件通常较小&#xff0c;可以显著减少存储空间的使用。减少备份时…

学习平台|基于java的移动学习平台系统小程序(源码+数据库+文档)

学习平台|学习平台系统|在线学习平台系统小程序 目录 基于java的移动学习平台系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码…

合宙Air201资产定位模组LuatOS入门课程:FOTA远程升级,点点鼠标就搞定

你是否也经常吐槽&#xff1a;开发是个苦差事&#xff01;做项目一时爽&#xff0c;遇到升级火葬场。 如果你也有这种困惑&#xff0c;可以多了解了解合宙的开发工具&#xff0c;简单实用又高效&#xff0c;甚至只需点点鼠标&#xff01; 本期&#xff0c;我们来学习合宙Air2…

Ubuntu 20.04 Linux无法访问GitHub问题

Ubuntu 20.04 Linux无法访问GitHub问题 使用ip查找在线工具&#xff1a;工具查询 http://github.com和http://github.global.ssl.fastly.net的ip地址 终端输入&#xff1a; sudo gedit /etc/hosts 打开hosts文件&#xff1b;将刚刚两个ip地址输入到hosts文件中。 wq关掉并保存…

【D3.js in Action 3 精译_022】3.2 使用 D3 完成数据准备工作

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可视化最佳实践&#xff08;下&#xff09;1.4 本章小结 第二章…

【油猴脚本】00004案例 Tampermonkey油猴脚本引入js库,使表格可以拖拽移动

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【油…

react 组件化开发_生命周期_表单处理

组件基本介绍 我们从上面可以清楚地看到&#xff0c;组件本质上就是类和函数&#xff0c;但是与常规的类和函数不同的是&#xff0c;组件承载了渲染视图的 UI 和更新视图的 setState 、 useState 等方法。React 在底层逻辑上会像正常实例化类和正常执行函数那样处理的组件。 因…

携手鲲鹏,长亮科技加速银行核心系统升级

新经济周期下&#xff0c;银行净息差持续收窄、盈利压力加大、市场竞争日趋加剧。同时&#xff0c;国家相关政策不断出台&#xff0c;对金融科技的自主创新与安全可控提出了更高要求。 在这样的大背景下&#xff0c;银行业的数字化转型已经步入深水区。其中&#xff0c;核心系统…

vmware esxi 6.5 开启 snmp 服务

学习目标&#xff1a; 如何开启 vmware esxi 6.xx 开启 snmp 服务 查看SNMP 是否开启状态&#xff1a; 如何开启SNMP&#xff1a; 1.用 MAC、Linux SSH 工具 (如 SecureCRT) 连接 esxi 2、修改 SNMP 配置文件 vi /etc/vmware/snmp.xml3 、将标签 false 改为 true 在 后加上…

yolov8-obb中存在的一个bug

yolov8支持OBB目标检测,且能提供较好的性能。 但是最近在使用yolov8-obb的过程中,发现yolov8-obb存在一个bug。即训练数据如果包含不带旋转角度的水平目标时,训练出的模型,经常会输出垂直的检测框,需要旋转90度以后才能得到最终结果。把yolov8-obb相关的源码阅读一遍才发…