- 博客(171)
- 收藏
- 关注
原创 原则指标和延伸指标简介
原则指标是衡量核心目标是否达成的关键数据,集中反映了系统或业务的整体表现。延伸指标用于支持和解释原则指标的变化,提供更深入的分析维度,帮助识别问题根源。通过搭配使用这两类指标,可以有效地实现全面的性能监控和业务优化。
2024-10-11 10:59:42 90
原创 Flink job的提交流程
在Flink中,作业(Job)的提交流程是一个复杂的过程,涉及多个组件和模块,包括作业的编译、优化、序列化、任务分发、任务调度、资源分配等。Flink通过分布式架构来管理作业的生命周期,确保作业在不同节点上以高效和容错的方式运行。我们可以从底层原理和源码层面详细解析Flink作业的提交流程。
2024-10-11 10:36:49 517
原创 Flink SQL 底层封装的原理
Flink SQL 底层基于 Apache Calcite 实现了 SQL 解析和优化,并通过 Flink 的自定义规则扩展,支持流数据的查询处理。整个过程从 SQL 解析、逻辑计划生成与优化,到物理计划生成,再到最终的任务执行,都是高度模块化的。解析 SQL:使用 Calcite 将 SQL 语句转换为关系代数表达式。优化逻辑计划:通过 Flink 特定的优化规则对逻辑计划进行优化。生成物理计划:将优化后的逻辑计划转换为 Flink 的 DataStream API。执行任务。
2024-10-10 17:23:58 1107
原创 面试题:半年前的sql当时能正常跑,现在跑不了,有哪些原因?
一年前可以正常运行的 SQL 查询现在无法运行,可能有多种原因。数据库系统、数据表结构、索引、权限、数据库引擎版本等都可能发生变化,从而导致查询失败。
2024-10-10 16:55:03 799
原创 HTTP长连接和短连接 简介
HTTP 长连接和短连接是指在 HTTP 协议中,客户端与服务器之间建立和保持 TCP 连接的方式。它们主要区分在于连接的持续时间和如何管理多次请求与响应之间的连接。
2024-10-10 16:23:14 493
原创 MySQL中的 Write-Ahead Log 详解
WAL 通过将数据修改先记录到日志,再将日志写入磁盘,确保了数据库在崩溃时能够恢复到一致状态。MySQL InnoDB 引擎的 WAL 机制依赖于重做日志的管理和事务的提交策略,通过日志优先的方式实现数据持久性。在底层实现中,
2024-10-09 15:40:02 902
原创 HBase中的Write-Ahead Log 详解
HBase 的 WAL 机制是保证数据持久性和系统容错能力的重要组件。通过先写 WAL 再写 MemStore,HBase 确保了系统的高可靠性和一致性。底层的。
2024-10-09 15:32:16 1053
原创 MySQL的驱动表和被驱动表
在多表连接查询中,MySQL 会首先扫描的表称为驱动表。驱动表的每一行数据都需要与被驱动表中的数据进行匹配,以生成最终的结果集。
2024-10-09 14:43:01 551
原创 MySQL 的 InnoDB 存储引擎中的 排他锁 详解
X 锁(排他锁)是一种严密的锁类型,当一个事务对一条记录(或多个记录)加上排他锁时,其他事务不能再对该记录进行任何操作,直到锁被释放为止。
2024-10-09 14:33:52 980
原创 MySQL 锁 简介
MySQL 的锁机制通过细粒度的锁控制来优化并发性能,从表锁到行锁、从隐式锁到显式锁,以及通过多版本并发控制 (MVCC) 进一步提高读性能。锁的底层实现依赖于事务管理、锁结构体的组织和管理机制,特别是死锁检测与锁调度策略的结合,可以有效避免长时间等待和死锁问题。理解锁的细节,可以帮助数据库管理员和开发者在实际生产中进行针对性的优化。
2024-10-09 12:29:04 780
原创 Roaring Bitmap 详解
Roaring Bitmap 是一种高效且灵活的位图压缩数据结构,通过分片和按需选择不同的容器类型,Roaring Bitmap 能够在处理稀疏和稠密数据时都提供良好的空间和时间性能。在实际应用中,Roaring Bitmap 被广泛用于处理大规模的集合运算,例如在分析系统、数据库和搜索引擎中进行快速去重、过滤等操作。
2024-10-08 10:10:25 856
原创 Kafka 动态分区详解
Kafka 动态分区的实现依赖于控制器和 ZooKeeper/KRaft 的元数据更新机制。在分区增加的过程中,控制器负责管理分区的扩展,生产者的分区器会根据新的分区数重新计算分区,消费者则需要进行再均衡以处理新的分区。虽然动态分区提供了扩展 Kafka 吞吐量的能力,但它也带来了一些潜在的问题,特别是消息顺序性和消费者再均衡带来的性能影响。因此,在实际使用过程中,需要根据业务场景合理地增加分区,同时评估分区扩展带来的副作用。
2024-10-08 08:43:42 1040
原创 HBase 的 MemStore 详解
MemStore 是 HBase 的内存存储区域,它是一个负责缓存数据写入操作的组件。每当有写操作(如Put或Delete)发生时,数据会首先被写入到 MemStore 中,而不是直接写入磁盘。MemStore 类似于数据库中的缓冲区,主要用于提升写操作的性能。当 MemStore 达到一定的容量时,数据会被刷新(flush)到磁盘上,形成 HFile 文件存储在 HDFS 中。HBase 中的 MemStore 是一个核心的缓存机制,它通过缓存写操作来提升写性能,并在合适的时机将数据刷写到磁盘。
2024-09-30 16:44:12 1202
原创 HBase 的二级索引和配置实现
HBase 原生不支持二级索引,但通过倒排索引、协处理器或者借助 Apache Phoenix,可以实现二级索引。不同的实现方式各有优缺点,适合不同的业务场景。倒排索引实现简单,但需要额外的存储空间和更新开销;协处理器提供了更加灵活和高效的服务器端解决方案,但需要一定的开发和维护成本;而 Phoenix 则提供了简单的 SQL 接口,适合轻量级开发场景。通过合理设计和优化二级索引,可以显著提升 HBase 的查询效率,满足多维度数据检索的需求。
2024-09-30 16:26:27 1250
原创 HBase 性能优化 详解
在深入讨论优化策略之前,先简单回顾 HBase 的核心架构和工作原理。想要详细了解可以看我的HBase架构介绍。1.1 HBase 架构HMaster:负责元数据管理和 Region 的分配、迁移等操作。:负责数据的读写,管理多个 Region,存储实际的数据。ZooKeeper:作为分布式协调服务,管理集群状态和协同操作。HBase 通过分区(Region)存储数据,每个 Region 对应一定范围的 Row Key。当数据量超过设定的阈值时,Region 会进行自动切分。1.2 数据存储原理。
2024-09-30 11:46:41 1510
原创 元数据的 介绍和采集
元数据字段的采集可以通过被动采集、主动采集和混合采集实现,而采集的元数据种类包括与数据流、任务状态、容错和监控相关的多种信息。例如,系统在正常运行时可以自动记录任务状态和性能数据,但在故障发生时,管理员可以通过接口主动获取故障相关的详细元数据。采集元数据的过程涉及系统中多个层级的操作,元数据通常用于监控、调度、状态一致性、容错和性能优化等多个方面。主动采集是指系统通过用户或管理平台主动发起对元数据的采集请求,通常用于定期分析系统的运行状况或者在特定事件发生时进行的元数据记录。:每条数据流事件的唯一标识符。
2024-09-30 10:00:24 1002
原创 HBase 的基本架构 详解
HBase 是一个分布式的、面向列的数据库,构建在 HDFS(Hadoop Distributed File System)之上,提供高效的随机读写操作。为了全面理解 HBase 的基础架构,需要从逻辑架构、物理存储、组件之间的交互、数据管理和底层设计出发,结合源码进行深入剖析。
2024-09-27 17:36:29 1117
原创 Spark 中 任务集 TaskSet 详解
在 Spark 源代码中,TaskSet类主要定义在文件中。其主要作用是将一组任务(Task)封装成一个集合,并向调度器提供这些任务以进行调度。以下是TaskSetTaskSet整个TaskSet用户提交的Action操作触发 Spark 的,并将计算分解为多个Stage。每个Stage会生成一个TaskSet对象,包含所有任务(分区)并提交给。创建并负责调度TaskSet中的任务。根据可用的资源和数据本地性,将任务分配给合适的执行器。执行器执行任务并返回结果。如果任务失败,会处理重试逻辑。
2024-09-27 10:17:29 1057
原创 Spark Job 对象 详解
Spark 中的Job主要用于表示一个具体的计算作业,它是由用户提交的Action(例如count()collect()等)触发的。这些动作会生成一个Job对象,最终调度并执行一系列与之相关的任务。Job的核心作用Job是 Spark 中用于管理由Action操作触发的计算任务。它通过划分执行阶段(Stages),并调度相应的任务执行,最终将计算结果返回给用户。代码实现Job在 Spark 源码中作为调度系统的一个重要组成部分,由创建并管理。负责将用户的作业拆解为可执行的阶段和任务,并交由执行。
2024-09-27 10:00:03 1079
原创 Spark 中所有用到了Job对象的组件模块和关系
负责整个Job的生命周期管理,包括阶段划分、任务调度、任务失败重试等。StageJob被分解为多个Stage,每个Stage对应于一组可并行执行的Task。Task和TaskSetStage被分解为多个Task,并通过TaskSet提交执行。和负责将任务调度到集群中具体的节点,负责与集群管理器交互,启动执行器并分配任务。ActiveJob:代表正在运行的Job,并与一起跟踪其状态。:负责Shuffle操作中,数据的输出位置跟踪与管理。Job。
2024-09-27 09:39:47 882
原创 Spark 任务与 Spark Streaming 任务的差异详解
任务调度:Spark 任务基于静态数据集,采用一次性批处理模式;Spark Streaming 任务基于流数据,采用微批处理模式,每隔一个时间窗口生成新的任务。数据处理:Spark 处理静态的 RDD,数据只计算一次;Spark Streaming 处理离散化的流数据,每个时间窗口生成一个新的 RDD 并计算。容错机制:Spark 任务依赖 RDD 血缘关系进行数据恢复;Spark Streaming 除了依赖血缘关系外,还引入了 WAL 和 Checkpointing 来保证流数据的容错性。
2024-09-24 16:20:32 1422
原创 Spark Streaming 容错机制详解
Spark Streaming 是 Spark 生态系统中用于处理实时数据流的模块。它通过微批处理(micro-batch)的方式将实时流数据进行分片处理,每个批次的计算本质上是 Spark 的批处理作业。为了保证数据的准确性和系统的可靠性,Spark Streaming 实现了多种容错机制,包括数据恢复、任务失败重试、元数据恢复等。 接下来,我们将从底层原理和源代码的角度详细解释 Spark Streaming 是如何实现容错的。在处理实时数据时,可能会遇到各种问题,如:Spark Stre
2024-09-24 15:25:10 1161
原创 Hive 的窗口函数 详解
逻辑层是 Hive 中的窗口函数,它依赖分区和排序规则来生成每个分区中的行号。物理层:Hive 在执行时,通过MapReduce或Tez实现了分布式排序和行号分配,关键类如和负责处理窗口函数的具体逻辑。性能优化:通过合理调优 Hive 参数、增加并行度和使用高效的执行引擎如 Tez,可以显著提升的执行效率。
2024-09-24 14:39:23 1314
原创 Hive ROW_NUMBER() 简介
解析查询:Hive 将的 SQL 查询解析为抽象语法树(AST)。生成执行计划:查询计划中包含窗口函数的计算,分布在不同的任务和阶段。Map 阶段:数据读取并按分区分配给不同的 Reduce 任务。Reduce 阶段:数据按照指定的ORDER BY进行排序,并生成行号。返回结果:结果集带有唯一的行号。
2024-09-24 14:32:00 839
原创 flink 的 Barrier 数据结构
流式系统在处理这些事件时,会在合适的点上插入 Barrier,并确保每个并行处理子任务(Operator)都能接收到该 Barrier,以便完成状态快照和一致性维护。Barrier 是流式处理系统中的一个轻量级标记,它携带的信息通常包括:唯一标识符(ID)、时间戳、序列号、以及一些控制标志。,它通常在数据流中作为一个特殊的事件存在,并在多个数据流分支中流动。Barrier 主要是用于标识数据流中的特殊点,在这些点上,系统会进行状态的快照,以便在故障发生时可以从快照恢复。在 Flink 中,
2024-09-24 14:12:12 1056
原创 flink 的 Barrier 对齐 的优劣详解:
Barrier 对齐涉及复杂的调度机制,特别是当流处理系统中存在多个并行计算任务时,需要协调每个子任务的状态和 Barrier 的传播,这增加了系统的复杂性和维护成本。,可以减少单个流的处理负担,从而提高处理效率,减少等待 Barrier 对齐的时间。通过 Barrier 对齐,系统确保了来自不同流分支的数据按照正确的顺序进行处理,避免了由于数据流速度不同或者乱序传输导致的结果不一致问题。是在数据流中插入的一种特殊的标记,用来指示在某个时间点,流经系统的所有数据都达到了一个一致的状态。
2024-09-24 11:58:43 1268
原创 Spark 的 Skew Join 详解
数据倾斜指的是当某些key关联了异常大量的数据,而其他key关联的数据量较少时,数据分布的不均衡会导致计算瓶颈。例如,在JOIN操作中,如果表 A 中某个key具有大量的数据,而表 B 中同样的key也有大量数据,当这两个表基于这个key进行JOIN时,由于该key被分配到一个或少数几个分区,相关的任务会处理大量的数据,而其他分区的任务数据量却较少。这会导致部分任务比其他任务运行时间长,从而影响整个任务的执行时间。Skew Join是 Spark 中为了解决数据倾斜问题而提供的一种重要优化机制。
2024-09-24 11:46:44 1032
原创 spark 大表与大表join时的Shuffle机制和过程
在 Spark 的大表JOIN过程中,Shuffle机制是核心的步骤,其主要职责是重新分发数据使得相同 key 的记录能够分布到同一个节点。Shuffle的开销主要在于数据的网络传输和磁盘 I/O,因此有效的分区策略、数据倾斜处理以及JOIN算法选择都是优化此过程的关键。通过对 Shuffle 源码和物理执行计划的理解,可以帮助开发者更好地调优 Spark 应用的性能。
2024-09-24 10:59:10 1042
原创 Clickhouse存储数据流程
由于同一列的数据通常是高度相似的,因此列式存储能够实现极高的压缩比,进一步减少磁盘占用和 I/O 传输量。ClickHouse 的查询引擎在执行查询时,可以快速读取这些经过压缩和排序的数据,并利用分区和索引进一步提升查询速度。这样做可以减少频繁的磁盘写入,提升性能。合并后,ClickHouse 会删除原来的小数据片段,并保留合并后的较大片段,从而优化查询时的 I/O 性能。:ClickHouse 的后台线程会定期执行合并操作,将多个数据片段合并为更大的片段,以提升查询性能,并在必要时进行去重。
2024-09-23 17:34:07 878
原创 通过 Flink 的火焰图定位反压
在 Apache Flink 中,Web UI 提供了丰富的监控工具来帮助用户分析和解决作业性能问题,其中火焰图(Flame Graph)是用于分析反压问题的一个强有力的工具。通过 Flink 的火焰图,你可以清晰地了解作业中各个算子的 CPU 时间分布,进而发现处理速度慢的地方。火焰图不仅能够帮助定位 CPU 的消耗,还能够通过 CPU 负载的分布,帮助你理解反压传播的路径。通过这些数据,你可以找到性能异常的算子或任务,并结合火焰图分析这些任务的 CPU 使用情况,确定性能瓶颈。
2024-09-23 17:24:51 1116
原创 用户维度 简介
用户行为和属性的动态变化性使得分析和跟踪变得复杂,但这些变化往往能揭示用户的最新需求和偏好。理解并捕捉这些频繁变化的维度,有助于企业更好地进行用户分群、个性化推荐和精准营销,进而提高用户的粘性和转化率。用户缓慢变化的属性反映了更为长期的个人特征和稳定的生活模式。这些属性在用户行为分析和长期趋势预测中具有重要作用,帮助企业进行生命周期管理、长期客户维系和品牌建设。例如,了解用户的年龄、职业、家庭结构等缓慢变化的属性,可以帮助企业制定长期的市场策略和产品开发计划,进而提升用户的忠诚度和终身价值。
2024-09-23 15:48:13 767
原创 用户画像 简介
用户画像是一个用于描述目标用户群体的工具,帮助企业准确地理解用户的需求和行为,从而优化产品设计、营销策略、用户体验等多个方面。通过系统地创建用户画像,企业可以更好地定位目标市场,实现更有效的用户参与和业务增长。
2024-09-23 14:44:56 693
原创 Flink的反压机制:底层原理、产生原因、排查思路与解决方案
在解决反压时,应该首先通过 Flink 的监控工具排查具体原因,然后根据实际情况采取针对性的解决方案,如增加并行度、优化算子逻辑、调整分区策略、优化外部系统等。通过合理的反压处理,可以显著提高 Flink 作业的稳定性和处理效率。在 keyBy 操作后,不同的并行子任务(subtask)可能收到的数据量不均衡,某些子任务的数据量远远多于其他任务,这会导致这些任务的处理速度显著下降,进而引发反压。反压的产生通常是因为数据流中的某些算子处理数据的速度低于其上游算子的输出速度,导致下游的缓冲区耗尽,引发反压。
2024-09-20 17:21:27 1588
原创 Flink 中 Checkpoint 的底层原理和机制
Flink 的 Checkpoint 机制通过使用Barrier 同步算法状态后端分布式协调等底层组件来实现流式处理中的容错性。Flink 的 Checkpoint Coordinator 负责协调整个 Checkpoint 流程,Barrier 用于确保全局的一致性,而 State Backend 则负责存储各个算子的状态。在故障恢复时,Flink 能够通过最近一次的 Checkpoint 恢复状态,确保数据处理的正确性和一致性。
2024-09-20 09:53:23 1158
原创 spark的stage划分的原理
在收到作业时,会从最后的Action开始,通过递归函数newStage,根据 RDD 的依赖关系逐步向上遍历。当遇到shuffle依赖时,会将其划分为不同的stage,每个shuffle依赖会产生一个。所有的窄依赖 RDD 操作则合并为一个stage,在同一个stage中执行。负责将划分好的stage发送给 TaskScheduler,TaskScheduler 则进一步调度任务到集群执行。窄依赖操作:操作在同一个stage中执行,尽可能合并,减少shuffle。宽依赖操作。
2024-09-19 17:26:28 872
原创 Hive自定义函数——简单使用
UDF 是一种用户自定义的单行函数,它将输入的一行数据进行处理并返回一个结果。例如,可以将 UDF 用来执行列的转换或简单的计算。UDAF 是一种用户自定义的聚合函数,它处理多行数据,并返回一个聚合后的结果。类似于 SQL 中的SUMAVG等聚合函数。UDTF 是一种用户自定义的表生成函数,它接受一行输入,但可以返回多行甚至多列数据。它的作用类似于 SQL 中的EXPLODE,将一行数据拆分成多行。UDF:适用于列级的简单数据转换和计算,如格式化、字符串处理等。UDAF。
2024-09-19 17:03:43 976
原创 数据处理技术——数据回溯简介
数据回溯(Data Provenance/Lineage)是指追踪和记录数据的来源、变更历史以及处理流程的技术。它可以帮助我们了解数据从何而来、如何被修改、在什么时候被处理过,从而确保数据的可追溯性。其核心目的是提供数据操作的透明度,确保数据的完整性和可信度。总之,数据回溯是确保数据可靠、透明和合规的重要工具,适用于各种需要维护数据历史记录和可追溯性的领域。在数据管理和分析中非常有用,能够帮助企业和组织更好地管理、审计和恢复数据。
2024-09-19 08:40:12 342
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人