尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Hadoop生态落地:大数据精准营销平台的关键技术与工程实践

Hadoop生态落地:大数据精准营销平台的关键技术与工程实践 Hadoop在大数据精准营销里的价值这几年被讨论得很多但真正动手做过的人都有一个共同体会营销场景的数据需求远比技术博客里写的要复杂得多。我最早接触Hadoop不是冲着“大数据平台”这个光环去的而是被一个很实际的业务问题逼的——几千万用户的行为日志躺在数据库里每次跑一次人群筛选要几个小时营销活动根本没法按天迭代。后来基于Hadoop重构了整个用户数据处理链路从日志采集、清洗、用户画像构建到人群圈选和效果复盘才真正把这个体系跑顺。这篇就把我在这个过程中的思路、踩坑和经验完整梳理一遍。说明这篇文章基于我自己的项目实践和业内常见做法整理而成涉及的集群参数、代码示例都是可落地参考的通用方案具体环境不同时需要按实际调整。1. 项目整体思路与架构设计1.1 精准营销对大数据平台的核心诉求先说业务侧到底要什么。精准营销不是一个简单的“给用户发短信”的动作而是一套完整的决策循环圈选目标人群、设计触达策略、执行投放、回收反馈数据、复盘效果、优化下一轮模型。每一环都依赖数据而且依赖的数据类型完全不同。第一类是用户基础属性数据比如性别、年龄、注册渠道、城市等级这些数据更新频率低但量级大几千万甚至上亿用户的维度表本身就几个GB起步。第二类是行为日志数据用户看了什么商品、加了购物车没买、搜索了什么关键词、点击了哪条推送这些是典型的流式日志一天就能产生几亿条记录。第三类是业务成交数据订单、支付、退款、售后这类数据准确性要求极高不能丢也不能错。第四类是外部补充数据比如天气、地理位置、公开的节假日信息这些数据能帮营销人员判断什么时间点触达转化率更高。这些数据形态各异但有一个共同特点——单机MySQL跑不动。我之前遇到过最夸张的情况一张行为日志表单月新增超过10亿条在MySQL里做一次用户维度聚合查询直接卡死DBA半夜被叫起来处理。所以引入Hadoop生态本质上是换一套底层的存储和计算引擎把“单机扛不住”的问题变成“分布式横向扩展能解决”的问题。1.2 为什么最终选择Hadoop生态而非其他方案选型的时候团队内部其实有过几轮争论。有人建议直接用MPP数据库比如Greenplum理由是SQL友好、性能也不错也有人建议用ClickHouse做分析查询极快。但最终我们还是选择了以Hadoop生态为核心的方案主要有几个原因。一是数据形态的兼容性。营销场景的数据源极其杂乱有结构化的订单表有半结构化的JSON日志还有各种业务方导出的CSV甚至Excel文件。Hadoop对数据格式几乎是无差别的容忍先存下来后面再慢慢治理这个特性在当时是最打动我的。二是生态组件的覆盖面。从数据采集Flume、Sqoop到计算MapReduce、Hive、Spark从调度Azkaban、Oozie到查询引擎Impala、Presto从数据库HBase到协调服务Zookeeper这套生态能覆盖整条链路不需要来回拼接多种技术栈。三是成本优势Hadoop可以跑在通用X86服务器上和商业MPP数据库动辄几百万的授权费用相比性价比非常明显。当然Hadoop生态的缺点也很明显——运维复杂、组件版本兼容性坑多、实时性不足。但这些问题在营销场景里可以通过架构设计和流程规范来规避。实时性方面大部分营销人群圈选并不需要秒级响应离线批处理T1完全够用只有极少数“用户刚加购就推送优惠券”的场景需要实时计算那就单独用Kafka加Flink做实时链路和Hadoop离线链路并存互为补充。1.3 营销数据处理链路的整体架构基于Hadoop生态我搭建了这样一个分层架构每层职责单一、边界清晰第一层是数据接入层。业务库的数据通过Sqoop定时抽取到Hive表服务器日志和行为埋点数据通过Flume采集落入HDFS如果后续要接实时场景再加一条Kafka管道把日志同时喂给Flink。第二层是数据存储层核心是HDFS加Hive数仓。这里我把数仓按照业内通用的分层方式来组织ODS层存放原始数据不做任何加工DWD层做清洗和标准化把杂乱日志解析成结构化字段ADS层面向具体营销场景生成结果表。第三层是计算引擎层大部分ETL任务用Hive跑需要复杂机器学习的部分用Spark数据量较小但逻辑复杂的部分可以下推到Presto或Impala。第四层是查询服务层营销运营人员使用的圈人平台不直接查Hive而是把Hive计算好的结果同步到MySQL或ClickHouse再由平台后端查询。这套架构跑通之后最明显的变化是原来“提需求等数仓排期三天出数据”变成了“运营人员自己在平台上选条件跑圈人任务半小时内出结果”。数据团队从被动接需求的泥潭里解放出来有精力去做更核心的用户标签建设和模型优化。2. 集群搭建与配置实战2.1 环境规划与版本选择伪分布式、单机集群还是HA模式集群怎么搭直接影响后续的开发效率和稳定性。先明确一点网上大量教程喜欢先教伪分布式但我个人建议如果是真实业务项目不要用伪分布式跑生产数据它只适合本机学习和调试。伪分布式模式下DataNode和NameNode跑在同一台机器上没有真正解决单点故障问题磁盘竞争也会导致性能极差。我们项目初期四台服务器规划如下一台NameNode加ResourceManager两台DataNode加NodeManager一台备用NameNode跑Zookeeper和JournalNode。四台服务器配置都是32核64GB内存、4块SAS盘。这个配置在当时的用户量级下跑得很稳。如果业务继续增长横向加DataNode就能扩容这是Hadoop最舒服的地方之一。版本选择上我建议直接选Hadoop 3.x系列不要再用2.x。Hadoop 3.0之后支持了基于纠删码的存储节省方案NameNode联邦也做得更成熟最关键的是HDFS支持了多个NameNode的自动故障转移不再像2.x那样过度依赖手工切换。我们用的是CDH发行版版本对应CDH 6.3.x的Hadoop 3.0.0管理起来方便很多。当然如果公司有明确的Apache社区版要求Apache Hadoop 3.3.x也是稳定选择。Zookeeper在这个架构里承担了两个角色一是HDFS HA的自动故障转移控制器二是HBase的协调服务。Zookeeper集群建议部署奇数台最少三台部署在独立节点或者和其他组件混部都可以但不要和NameNode部署在同一台机器的同一块磁盘上否则磁盘故障时整个集群就全瘫了。2.2 核心配置文件的关键参数与生产级调优配置文件是Hadoop搭建中最容易踩坑的地方。网上能找到无数“三分钟搭建Hadoop伪分布式”的教程但那些教程里的参数基本不能直接用到生产环境。我把自己验证过的一套核心配置整理出来按文件逐一说明。core-site.xml里最核心的是fs.defaultFS配置指定NameNode的RPC地址。注意这里要配置成逻辑名称而不是主机名比如hdfs://nameservice1逻辑名称是和HDFS HA里的nameservice关联的。还有一项重要的是ha.zookeeper.quorum把三台Zookeeper的地址都写上用逗号分隔。这里再提醒一句如果配置了HAhadoop.tmp.dir这个参数务必指定到独立目录默认的/tmp在系统重启后会被清空NameNode的元数据丢了想哭都来不及。hdfs-site.xml的配置要分几个维度来说。副本数dfs.replication建议生产环境设置成2就够经济实惠再配合机架感知脚本数据会优先写到本机架内读性能更好。NameNode的堆内存dfs.namenode.handler.count根据服务器内存而定32GB内存配置128个处理线程比较合适。还有一项需要特别注意dfs.namenode.name.dir和dfs.datanode.data.dir必须配置多个目录并且要挂载在不同磁盘上。NameNode元数据目录至少两个一个本地磁盘一个挂载NFSDataNode数据目录可以配置多块盘让数据打散在多块盘上提升读写吞吐。yarn-site.xml方面我建议将ResourceManager的调度器配置为Capacity Scheduler避免默认的FIFO Scheduler把一个大任务堵死。yarn.nodemanager.resource.memory-mb设置单节点可用内存我当时配置为48GB留给系统和其他组件一部分余量。yarn.scheduler.maximum-allocation-mb设置单个任务最大可用内存配置成16GB防止某个大任务把节点内存全部抢走。按这套参数配置完成后集群稳定运行了大半年除了两次磁盘故障触发数据块自动恢复外没有出现过NameNode宕机的严重事故。2.3 Hadoop和Zookeeper整合实战HA高可用的完整搭建流程Hadoop HA的搭建流程网上资料不少但很多都省略了关键细节我重新梳理一版可直接照做的步骤。第一步确认Zookeeper集群已启动且状态正常。三台Zookeeper节点分别执行echo stat | nc zookeeper_node_ip 2181能看到Mode为leader或follower就说明正常。第二步修改core-site.xml添加HA相关配置。需要配置nameservice名称、NameNode的RPC地址列表、Zookeeper连接串。具体的地址配置格式是dfs.nameservicesnameservice1dfs.ha.namenodes.nameservice1nn1,nn2dfs.namenode.rpc-address.nameservice1.nn1node01:8020dfs.namenode.rpc-address.nameservice1.nn2node02:8020。第三步配置JournalNode。JournalNode负责同步两个NameNode的EditLog生产环境建议至少三台。在hdfs-site.xml中配置dfs.namenode.shared.edits.dir为qjournal://node01:8485;node02:8485;node03:8485/nameservice1然后分别在三个节点启动JournalNode进程。第四步初始化HA状态。在NameNode主节点上执行hdfs namenode -format格式化文件系统然后执行hdfs zkfc -formatZK在Zookeeper中初始化HA状态。关键细节来了备用NameNode不能直接格式化必须先执行hdfs namenode -bootstrapStandby来从主NameNode同步元数据。很多新手在这里直接把备节点也format了结果两个NameNode的namespaceID不一致HA直接失效。第五步启动整个集群。启动顺序建议是Zookeeper - JournalNode - 主NameNode - 备NameNode - DFSZKFailoverControllerzkfc - DataNode - YARN。zkfc启动后会自动在Zookeeper创建临时节点主NameNode挂掉后自动触发切换。验证HA是否生效的方法是执行hdfs haadmin -getAllServiceState如果返回active和standby两个状态并且后来手动kill掉主NameNode进程后备节点能自动切换为active说明HA配置成功。这一步务必验证我们当时在这上面花了整整一天才排查出问题原因是漏配了core-site.xml里的ha.zookeeper.quorum。提示HA切换后旧的active节点重启时可能会报“NameNode is not allowed to be started”之类的错误这是因为Zookeeper中还有旧的临时节点没清掉。在执行hdfs zkfc -formatZK前确认没有任何NameNode进程在运行否则后续切换会出现脑裂风险。3. 核心数据处理与用户画像构建3.1 埋点日志与业务数据的接入方案接入层的设计是很多项目的分水岭。做得好的团队数据接入像自来水管道一样稳定做得差的每天光补数据就对账对到崩溃。我在这个项目里总结了几个核心原则。埋点日志的采集用Flume配置了一个source监听应用服务器的日志目录把日志实时下沉到HDFS的指定目录。这里有一个比较重要的调优点Flume到HDFS的sink文件滚动策略一定要配置合理。默认按时间滚动是30000秒按大小滚动是1024MB这两个默认值都会导致一个问题——日志量小的时候小文件堆积严重。小文件对HDFS来说是灾难NameNode内存被大量元数据占满查询性能直线下降。我的配置是按大小128MB滚动、按时间3600秒滚动两个条件谁先触发就先滚。一小时或者128MB一个文件既避免了小文件过多又不会让单个文件过大导致后续处理任务分配不均衡。业务库数据的抽取用Sqoop从MySQL每天增量同步到Hive。增量更新的实现方式最简单的做法是按照业务表的更新时间字段每天同步前一天的数据。比如where updated_at date_sub(current_date, 1) and updated_at current_date。这里有个坑如果业务方在凌晨回刷了历史数据增量同步就漏了。后来我们的对策是每天凌晨做一次全量比对按主键和Hive侧的数据逐条校验发现不一致就触发全量重刷。虽然每天多跑一个全量任务但数据准确性大大提高营销活动不会再因为“用户已经退订了还收到短信”这种数据问题被投诉。3.2 数仓分层模型设计从ODS到ADS的流转逻辑数仓分层的价值不只是技术上的清晰更关键的是它让团队协作变得可控。我按照经典的三层结构来组织每一层都有明确的职责边界。ODS层直接对应源系统数据表名和源系统保持一致数据不做任何清洗。这一层的数据是“脏”的但胜在完整任何时候都能回溯原始状态。ODS层的表都保留了原始日志的所有字段包括一些看起来没用的信息比如设备型号、App版本号、网络环境这些字段在后续分析用户行为的时候往往能派上大用场。DWD层做清洗和规范化。以行为日志为例原始日志里用户ID是字符串类型的用户名订单ID是数字时间字段是yyyy-MM-dd HH:mm:ss格式的字符串这些都需要在DWD层统一转换。更重要的是维度退化——把用户性别、年龄、城市这些维度直接冗余到行为表中形成一张宽表。这样后续查询就不需要每次大表关联维表性能提升非常明显。DWD层还会做一件事数据去重。用户点击日志可能因为网络重试导致重复上报我们用“用户ID行为ID行为时间”三个字段做唯一性校验重复数据直接过滤掉。ADS层面向具体的分析场景产出结果表。比如“近30天活跃用户表”、“高价值用户流失预警表”、“品类偏好用户表”。这一层的表是营销运营人员真正会用的也是我们做精准营销的数据基础。这里还要插一句网上讨论度比较高的“行、列权限设计”问题。在大数据平台上做权限控制确实比传统数据库复杂得多。我们通过Ranger配置了基于用户的表级和列级权限比如运营人员只能看到用户ID、手机号脱敏后的值不能查看原始手机号字段订单金额字段只允许数据分析团队访问。这个权限配置非常重要尤其是营销场景涉及大量用户隐私数据合规风险不能忽视。3.3 Hive Spark组合实现用户标签体系的构建用户画像标签体系是精准营销的核心资产。我们的标签体系按照“基础属性、消费行为、活跃行为、偏好特征”四个维度来建设每个维度下面又细分二级和三级标签。基础属性标签直接来源于用户注册信息比较简单。消费行为标签需要复杂计算比如最近一次购买时间、累计消费金额、客单价区间、复购周期。活跃行为标签从行为日志中计算包括近7天登录天数、近30天浏览商品数、App使用时长偏好。偏好特征标签是最有价值的我们通过用户过去90天的商品浏览、搜索、加购、收藏记录用Spark跑协同过滤算法计算用户对品类的偏好得分每个用户输出Top3偏好的品类和对应得分。这里重点说一下Spark跑标签计算的实战经验。如果直接用Hive跑逻辑复杂且涉及大量join的SQL很容易跑出数据倾斜而Spark的DataFrame API写起来更灵活也更容易控制分区和缓存策略。举个例子计算用户的品类偏好得分时原始行为表的用户ID是字符串品类ID是整数如果直接用Hive join分组聚合产生的shuffle数据量极大。用Spark时我先把用户维度表broadcast出去然后对行为表做map侧join彻底避开shuffle整个任务从40分钟缩短到8分钟。标签计算完成后把所有标签结果输出到Hive的一张标签宽表一行一个用户一列一个标签。这张宽表的数据量在当时的用户规模下大约500GB在Hive里查询性能已经有点撑不住了。后来我们把这宽表同步到ClickHouse营销圈人平台直接查ClickHouse响应时间稳定在1秒以内体验彻底改善。4. 精准营销策略落地与效果评估4.1 人群圈选模型与分层策略有了标签宽表之后营销运营最兴奋的事情就是可以自己圈人了。人群圈选的本质是运营人员用标签条件组合筛选出一个用户集合然后定向推送营销内容。常见的人群圈选模型有三种。第一种是规则圈选比如“近30天有加购行为但未下单且客单价在200元以上的女性用户”这种规则通过标签条件组合就能实现。第二种是RFM模型圈选基于Recency最近一次消费时间、Frequency消费频率、Monetary消费金额三个维度九宫格把用户分成重要价值用户、重要发展用户、重要保持用户、一般价值用户等八类每一类对应不同的营销策略。第三种是基于算法模型的预测圈选比如用逻辑回归预测用户的流失概率对高流失风险用户提前做召回营销。在实际项目中我更倾向将三者结合。基础分层用RFM模型让运营人员有一个直观的用户价值分布视图在这个基础上叠加规则圈选作为日常活动的主要手段对于大促等关键节点再叠加算法模型的预测分。三层叠加的好处是规则圈选保证了操作灵活性算法模型能发现人工规则无法发现的隐性关联。分层策略上有一个重要经验不要对所有用户用同一套触达策略。高价值用户频率要低、内容要精过度打扰反而会导致用户反感中价值用户是转化主力可以适当增加触达频率低价值用户不要频繁触达而是通过大促节点批量唤醒。这个策略看起来简单但实际执行时需要数据平台快速响应用户价值分层每天更新一次活动当天圈人群隔天就能出结果这个速度在Hadoop链路下完全可以做到。4.2 活动效果归因与渠道分析活动发出去之后最关键的是衡量效果。衡量不只是“今天发了多少短信、带来了多少订单”这么简单而是要回答三个问题这批人转化了多少未转化的人卡在哪个环节这次活动带来的增量是真实的还是自然增长第一个问题相对好办通过订单数据关联活动ID就能算出各个营销渠道的转化率。第二个问题需要分析用户在活动期间的行为路径比如收到推送后有没有打开App、浏览了活动页、把商品加入购物车最终没有提交订单。这个分析本质上是在DWD层把行为日志和订单数据串联起来按用户维度拼出一条完整的行为时间线。第三个问题最复杂也是最容易被忽视的。短信发出去了100万条转化了3000单表面看转化率0.3%不算高但这里面有多少用户本来就会来买呢我们需要做一个增量分析选取一组未触达的相似用户作为对照组比较两组的转化差异。这个分析在Hadoop上实现很简单取实验组的用户特征倾向得分从全量用户中匹配一组特征相近但未参与活动的用户用Hive做join和聚合算出差值就是真实的营销增量。这一套效果归因机制沉淀下来之后我们对每个渠道、每种素材、每类人群的投放效率都有了清晰的认知。同样一笔预算投在哪个渠道、用什么素材、圈选什么人群能带来最大增量不再靠拍脑袋而是靠数据说话。这也是精准营销这个项目最终产生业务价值的核心体现。4.3 从离线到实时大数据项目后续演进方向项目上线稳定运行半年后业务方提出了新的需求用户在App里刚浏览了一款商品但没有下单希望10分钟内推送一张限时优惠券。这个场景对时效性要求很高T1离线链路完全不可行需要引入实时计算。实时链路的架构我们采用了业内成熟的方案。Kafka作为消息队列承接实时行为日志Flink消费Kafka中的行为数据做实时清洗计算用户最近1小时的行为特征然后和HBase中的用户画像数据关联判断是否满足触发条件满足则调用营销推送接口。这套链路的好处是离线链路的Hive表结构和实时链路的数据模型可以实现统一Flink清洗后的数据同时写入Hive表用于离线复用以及Kafka的下游topic用于实时触发。从技术架构的角度来看实时链路并没有替代Hadoop离线链路而是互为补充。离线链路处理复杂的全量计算比如用户价值分层、RFM模型计算、算法模型训练实时链路处理高时效性的触发场景比如实时加购未下单触发优惠券、实时流失预警触发召回。两条链路共用一套数仓模型数据口径一致服务不同的业务时效要求。5. 常见问题与调优经验5.1 集群层面数据倾斜、小文件与磁盘瓶颈Hadoop跑营销类数据任务最常遇到的就是数据倾斜。营销人群的数据天然有头部效应比如某款爆款商品的浏览日志可能占全表数据的60%以上按商品ID做聚合时就会出现单个Reduce处理几亿条数据、其他Reduce几十秒就结束的情况。解决数据倾斜的第一步是定位。Hive任务的日志中会显示每个Reduce处理的数据量如果最大的Reduce处理数据量是中位数的十倍以上基本可以确定是倾斜。第二步是方案选择如果倾斜是因为空值或无效值导致可以在join时给空值加随机前缀打散如果是因为热点key导致可以对热点key做单独处理比如子查询把热点key的数据单独计算再合并。我们当时处理某品类偏好计算任务时就是通过把爆款品类的用户数据单独抽出来算再和普通品类的计算结果union任务从2小时降到15分钟。小文件问题是另一个长期困扰。数据源产生的日志文件小、同步任务产生的中间结果多都会让HDFS堆积大量小文件。我的经验是三道防线源头控制Flume和Sqoop的文件滚动策略合理设置过程控制Hive任务输出前合并小文件用distribute by rand()把数据均匀分散到少量文件中周期清理每周跑一次小文件合并任务将目录下小于64MB的文件统一合并并删除Hive中对应的分区元数据。这三道防线执行下来集群NameNode堆内存始终保持在合理水位。磁盘瓶颈相对容易发现但容易被忽视的是磁盘容量分布不均衡。DataNode上如果同时部署了Flume和HDFS的DataNode数据目录Flume写文件占用的磁盘空间可能导致单块盘写满触发HDFS的rebalance。建议DataNode的数据目录单独挂载独立磁盘不和其他业务共用。5.2 Hive层面慢查询排查与常用调优参数Hive任务跑得慢首先要区分是计算慢还是存储慢。判断方法很简单看任务的Shuffle阶段耗时占比和磁盘IO情况如果磁盘IO长期在80%以上大概率是存储层瓶颈涉及数据本地性或小文件问题如果磁盘IO正常但任务卡在某些Reduce阶段大概率是计算逻辑或数据倾斜问题。计算层面的Hive调优参数我常用的有几个。hive.exec.parallel设置为true开启并行执行多个不依赖的stage可以同时运行适合多路输出场景。hive.input.format设置为HiveCombineHiveInputFormat开启小文件自动合并读取减少Map数量。hive.auto.convert.join设置为true开启自动MapJoin适合大表关联小表的场景。hive.exec.reducers.bytes.per.reducer设置为256000000左右控制每个Reduce处理的数据量避免Reduce过多或过少。还有一个容易忽略的点列式存储。如果Hive表的存储格式还是TextFile或者SequenceFile赶紧换成ORC或者Parquet。我们项目的DWD层表全部使用ORC格式加Snappy压缩总存储量减少了约60%扫描相同数据量的耗时减少了70%以上。当时做这个优化只花了一个下午的时间带来的性能提升是立竿见影的。5.3 数据层面数据质量校验与异常处理机制营销数据的准确性直接影响用户体感一个错误的用户标签可能让营销短信发给已经退订的人投诉和退订率飙升这个风险绝对不能忽视。我们的做法是在每个ETL任务完成后加一道数据质量校验任务用预设的规则检查结果表。规则可以分成几类完整性规则检查主键是否有空值、数量是否达标唯一性规则检查关键字段是否有重复波动性规则监控日增量和周增量的变化幅度比如订单量日环比波动超过30%就告警业务规则比如订单金额不能为负数用户ID必须存在于用户维度表。任何一条规则校验失败任务自动失败并通知值班人员同时阻断下游依赖任务启动。这套校验机制上线后的最大价值是数据问题被提前发现而不是等到营销活动上线后才发现人群数据有问题。从被动救火到主动防御这个转变是数据团队工作方式的本质升级。6. 项目实操总结与后续扩展方向Hadoop在精准营销项目中的应用最终落点不是技术本身而是业务结果。回顾这个项目有三件事是我认为最重要的沉淀。一是数据观念的转变。运营团队从“等数仓给数据”到“自己圈人看结果”这个转变背后是标签体系、圈人平台、结果反馈链路的一体化建设缺一环都转不过来。二是工程规范的建立。集群部署有清单、任务上线有流程、数据质量有校验这些工程化的约束看起来繁琐但在长期运行中避免了大量低级故障。三是技术选型的清醒认知。Hadoop离线链路解决批量计算问题实时链路解决时效性问题ClickHouse解决查询性能问题没有一套技术栈能包打天下组合使用才是正解。后续扩展方面我个人觉得有两个方向值得探索。一个是把算法模型更深度地嵌入圈人流程中比如用机器学习模型替代部分人工规则让圈人自动化程度更高。另一个是把Hadoop数仓和BI工具打通让管理层直接通过可视化报表查看营销ROI和用户增长趋势让数据价值渗透到决策层。至于平台规模进一步增长后的集群容量规划、存储成本优化、计算资源治理都是在这个框架上持续深耕的方向。最后分享一个实操中的小经验团队刚上手Hadoop项目时很容易陷入“把所有数据都灌进去、把所有组件都用起来”的冲动。但真正成熟的落地方式是——从最小的闭环开始先把一条最核心的数据链路跑通比如用户订单数据同步到Hive、按天产出基础标签、做一个最简单的RFM分层这个最小闭环产生的业务价值比堆砌一堆组件但无人使用要有意义得多。数据平台的建设是一场马拉松跑得快不如跑得稳每一层都扎实后面才能走得远。
返回列表