菜鸟实时数仓2.0进阶之路

DataFunTalk:阿里建设一站式实时数仓的经验分享 大数据计算正从规模化走向实时化,实时大数据建设过程中开始面临很多的痛点和问题。本文内容整理于阿里资深技术专家姜伟华在DataFunTalk上的演讲,为大家介绍阿里巴巴基于一站式实时数仓Hologres建设实时数仓的经验和解决方案。 阅读详情

分享嘉宾:张庭 菜鸟 数据工程师

文章整理:comn

出品平台:DataFunTalk

导读:供应链物流场景下的业务复杂度高,业务链路长,节点多,实体多,实时数仓建设难度高。菜鸟跨境进口业务场景更是如此,更复杂的场景带来更复杂的实体数据模型,对接的业务系统多导致ETL流程特别复杂,还有海量的日均处理数据量,使得团队在建设进口实时数仓的过程中,面临着诸多挑战:如何保证复杂实体关系下的数据准确性?如何降低多数据源情况下的数据处理复杂度?如何提升实时多流Join的处理效率?如何实现实时超时统计?如何实现异常情况下的数据状态恢复?本文主要分享菜鸟进口实时数仓的升级经验,以及如何利用Flink的特性解决在开发实践中遇到的问题。

主要内容包括:

  • 相关背景介绍

  • 进口实时数仓演进过程

  • 挑战及实践

  • 总结与展望

01

相关背景介绍

1. 进口业务简介

进口业务的流程大致比较清晰,国内的买家下单之后,国外的卖家发货,经过清关,干线运输,到国内的清关,配送,到消费者手里,菜鸟在整个过程中负责协调链路上的各个资源,完成物流履约的服务。去年考拉融入到阿里体系之后,整个进口业务规模占国内进口单量的规模是非常高的。并且每年的单量都在迅速增长,订单履行周期特别长,中间涉及的环节多,所以在数据建设时,既要考虑把所有数据融合到一起,还要保证数据有效性,是非常困难的一件事情。

2. 实时数仓加工流程

① 一般过程

下面简单介绍一下实时数仓的加工流程,一般会对接业务库或者日志源,通过数据同步的方式,比如Sqoop或DataX把消息同步到消息中间件中暂存,下游会接一个实时计算引擎,对消息进行消费,消费之后会进行计算、加工,产出一些明细表或汇总指标,放到查询服务上供数据应用端使用。

② 菜鸟内部流程

在菜鸟内部也是同样的流程,我们将业务库数据通过DRC ( 数据备份中心 ) 增量采集Binlog日志的方式,同步到TT ( 类似Kafka的消息中间件 ) 做一个消息暂存,后面会接一个Flink实时计算引擎进行消费,计算好之后写入两种查询服务,一种是ADB,一种是HBase ( Lindorm ),ADB是一个OLAP引擎,阿里云对外也提供服务,主要是提供一些丰富的多维分析查询,写入的也是一些维度比较丰富的轻度汇总或明细数据,对于实时大屏的场景,因为维度比较少,指标比较固定,我们会沉淀一些高度汇总指标写到HBase中供实时大屏使用。

02

进口实时数仓演进过程

接下来讲一下进口实时数仓的演进过程:

2014年:进口业务线大概在14年时,建好了离线数仓,能提供日报。

2015年:能提供小时报,更新频度从天到小时。

2016年:基于JStorm探索了一些实时指标的计算服务,越来越趋向于实时化。由于16年刚开始尝试实时指标,指标还不是特别丰富。

2017年:菜鸟引进了Blink,也就是Flink在阿里的内部版本,作为我们的流计算引擎,并且进口业务线在同一年打通了实时明细,通过实时明细大宽表对外提供数据服务。

2018年:完成了菜鸟进口实时数仓1.0的建设。

2020年:开始了实时数仓2.0的建设,为什么开始2.0?因为1.0在设计过程中存在了很多问题,整个模型架构不够灵活,扩展性不高,还有一些是因为没有了解Blink的特性,导致误用带来的一些运维成本的增加,所以后面进行了大的升级改造。

1. 实时数仓1.0

接下来讲一下实时数仓1.0的情况,一开始因为在发展初期,业务模式不太稳定,所以一开始的策略就是围绕业务小步快跑,比如针对业务1会开发一套实时明细层,针对业务2也会开发一套实时任务,好处是可以随着业务发展快速迭代,互相之间不影响,早期会更灵活。

如上图右侧所示,最底层是各个业务系统的消息源,实时任务主要有两层,一层是实时明细层,针对业务线会开发不同的明细表,明细表就是针对该条业务线需要的数据把它抽取过来,在这之上是ADM层,也就是实时应用层,应用层主要针对具体的场景定制,比如有个场景要看整体汇总指标,则从各个明细表抽取数据,产生一张实时汇总层表,整个过程是竖向烟囱式开发,模型比较混乱,难扩展,并且存在很多重复计算。

后面也是由于重复计算的问题,进行了一层抽象,加了一个前置中间层,对公共的部分进行提取,但是治标不治本,整个模型还是比较混乱的,数据建设上也没有进行统一,模型扩展性上也很差。

2. 实时数仓2.0

2.0升级完之后是比较清晰的一张图:

  • 前置层:底层数据源会接入到前置中间层,屏蔽掉底层一些非常复杂的逻辑。

  • 明细层:前置层会把比较干净的数据给到明细表,明细层打通了各个业务线,进行了模型的统一。

  • 汇总层:明细层之上会有轻度汇总和高度汇总,轻度汇总表维度非常多,主要写入到OLAP引擎中供多维查询分析,高度汇总指标主要针对实时大屏场景进行沉淀。

  • 接口服务:汇总层之上会根据统一的接口服务对外提供数据输出。

  • 数据应用:应用层主要接入包括实时大屏,数据应用,实时报表以及消息推送等。

这就是实时数仓2.0升级之后的模型,整个模型虽然看起来比较简单,其实背后从模型设计到开发落地,遇到了很多困难,花费了很大的精力。下面为大家分享下我们在升级过程中遇到的挑战及实践。

03

挑战及实践

我们在实时数仓升级的过程中,面临的挑战如下:

1. 业务线和业务模式多

第一个就是对接的业务线比较多,不同的业务线有不同的模式,导致一开始小步快跑方式的模型比较割裂,模型和模型之间没有复用性,开发和运维成本都很高,资源消耗严重。

解决方案:逻辑中间层升级

我们想到的比较简单的思路就是建设统一的数据中间层,比如业务A有出库、揽收、派送等几个业务节点,业务B可能是另外几个节点,整个模型是割裂的状态,但实际上业务发展到中后期比较稳定的时候,各个业务模式之间相对比较稳定,这个时候可以对数据进行一个抽象,比如业务A有节点1、节点5和其他几个业务模式是一样的,通过这种对齐的方式,找出哪些是公共的,哪些是非公共的,提取出来沉淀到逻辑中间层里,从而屏蔽各业务之间的差距,完成统一的数据建设。把逻辑中间层进行统一,还有一个很大的原因,业务A,B,C虽然是不同的业务系统,比如履行系统,关务系统,但是本质上都是同一套,底层数据源也是进行各种抽象,所以数仓建模上也要通过统一的思路进行建设。

2. 业务系统多,超大数据源

第二个就是对接的系统非常多,每个系统数据量很大,每天亿级别的数据源就有十几个,梳理起来非常困难。带来的问题也比较明显,第一个问题就是大状态的问题,需要在Flink里维护特别大的状态,还有就是接入这么多数据源之后,成本怎么控制。

解决方案:善用State

State是Flink的一大特性,因为它才能保证状态计算,需要更合理的利用。我们要认清State是干什么的,什么时候需要State,如何优化它,这些都是需要考虑的事情。State有两种,一种是KeyedState,具体是跟数据的Key相关的,例如SQL中的Group By,Flink会按照键值进行相关数据的存储,比如存储到二进制的一个数组里。第二个是OperatorState,跟具体的算子相关,比如用来记录Source Connector里读取的Offset,或者算子之间任务Failover之后,状态怎么在不同算子之间进行恢复。

① 数据接入时"去重"

下面举个例子,怎么用到KeyedState,比如物流订单流和履行日志流,两个作业关联产生出最终需要的一张大表,Join是怎么存储的呢?流是一直不停的过来的,消息到达的前后顺序可能不一致,需要把它存在算子里面,对于Join的状态节点,比较简单粗暴的方式是把左流和右流同时存下来,通过这样的方式保证不管消息是先到还是后到,至少保证算子里面数据是全的,哪怕其中一个流很晚才到达,也能保证匹配到之前的数据,需要注意的一点是,State存储根据上游不同而不同,比如在上游定义了一个主键Rowkey,并且JoinKey包含了主键,就不存在多笔订单对应同一个外键,这样就告诉State只需要按照JoinKey存储唯一行就可以了。如果上游有主键,但是JoinKey不包含Rowkey 的话,就需要在State里将两个Rowkey的订单同时存下来。最差的情况是,上游没有主键,比如同一笔订单有10条消息,会有先后顺序,最后一条是有效的,但是对于系统来说不知道哪条是有效的,没有指定主键也不好去重,它就会全部存下来,特别耗资源和性能,相对来说是特别差的一种方式。

因此,我们在数据接入时进行"去重"。数据接入时,按照row_number进行排序,告诉系统按照主键进行数据更新就可以了,解决10条消息不知道应该存几条的问题。在上面这个case里面,就是按照主键进行更新,每次取最后一条消息。

按照row_number这种方式并不会减少数据处理量,但是会大大减少State存储量,每一个State只存一份有效的状态,而不是把它所有的历史数据都记录下来。

② 多流join优化

第二个是多流Join的优化,比如像上图左侧的伪代码,一张主表关联很多数据源产生一个明细大宽表,这是我们喜欢的方式,但是这样并不好,为什么呢?这样一个SQL在实时计算里会按照双流Join的方式依次处理,每次只能处理一个Join,所以像左边这个代码里有10个Join,在右边就会有10个Join节点,Join节点会同时将左流和右流的数据全部存下来,所以会看到右边这个图的红框里,每一个Join节点会同时存储左流和右流的节点,假设我们订单源有1亿,里面存的就是10亿,这个数据量存储是非常可怕的。

另外一个就是链路特别长,不停的要进行网络传输,计算,任务延迟也是很大的。像十几个数据源取数关联在一起,在我们的实际场景是真实存在的,而且我们的关联关系比这个还要更复杂。

那我们怎么优化呢?我们采用Union All的方式,把数据错位拼接到一起,后面加一层Group By,相当于将Join关联转换成Group By,它的执行图就像上图右侧这样,黄色是数据接入过程中需要进行的存储,红色是一个Join节点,所以整个过程需要存储的State是非常少的,主表会在黄色框和红色框分别存一份,别看数据源非常多,其实只会存一份数据,比如我们的物流订单是1000万,其他数据源也是1000万,最终的结果有效行就是1000万,数据存储量其实是不高的,假设又新接了数据源,可能又是1000万的日志量,但其实有效记录就是1000万,只是增加了一个数据源,进行了一个数据更新,新增数据源成本近乎为0,所以用Union All替换Join的方式在State里是一个大大的优化。

3. 取数外键多,易乱序

第三个是取数外键多,乱序的问题,乱序其实有很多种,采集系统采集过来就是乱序的,或者传输过程中导致的乱序,我们这边要讨论的是,在实际开发过程中不小心导致的乱序,因为其他层面的东西平台已经帮我们考虑好了,提供了很好的端到端的一致性保证。

举个例子比如说有两个单子都是物流单,根据单号取一些仓内的消息,消息1和消息2先后进入流处理里面,关联的时候根据JoinKey进行Shuffle,在这种情况下,两个消息会流到不同的算子并发上,如果这两个并发处理速度不一致,就有可能导致先进入系统的消息后完成处理,比如消息1先到达系统的,但是处理比较慢,消息2反倒先产出,导致最终的输出结果是不对的,本质上是多并发场景下,数据处理流向的不确定性,同一笔订单的多笔消息流到不同的地方进行计算,就可能会导致乱序。

所以,同一笔订单消息处理完之后,如何保证是有序的?

上图是一个简化的过程,业务库流入到Kafka,Binlog日志是顺序写入的,需要采用一定的策略,也是顺序采集,可以根据主键进行Hash分区,写到Kafka里面,保证Kafka里面每个分区存的数据是同一个Key,首先在这个层面保证有序。然后Flink消费Kafka时,需要设置合理的并发,保证一个分区的数据由一个Operator负责,如果一个分区由两个Operator负责,就会存在类似于刚才的情况,导致消息乱序。另外还要配合下游的应用,能保证按照某些主键进行更新或删除操作,这样才能保证端到端的一致性。

Flink已经配合上下游系统已经帮我们实现了端到端的一致性功能,我们只需要保证内部处理任务不能乱序。我们的解法是避免Join Key发生变化,如提前通过特殊映射关系把Join Key变为业务主键,来保证任务处理是有序的。

4. 统计指标依赖明细,服务压力大

另外一个难点就是我们的很多统计指标都依赖明细,主要是一些实时统计,这种风险比较明显,服务端压力特别大,尤其是大促时,极其容易把系统拖垮。

实时超时统计就是一个典型的场景,比如说会有这样两笔订单,一笔订单1点钟创建了物流订单,2点钟进行出库,如何统计超6小时未揽收的收单量,因为没有消息就无法触发计算,Flink是基于消息触发的,比如说2点钟出库了,那理论上在8点钟的时候超6小时未揽收的单量要加1,但是因为没有消息触发,下游系统不会触发计算,这是比较难的事情,所以一开始没有特别好的方案,我们直接从明细表出,比如订单的出库时间是2点钟,生成这条明细之后,写到数据库的OLAP引擎里,和当前明细进行比较计算。

我们也探索了一些方案比如基于消息中间件,进行一些定时超时消息下发,或者也探索过基于Flink CEP的方式,第一种方式需要引入第三方的中间件,维护成本会更高,CEP这种方式采用时间窗口稳步向前走,像我们这种物流场景下会存在很多这样的情况,比如回传一个2点出库的时间,后面发现回传错了,又会补一个1点半的时间,那么我们需要重新触发计算,Flink CEP是不能很好的支持的。后面我们探索了基于Flink Timer Service这种方式,基于Flink自带的Timer Service回调方法,来制造一个消息流,首先在我们的方法里面接入数据流,根据我们定义的一些规则,比如出库时间是2点,会定义6小时的一个超时时间,注册到Timer Service里面,到8点会触发一次比较计算,没有的话就会触发一个超时消息,整个方案不依赖第三方组件,开发成本比较低。

5. 履行环节多,数据链路长

另外一个难点就是我们的履行环节比较多,数据链路比较长,导致异常情况很难处理。比如消息要保留20多天的有效期,State也要存20多天,状态一直存在Flink里面,如果某一天数据出现错误或者逻辑加工错误,追溯是个很大问题,因为上游的消息系统一般保持三天数据的有效期。

这边说几个真实的案例。

案例1:

我们在双十一期间发现了一个Bug,双十一已经过去好几天了,因为我们的履行链路特别长,要10~20天,第一时间发现错误要改已经改不了了,改了之后DAG执行图会发生变化,状态就无法恢复,而且上游只能追3天的数,改了之后相当于上游的数全没了,这是不能接受的。

案例2:

疫情期间的一些超长尾单,State的TTL设置都是60天,我们认为60天左右肯定能够全部完结,后来发现超过24天数据开始失真,明明设置的有效期是60天,后来发现底层State存储用的是int型,所以最多只能存20多天的有效期,相当于触发了Flink的一个边界case,所以也证明了我们这边的场景的确很复杂,很多状态需要超长的State生命周期来保证的。

案例3:

每次代码停止升级之后,状态就丢失了,需要重新拉取数据计算,但是一般上游的数据只保留3天有效期,这样的话业务只能看3天的数据,用户体验很不好。

解决方案:批流混合

我们怎么做?

采用批流混合的方式来完成状态复用,基于Blink流处理来处理实时消息流,基于Blink的批处理完成离线计算,通过两者的融合,在同一个任务里完成历史所有数据的计算,举个例子,订单消息流和履行消息流进行一个关联计算,那么会在任务里增加一个离线订单消息源,跟我们的实时订单消息源Union All合并在一起,下面再增加一个Group By节点,按照主键进行去重,基于这种方式就可以实现状态复用。有几个需要注意的点,第一个需要自定义Source Connector去开发,另外一个涉及到离线消息和实时消息合并的一个问题,GroupBy之后是优先取离线消息还是实时消息,实时消息可能消费的比较慢,哪个消息是真实有效的需要判断一下,所以我们也定制了一些,比如LastValue来解决任务是优先取离线消息还是实时消息,整个过程是基于Blink和MaxCompute来实现的。

6. 一些小的Tips

① 消息下发无法撤回问题

第一个就是消息一旦下发无法撤回,所以有些订单一开始有效,后面变成无效了,这种订单不应该在任务中过滤,而是打上标记下传,统计的时候再用。

② 增加数据版本,数据处理时间以及数据处理版本

  • 数据版本是消息结构体的版本定义,避免模型升级后,任务重启读到脏数据。

  • 处理时间就是消息当前的处理时间,比如消息回流到离线,我们会按照主键进行时间排序,取到最新记录,通过这种方式还原一份准实时数据。

  • 增加数据处理版本是因为即使到毫秒级也不够精确,无法区分消息的前后顺序。

③ 实时对数方案

实时对数方案有两个层面,实时明细和离线明细,刚刚也提到将实时数据回流到离线,我们可以看当前24点前产生的消息,因为离线T+1只能看到昨天23点59分59秒的数据,实时也可以模拟,我们只截取那个时刻的数据还原出来,然后实时和离线进行对比,这样也可以很好的进行数据比对,另外可以进行实时明细和实时汇总对比,因为都在同一个DB里,对比起来也特别方便。

03

总结与展望

1. 总结

简单做下总结:

  • 模型与架构:好的模型和架构相当于成功了80%。

  • 准确性要求评估:需要评估数据准确性要求,是否真的需要对齐CheckPoint或者一致性的语义保证,有些情况下保证一般准确性就ok了,那么就不需要这么多额外消耗资源的设计。

  • 合理利用Flink特性:需要合理利用Fink的一些特性,避免一些误用之痛,比如State和CheckPoint的使用。

  • 代码自查:保证数据处理是正常流转的,合乎目标。

  • SQL理解:写SQL并不是有多高大上,更多考验的是在数据流转过程中的一些思考。

2. 展望

① 实时数据质量监控

实时处理不像批处理,批处理跑完之后可以在跑个小脚本统计一下主键是否唯一,记录数波动等,实时的数据监控是比较麻烦的事情·。

② 流批统一

流批统一有几个层面,第一个就是存储层面的统一,实时和离线写到同一个地方去,应用的时候更方便。第二个就是计算引擎的统一,比如像Flink可以同时支持批处理和流处理,还能够写到Hive里面。更高层次的就是可以做到处理结果的统一,同一段代码,在批和流的语义可能会不一样,如何做到同一段代码,批和流的处理结果是完全统一的。

③ 自动调优

自动调优有两种,比如在大促的时候,我们申请了1000个Core的资源,1000个Core怎么合理的分配,哪些地方可能是性能瓶颈,要多分配一些,这是给定资源的自动调优。还有一种比如像凌晨没什么单量,也没什么数据流量,这个时候可以把资源调到很小,根据数据流量情况自动调整,也就是自动伸缩能力。

以上是我们整体对未来的展望和研究方向。

今天的分享就到这里,谢谢大家。


在文末分享、点赞、在看,给个3连击呗~


嘉宾介绍:

张庭

菜鸟 | 数据工程师

张庭,阿里花名"佳二",19年硕士毕业于浙江工业大学,毕业后便加入阿里巴巴菜鸟数据部,负责国际供应链相关的数据研发工作。工作期间负责了进口离线数仓升级、实时数仓升级等项目,负责过双十一/618等大促的数据建设和保障工作。发表过相关技术创新提案多篇,在离线、实时数仓的技术探索,架构重构,性能优化等方面有着丰富的经验。

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

视觉机器人抓取实战:从物体定位到抓取估计的完整流程解析(附Python代码示例) 本文详细解析了视觉引导机器人抓取的完整技术流程,涵盖从物体定位、位姿估计到抓取估计的核心步骤。通过Python代码示例,演示了如何使用Open3D等工具进行点云处理、平面分割、PCA与ICP位姿估计,以及基于几何启发式的抓取生成方法,为机器人视觉抓取开发提供了清晰的实战指南。 阅读详情

相关推荐

Intel网卡固件烧录实战:eeupdate与bootutil命令完全解析

固件作为硬件设备底层运行的软件,其稳定性直接决定硬件功能的完整性。网卡固件一旦损坏,常表现为MAC地址丢失、PXE启动失效、NVM数据异常导致降速或掉线。维护这类问题,需借助Intel官方工具eeupdate与bootutil在UEFI Shell或DOS环境下执行底层烧录操作。eeupdate负责网卡的身份信息与NVM存储管理,可重置MAC、恢复固件镜像;bootutil则专管启动行为,支持PXE配置与Boot Agent升级。从环境准备、命令参数到故障恢复,掌握这两款工具能让运维人员在修复存量网卡、应对

weixin_34269583的博客 313

第七章 数据仓库的链路优化

数据仓库的链路优化

qq_27924553的博客 937

告别音质玄学:实测ACM8625S搭配杰理AC695x,如何通过寄存器精准调出好声音

第一次听到ACM8625S驱动音箱发出的声音时,我有些失望——这个被厂商宣传为"高保真数字功放"的芯片,默认配置下的表现甚至不如一些廉价模拟功放。经过两周的反复调试,最终配置使这款售价不到200元的音箱达到了接近专业监听设备的音质水平。特别是在鼓点和电吉他表现上,既保持了足够的冲击力,又不会掩盖人声细节。例如,当频率响应曲线在10kHz有+2dB提升时,多数评测者认为听感最佳,尽管这会使THD略微增加0.05%。虽然厂商提供的配置工具能快速生成基础代码,但想要获得最佳音效还需要手动优化。

weixin_29655587的博客 356

数据仓库实际工作记录 -- 链路长短选择

1.背景 工作中遇到个问题,那就是我们有了一批数仓 dw层的表,这时候需要开发一批dm表,用于下发数据,大约有30+张表,互相之间是有依赖关系的 比如:有一张 t_org 组织关系表,用来确定下发的学校是哪个区域的 其他的表需要下发这个区域 A,都需要关联这个表 这时候我们就有两个选择 每个表都关联 t_org 并且筛选 区域 A 先生成一个下发表 dm_org ,之后的表都关联 dm_org 看起来好像影响都不大,都能成功下发,方案二貌似还能减少数据的筛选关联,提升效率 2.结论及说明 其实在工作中

大数据、数据仓库、数据治理、数据开发、数据库等相关数据方面经验分享~ 230

12V电源电路五层防护设计实战指南

12V电源电路是工业控制、车载电子和智能终端中最基础的供电架构,其可靠性不取决于稳压精度,而取决于对反接、浪涌、短路、过温等典型故障的响应能力。理解TVS钳位原理、P-MOSFET防反接机制及eFuse可编程限流逻辑,是构建鲁棒电源系统的核心。技术价值在于将保护从‘事后补救’升级为‘事前拦截’,显著提升产品MTBF并降低售后返修率。典型应用场景涵盖PLC辅助电源、ADAS摄像头供电、IoT网关主板等严苛环境设备。本文聚焦12V输入端到负载输出端的五层串行防护链设计,深度融合TVS选型、MOSFET导通阈值与

weixin_30983965的博客 297

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

【实时数仓篇】(03)菜鸟物流利用 Flink 实现实时超时统计场景

文章目录一、前言二、实时数仓基本架构三、难题:实时超时统计四、解决方案 一、前言 在小破站看了晨磊大佬关于Flink的分享视频 https://www.bilibili.com/video/BV1TE411L7zV/?spm_id_from=333.788.videocard.4,这篇博客主要对这次分享的一些知识点做些整理。 看大佬,人美技术牛! ( •̀ ω •́ )✧ 二、实时数仓基本架构 以下是菜鸟作为物流扛把子,它对于数据的需求,主要有以下四点: 实时的数据,它存在的计算难点如下。我们知道,实时

云祁QI 3457

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1908

菜鸟供应链实时数仓的架构演进及应用场景

摘要:在 Flink Forward Asia 大会实时数仓专场中,菜鸟数据&规划部高级数据技术专家贾元乔从数据模型、数据计算、数据服务等几个方面介绍了菜鸟供应链数据团队在实时数...

Ververica的博客 2912

上位机图像处理和嵌入式模块部署(qmacvisual入门)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 虽然我们前面学习了很多的知识点,比如说在windows这边,用qt写界面,用opencv写图像处理代码;在linux这边先用树莓派测试,最后再部署到自己的平台上面。但是,对于一个商业软件是怎么运行的,很多时候我们心理还是没有底,或者说,自己写的软件距离一个商业软件还有多远,大部分学习的同学是不知道的。 就算有的同学说,这个时候可以借鉴一下vision pro,或者是

嵌入式-老费,一个分享专业嵌入式知识的blog 1231

cefshap(C#)定义浏览器的右键菜单

菜单效果:复制(自带),搜索文本,打开链接,复制链接,刷新,检查,关于 public class MenuHandler : IContextMenuHandler { //public event Action<string> PopupRequest; void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrows

无线智能模块 可视DIY智能专家 1706

实时数仓 | 你需要的是一款强大的 OLAP 引擎

在开源盛世的今天,实时数仓的建设业界已经有了成熟的方案。技术选型上实时计算、消息队列都有最优解,唯独在 OLAP 领域,百家争鸣,各有所长。 大数据领域开源 OLAP 引擎包括不限于 Hive、Hawq、Presto、Kylin、Impala、SparkSQL、Druid、Clickhouse、Greeplum 等等。我们就各个常用开源 OLAP 引擎的优缺点和使用场景做出详细对比,让开发者进行技...

GitChat 7161

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

基于 Flink 的实时数仓生产实践

数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战。在智能商业中,数据的结果代表了用户反馈、获取数据的及时性尤为重要。快速获取数据反馈能够帮助公司更快地做出决策,更好地进行产品迭代,实时数仓在这一过程中起到了不可替代的作用。 如何更好的建设实时数仓、有哪些优秀的生产实践经验可借鉴? 11月28-30日,Flink Forward Asia 邀请来自 Netflix、美...

zhaowei121的博客 572

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

附PPT|阿里巴巴实时数仓最新架构图

1优酷大数据olap选型分享嘉宾:五羖,阿里文娱技术专家分享大纲:大数据给传统数据技术带来的挑战 市面上各类大数据OLAP技术方案一览优酷不同业务场景的OLAP选型2网...

huzechen的博客 1742

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

阿里建设一站式实时数仓的经验

Hologres作为大数据OLAP分析与线上服务的统一出口,一套系统就能提供分析和服务2种能力。依托Hologres,再结合阿里大数据产品矩阵如DataWorks, MaxCompute, Flink, DLF等,能非常完美地支持实时离线一体、分析服务一体、湖仓一体、流批一体等场景。

m0_68989328的博客 1279

adb实时获取屏幕_实时数仓 | 你需要的是一款合适且强大的OLAP数据库(上)

欢迎扫码关注我的公众号,回复【JAVAPDF】可以获得一份200页秋招面试题!前言今年有个现象,实时数仓建设突然就被大家所关注。我个人在公众号也写过和转载过几篇关于实时数据仓库的文章和方案。但是对于实时数仓的狂热追求大可不必。首先,在技术上几乎没有难点,基于强大的开源中间件实现实时数据仓库的需求已经变得没有那么困难。其次,实时数仓的建设一定是伴随着业务的发展而发展,武断的认为Kappa架构一定是最...

weixin_39751076的博客 618

你需要的不是实时数仓 | 你需要的是一款合适且强大的OLAP数据库(上)

前言 今年有个现象,实时数仓建设突然就被大家所关注。我个人在公众号也写过和转载过几篇关于实时数据仓库的文章和方案。 但是对于实时数仓的狂热追求大可不必。 首先,在技术上几乎没有难点,基于强大的开源中间件实现实时数据仓库的需求已经变得没有那么困难。其次,实时数仓的建设一定是伴随着业务的发展而发展,武断的认为Kappa架构一定是最好的实时数仓架构是不对的。实际情况中随着业务的发展数仓的架构变...

weixin_30726161的博客 403

你需要的不是实时数仓 | 你需要的是一款强大的OLAP数据库

By 数据仓库与Python大数据场景描述:今年有个现象,实时数仓的建设突然就被大家所关注。我个人在公众号也写过和转载过几篇关于实时数据仓库建设的文章和方案。对于实时数仓...

玉皇大帝不开心 275

【藏经阁一起读】(72)__《Hologres 一站式实时数仓客户案例集》

淘特(原淘宝特价版)定位为消费者带来低价且有质量的源头好货,目前仍然处于用户快速增长的阶段,其中三方线上广告投放具有规模效应大,行业成熟度高等特点,是平台用户引流的重要渠道。由于本次大促具有时间长与高爆发两个特点,在这个过程中,我们面临这这么几个问题:∙ 流量低价获客:∙ 极简营销玩法:∙ 货商高效汰换。

逆境清醒的博客 986

adb获取内存实时消耗_你需要的不是实时数仓 | 你需要的是一款强大的OLAP数据库(上)...

来源:大数据技术与架构作者:王知无大数据技术与架构点击右侧关注,大数据开发领域最强公众号!暴走大数据点击右侧关注,暴走大数据!By大数据技术与架构场景描述:今年有个现象,实时数仓的建设突然就被大家所关注。我个人在公众号也写过和转载过几篇关于实时数据仓库建设的文章和方案。对于实时数仓的狂热追求大可不必如此。关键词:实时数仓 OLAP架构选型声明:本文参考了阿里巴巴菜鸟网络,知乎,网易严选...

weixin_39925813的博客 247

Flink 学习资料

本系列课程由 Apache Flink Community China 官方出品。旨在为具备一定大数据基础、对 Apache Flink 感兴趣的同学提供系统性的入门教程,课程分为 基础篇、进阶篇、运维篇、实时数仓篇等,持续更新。PPT视频回放讲师:程鹤群(军长)(Apache Flink PMC,阿里巴巴技术专家)PPT视频回放讲师:戴资力(Apache Flink PMC)

bigdatakenan的博客 1022
上一篇: 当年要是这样搞,我的C++也不至于这样!
下一篇: 解读:一种基于CNN-LSTM混合神经网络的股价预测模型
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值