楼主: 张小鱼abc
58 0

推荐系统中损失函数梳理:从Pointwise到Listwise [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-5-24
最后登录
2018-5-24

楼主
张小鱼abc 发表于 2025-11-15 19:41:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

婆厦倮痘多点DMALL数据平台的四次演变

多点 DMALL 的数据平台经历了四次变迁,始终围绕“更快速、更节省、更稳定”发展。

在多点 DMALL 的数据平台建设中,最初通过 AWS-EMR 快速搭建云端大数据能力,随后回归 IDC 自建 Hadoop 集群,结合开源内核和自研集成、调度及开发组件,将重资产转化为可复用的轻量服务。当业务需求低成本、高弹性时,团队采用存算分离与容器化重构基础架构,引入 Apache SeaTunnel 实现实时数据入湖;接着使用 Apache Iceberg 和 Paimon 统一存储格式,形成湖仓一体的新架构,为 AI 提供稳定且低耗的数据基座,实现了从利用云到自建云、从离线到实时的闭环。

存算分离架构

DMALL UniData(Data IDE)的存算分离架构以 Kubernetes 作为弹性基础,Spark、Flink 和 StarRocks 按需自动扩展,Iceberg+JuiceFS 统一湖存储,Hive Metastore 跨云管理元数据,Ranger 提供精细授权,确保存算分离且无厂商绑定,技术栈全链路可控。

这种架构带来了显著的业务效益:TCO 降低40-75%,资源秒级扩展,同一套 IDE 框架支持集成、调度、建模、查询和服务,交付快速、节省人力,多云环境畅通且安全。

一、旧架构的问题

在引入 Apache SeaTunnel 之前,多点 DMALL 数据平台已支持 MySQL、Hive 和 ES 等十几种存储的自助数据同步,基于 Spark 自研多种数据源,可按需定制接入,但仅限于批处理模式。

在数据导入方面,多点 DMALL 数据平台统一承载公司的 ODS 数据入湖,采用 Apache Iceberg 作为湖仓格式,支持小时级的数据下游可用性,数据复用率高,确保了数据质量。

过去我们依赖 Spark 自研同步工具,虽然稳定,但面临“启动慢、资源重、扩展难”的挑战。

“不是 Spark 不好,而是它太笨重。”

在降本增效的背景下,我们重新审视了原有的数据集成架构。尽管 Spark 批处理任务成熟,但在处理中小规模的数据同步时显得效率低下。启动时间长、资源占用高和开发周期长成为团队效率的瓶颈。更重要的是,面对日益增长的实时业务需求,Spark 的批处理模式已难以满足。

维度 旧 Spark 方案 业务影响
资源消耗高 2C8G 起步,空跑 40s 对于大多数中小规模数据同步不友好
开发难度大 缺乏 Source/Sink 抽象,全链路开发 增加开发与维护成本,降低交付效率
不支持实时同步 新技术兴起,实时增量同步需求增加 现阶段仍需要开发人员用 Java/Flink 自行实现
数据源有限 商家私有化部署增多,数据源多样 新增数据源定制开发,难以快速满足业务需求

直到我们遇到了 Apache SeaTunnel,一切都开始改变。

二、为什么选择 SeaTunnel?

“我们不是在挑选工具,而是在为未来五年的数据集成架构做决策。”

面对多样的数据源、实时性需求和资源优化压力,我们需要一个“批流一体、轻量高效、易于扩展”的集成平台。SeaTunnel 以其开源特性、支持多种引擎、丰富的连接器和活跃的社区成为了我们的最终选择。它不仅解决了 Spark 的“笨重”问题,还为未来的湖仓一体和实时分析打下了基础。

引擎中立:内置 Zeta,并兼容 Spark/Flink,可根据数据量自动切换。

连接器官网已超过 200+,且插件化:新增数据源只需写 JSON,无需 Java 代码。

批流一体:同一套配置支持全量、增量和 CDC 模式。

社区活跃:GitHub 8.8k star,每周合并 PR 超过30个,我们提出的5个 Patch 均在7天内被合并到主干。

三、新平台架构:让 SeaTunnel 成为企业级解决方案

“开源不是拿来即用,而是在巨人肩膀上继续创新。”

尽管 SeaTunnel 功能强大,但要在企业级场景中真正落地,还需要一层“外壳”——统一的管理、调度、权限控制和监控等能力。我们围绕 SeaTunnel 构建了一套可视化、可配置、可扩展的数据集成平台,使其从一个开源工具成长为多点数据平台的“核心引擎”。

3.1 全局架构

以 Apache SeaTunnel 为基础,平台提供统一的 REST API,Web UI、商家交换和 MCP 服务等任何外部系统都可一键调用;内置连接器模板中心,新存储只需填写参数即可在几分钟内发布,无需编码。调度层兼容 Apache DolphinScheduler 和 Airflow 等主流编排工具,引擎层根据数据量智能路由至 Zeta/Flink/Spark,小任务轻量化快速执行,大任务分布式并行处理;镜像和运行环境全面云原生化,支持 K8s、Yarn 和 Standalone 多模式输出,商家私有化场景也能一键交付,实现“模板即服务、引擎可切换、部署无绑定”。

3.2 互导功能

数据源注册:地址、账号、密码一次录入,敏感字段加密,公共数据源(如 Hive)全租户可见。

连接器模板:通过配置新增连接器,定义 SeaTunnel 配置生成规则,控制任务界面 Source 和 Sink 显示。

离线任务:运行批处理任务支持 Zeta 和 Spark 引擎,通过 DAG 图描述同步任务,支持通配符变量注入。

实时任务:运行流处理任务支持 Zeta 和 Flink 引擎,通过 S3 协议存储 Checkpoint,可进行 CDC 增量同步。

接入功能

接入申请:用户提交同步表申请工单;管理员审批,以确保数据接入质量。

库表管理:按数据库同步,避免同步链路过载;统一管理链路,保证数据质量;支持分表合并成一张表。

基线拉取:通过批处理任务进行自动建表和初始化;超大表可依据规则拆分拉取;数据缺失可根据条件拉取补齐。

数据同步:同步任务通过 REST API 提交到集群;支持限流、打标特性,确保重要同步操作的执行;CDC 增量写入多种湖仓环境。

四、二次开发:让 SeaTunnel 说“多点方言”

“再优秀的开源项目,也听不懂你业务的‘方言’。”

SeaTunnel 的插件机制虽灵活,但面对多点自研的 DDH 消息格式、分库分表合并、动态分区等需求时,仍需我们进行代码调整。幸运的是,SeaTunnel 的模块化设计让二次开发变得高效且可控。以下是我们重点改进的几个模块,每一项都直接解决了业务痛点。

4.1 定制 DDH-Format CDC

多点自研 DDH 采集 MySQL binlog,以 Protobuf 推送至 Kafka。我们实现了 KafkaDeserializationSchema:

  • 解析 Protobuf → SeaTunnelRow;
  • DDL 消息直接构建 CatalogTable,在 Paimon 侧自动添加列;
  • DML 打标“before/after”,下游 StarRocks 进行部分列更新。

4.2 Router Transform:多表合并+动态分区

场景:1200 张分库分表 t_order_00…t_order_1199 → 一张 Paimon 表 dwd_order。

实现:

  • 正则表达式 t_order_(\d+) 映射目标表;
  • 选择基准 Schema(字段最多的一张表),其余表缺失的字段补 NULL;
  • 主键冲突使用 $table_name + $pk 生成新的 UK;
  • 分区字段 dt 从字符串 create_time 截取,支持 yyyy-MM-dd 与 yyyyMMdd 两种格式自动识别。

配置片段:

4.3 Hive-Sink 支持 Overwrite

社区版只有 append 模式,我们基于 PR #7843 进行二次开发:

  • 任务提交前,先根据分区值调用 FileSystem.listStatus() 获取旧路径;
  • 新数据写完后原子删除旧路径,实现“幂等重跑”。

已贡献回社区,预计 2.3.14 版本发布。

4.4 其他补丁

  • JuiceFS 连接器:支持挂载点缓存,提升 listing 性能 5 倍;
  • Kafka-2.x 独立模块:解决 0.10/2.x 协议冲突;
  • 升级 JDK11:Zeta 引擎 GC 时间减少 40%;
  • 新增 JSON UDF json_extract_array/json_merge,日期 UDF date_shift(),已合并入主干。

五、踩坑实录

“每一个坑,都是通往稳定的必经之路。”

开源项目再成熟,在实际业务场景落地时也难免遇到问题。我们在使用 SeaTunnel 的过程中,遇到了版本冲突、异步操作、消费延迟等问题。以下是几个典型的“坑”及其最终解决方案,希望能帮助你少走弯路。

问题 现象 根因 解法
S3 访问失败 Spark 3.3.4 与 SeaTunnel 默认内置 Hadoop 3.1.4 冲突 classpath 存在两份 aws-sdk 排除 Spark 的 hadoop-client,改用 SeaTunnel uber jar
StarRocks ALTER 阻塞 写入时报 “column not found” SR 的 ALTER 为异步操作,客户端继续写会失败 在 sink 中轮询 SHOW ALTER TABLE STATE,FINISHED 后再恢复写入
Kafka 消费慢 每秒仅 3k 条,poll 到空消息线程 sleep 100ms 提 PR #7821,支持“空轮询不 sleep”模式,吞吐量提升至 12w/s

六、总结收益:三个月交卷

“技术价值,最终要用数字说话。”

我们用了 Apache SeaTunnel 不到三个月时间,完成了 3 套商家生产环境的迁移。结果不仅“运行更快”,还“运行更省”。

Oracle、云存储、Paimon、StarRocks 等源端需求得到一次性满足,实时同步不再依赖手动编写 Flink;通过模板化“零代码”接入方式,新增连接器的部署时间从过去的 N 周缩短至 3 天,资源消耗仅为原 Spark 的三分之一,相同数据量下运行更高效。

结合全新的用户界面和按需开放的数据源权限,商家 IT 可自行配置任务、查看链路,交付成本显著降低,使用体验大幅提升,真正实现了降本增效、灵活操作和稳定状态三大目标。

七、下一步:湖仓+ AI双轮驱动

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:listwise Point WISE 推荐系统 损失函数

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-2-8 03:09