Doris 源码分析 (二) 代码结构分析

Doris 源码分析 (二) 代码结构分析,第1张

注 正如上图所示, FE 端主要是 PaloFe 开启的服务入口, 后端为 doris_main 开启的服务入口,前后端交互主要靠 thrift rpc 进行调用。 FE 中主从选举及元数据 *** 作日志同步等均依托 bdbje 主从方案来实现。

元数据变更日志主要靠 bdbje 的主从复制来完成如下图:

注 元数据的数据流具体过程如上图所示,步骤如下:

和速即到G,有单速级间算这是的1级单。

Doris 支持本地文件、实时数据和HDFS文件的导入,通过兼容MySQL协议,用户可以将原来通过各种主流BI工具和可视化平台业务切换到Doris,改为直接连接Doris集群。

百度数据仓库Palo是由Apache Doris核心研发团队在百度云上提供的基于Apache Doris 的数据仓库服务,可以面向企业级用户提供全托管的数仓体验,同时也支持多云及私有化部署。

Apache Doris技术原理:

ApacheDoris 主要基于C++ 和Java 开发,集成了Google Mesa 和Apache Impala 的技术。将Mesa 与Impala进行组合的基础上,Doris 被设计为一个不依赖于其他系统的简单且单一紧密耦合的系统,并实现了MySQL协议,使得用户可以像使用MySQL 无缝过渡到Doris。

包括各种报表应用都可以通过MySQL协议连接Doris,同时获得高并发低延迟点查询性能,而且还能进行高吞吐量的即席分析查询。Doris 不仅提供大批量数据加载,而且还提供近乎实时的小批量,甚至流数据加载。此外Doris还具备可用性,可靠性,容错性和可扩展性。 

注 修改配置之后,需要通过 metadata_failure_recovery=true 来清空 bdbje 的元数据, 因此当修改 FE 端口等都可以通过在 fe/conf/feconf 的方式来使其生效即可,然后将 feconf 文件中的 metadata_failure_recovery=true 删除防止下次再次清除咯。(源码: orgapachedorisjournalbdbjeBDBDebugger )

修改 feconf 文件增加 enable_bdbje_debug_mode=true , 然后通过 sh start_fesh --daemon 启动 FE 即可进入 debug 模式。 进入 debug 模式之后,仅会启动 >

一、基础部分:JAVA语言 和 LINUX系统

二、数据开发:

1、数据分析与挖掘

一般工作包括数据清洗,执行分析和数据可视化。学习Python、数据库、网络爬虫、数据分析与处理等。

大数据培训一般是指大数据开发培训。

大数据技术庞大复杂,基础的技术包含数据的采集、数据预处理、分布式存储、数据库、数据仓库、机器学习、并行计算、可视化等各种技术范畴和不同的技术层面。

2、大数据开发

数据工du程师建设和优化系统。学习hadoop、spark、storm、超zhi大集群调优、机器学习、Docker容器引擎、ElasticSearch、并发编程等;

课程学习一共分为六个阶段:

在实际的业务场景中,随着业务数据量越来越大,对数据去重的压力也越来越大,当数据达到一定规模之后,使用精准去重的成本也越来越高,在业务可以接受的情况下,通过近似算法来实现快速去重降低计算压力是一个非常好的方式,本文主要介绍 Doris 提供的 HyperLogLog(简称 HLL)是一种近似去重算法。

HLL 的特点是具有非常优异的空间复杂度 O(mloglogn) , 时间复杂度为 O(n), 并且计算结果的误差可控制在 1%—2% 左右,误差与数据集大小以及所采用的哈希函数有关。

它是 LogLog 算法的升级版,作用是能够提供不精确的去重计数。其数学基础为 伯努利试验

假设硬币拥有正反两面,一次的上抛至落下,最终出现正反面的概率都是50%。一直抛硬币,直到它出现正面为止,我们记录为一次完整的试验。

那么对于多次的伯努利试验,假设这个多次为n次。就意味着出现了n次的正面。假设每次伯努利试验所经历了的抛掷次数为k。第一次伯努利试验,次数设为k1,以此类推,第n次对应的是kn。

其中,对于这n次伯努利试验中,必然会有一个最大的抛掷次数k,例如抛了12次才出现正面,那么称这个为k_max,代表抛了最多的次数。

伯努利试验容易得出有以下结论:

最终结合极大似然估算的方法,发现在n和k_max中存在估算关联:n = 2 ^ k_max。 当我们只记录了k_max时,即可估算总共有多少条数据,也就是基数。

假设试验结果如下:

取上面例子中前三组试验,那么 k_max = 6,最终 n=3,我们放进估算公式中去,明显: 3 ≠ 2^6 。也即是说,当试验次数很小的时候,这种估算方法的误差是很大的。

这三组试验,我们称为一轮的估算。如果只是进行一轮的话,当 n 足够大的时候,估算的误差率会相对减少,但仍然不够小。

HLL 是基于 HyperLogLog 算法的工程实现,用于保存 HyperLogLog 计算过程的中间结果,它只能作为表的 value 列类型、通过聚合来不断的减少数据量,以此

来实现加快查询的目的,基于它得到的是一个估算结果,误差大概在1%左右,hll 列是通过其它列或者导入数据里面的数据生成的,导入的时候通过 hll_hash 函数

来指定数据中哪一列用于生成 hll 列,它常用于替代 count distinct,通过结合 rollup 在业务上用于快速计算uv等

HLL_UNION_AGG(hll)

此函数为聚合函数,用于计算满足条件的所有数据的基数估算。

HLL_CARDINALITY(hll)

此函数用于计算单条hll列的基数估算

HLL_HASH(column_name)

生成HLL列类型,用于insert或导入的时候,导入的使用见相关说明

HLL列不允许直接查询原始值,只能通过HLL的聚合函数进行查询。

以上就是关于Doris 源码分析 (二) 代码结构分析全部的内容,包括:Doris 源码分析 (二) 代码结构分析、亚秒 和 秒 是怎样的换算、Doris 源码分析 (四) 元数据维护等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9297304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存