大数据-01 基础环境搭建:Hadoop 集群
在3台云服务器(2C4G配置)上搭建Hadoop集群环境的详细教程,包含HDFS、MapReduce、YARN组件介绍,Java和Hadoop环境配置步骤。
Hadoop / Hive / Kafka / Spark / Flink 全栈大数据工程实战,从环境搭建到生产落地。
共 269 篇文章
在3台云服务器(2C4G配置)上搭建Hadoop集群环境的详细教程,包含HDFS、MapReduce、YARN组件介绍,Java和Hadoop环境配置步骤。
详解 Hadoop 集群三节点 XML 配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml,含 NameNode、DataNode、ResourceManager 配置说明。
Hadoop 三节点集群 SSH 免密登录全流程:生成 RSA 密钥、分发公钥、编写 rsync 集群分发脚本,含踩坑笔记与 /etc/hosts 配置要点。
Hadoop 三节点集群完整启动流程:格式化 NameNode、启动 HDFS 和 YARN,通过 Web UI 验证集群状态,含 start-dfs.sh 和 start-yarn.sh 用法。
在 Hadoop 集群上完整执行 WordCount:上传文件到 HDFS、提交 MapReduce 任务、通过 YARN UI 查看运行状态,验证真正的分布式计算。
配置 Hadoop JobHistoryServer 记录 MapReduce 任务执行历史,开启 YARN 日志聚合,通过 Web UI 可视化查看任务详情和日志。
深入解析 HDFS 架构:NameNode、DataNode、Client 角色分工,Block 存储机制,文件读写流程(Pipeline 写入与就近读取),以及 HDFS 基础命令速查。
HDFS 命令行完整实操:hadoop fs 常用命令速查,包括目录操作、文件上传下载、权限管理,结合三节点集群实际演示。
使用 Hadoop HDFS Java Client API 进行文件操作:Maven 依赖配置、FileSystem/Path/Configuration 核心类,实现文件上传、下载、删除、列表扫描和进度条显示。
从零实现 Hadoop MapReduce WordCount:Hadoop 序列化机制详解,编写 Mapper、Reducer、Driver 三大组件,Maven 项目配置,本地与集群运行完整代码。
深入讲解 MapReduce 中 Reduce-Side Join、Map-Side Join、Semi-Join 和 Bloom Join 四种 JOIN 策略的原理与 Java 实现,分析各自适用场景和性能特点。
介绍 Hive 数据仓库的核心概念、架构组成与优缺点,并详细讲解在三节点 Hadoop 集群上安装配置 Hive 2.3.9 的完整步骤。
系统讲解 Hive 的 DDL(建库建表、内部表与外部表)和 DML(数据加载、插入、查询)操作,包含完整 HiveQL 示例与配置优化。
深入讲解 Hive 的多种数据导入方式(LOAD/INSERT/外部表/Sqoop)、数据导出方法,以及聚合、过滤、排序等 HQL 查询操作的实际用法。
详解 Hive Metastore 的内嵌、本地、远程三种部署模式的区别,以及在三节点集群上配置高可用远程 Metastore 的完整步骤。
介绍 HiveServer2 的架构与作用,配置 Hadoop 代理用户和 WebHDFS,通过 Beeline 客户端实现跨节点 JDBC 远程访问 Hive。
介绍 Apache Flume 的定位、核心组件(Source、Channel、Sink)、事件模型与常见数据流拓扑,以及安装配置方法。
通过 Flume 最简单的 Hello World 案例,使用 netcat source 监听端口、memory channel 缓冲、logger sink 控制台输出,演示完整的 Source→Channel→Sink 数据流。
使用 Flume exec source 实时追踪 Hive 日志文件,通过 memory channel 缓冲,配置 HDFS sink 按时间分区写入,实现日志数据自动落盘 HDFS。
通过 Flume 复制模式(Replicating Channel Selector)和三 Agent 级联架构,实现一份日志数据同时写入 HDFS 和本地文件,满足离线分析与实时备份双重需求。
介绍 Apache Sqoop 的核心原理、使用场景及在 Hadoop 集群上的安装配置步骤,帮助快速上手 MySQL 与 HDFS/Hive 之间的批量数据迁移。
通过完整示例演示使用 Sqoop 将 MySQL 表数据全量导入 HDFS,涵盖核心参数说明、MapReduce 并行机制及执行结果验证。
详解 Sqoop 从 MySQL 按条件导入部分数据到 HDFS 的三种方式:自定义查询、指定列、WHERE 条件过滤,并说明各自的适用场景与注意事项。
演示使用 Sqoop 将 MySQL 数据直接导入 Hive 表,以及从 Hive 导出数据回 MySQL,涵盖 --hive-import、--create-hive-table 等关键参数的用法。
介绍 Sqoop 的 --incremental append 增量导入机制,并深入讲解 CDC(变化数据捕获)的核心概念、捕获方式对比及 Flink CDC、Debezium 等现代方案选型。
介绍 ZooKeeper 的核心概念、Leader/Follower/Observer 角色分工、ZAB 协议原理,并演示 3 节点集群的安装与配置过程。
深入解析 zoo.cfg 核心参数含义,讲解 myid 文件配置规范,演示 3 节点集群启动流程与 Leader 选举结果验证。
深入解析 ZooKeeper 的 ZNode 四种节点类型、ZXID 事务 ID 结构,以及 Watcher 一次性触发的监听机制原理与实践。
从客户端、WatcherManager 到 ZooKeeper 服务端,完整解析 Watcher 的注册-触发-通知流程,并通过 zkCli 命令行实操演示节点的增删查改与监听。
使用 ZkClient 库通过 Java 代码操作 ZooKeeper,实现 Session 建立、持久节点增删、子节点变更监听与数据变更监听的完整实战示例。
深入解析 ZooKeeper 的 Leader 选举机制与 ZAB 原子广播协议,涵盖初始选举流程、消息广播三阶段、故障恢复策略及生产部署建议。
基于 ZooKeeper 临时顺序节点实现分布式锁,附完整 Java 代码,涵盖锁竞争、前驱节点监听、CountDownLatch 同步和递归重试的完整流程。
全面解析 HBase 分布式数据库的整体架构,包括 ZooKeeper 协调、HMaster 管理节点、HRegionServer 数据节点、Region 存储单元及四维数据模型,适合大数据架构选型参考。
手把手配置 HBase 单节点环境,详解 hbase-env.sh、hbase-site.xml 关键参数,完成与 Hadoop HDFS 和 ZooKeeper 集群的对接。
基于上一篇单节点配置,将 HBase 分发到 3 个节点组成生产集群,介绍配置同步、集群启动、Web UI 验证及 HBase Shell 基本操作。
深入讲解 HBase 列族设计原则、Shell 操作实战,涵盖建表、插入、查询、更新、删除完整流程,附生产级列族配置示例。
使用 HBase Java Client API 实现建表、插入、删除、Get 查询、全表扫描与范围扫描,附完整 Maven 依赖和可运行代码示例。
介绍 Redis 的核心特性与五大数据类型,深入讲解旁路缓存、穿透模式、Write Behind 三种缓存读写模式的原理与适用场景。
在 Ubuntu 上从源码编译安装 Redis 6.2.9,配置 redis.conf 守护进程模式,启动 redis-server 并通过 redis-cli 验证连接。
全面讲解 Redis 的 String、List、Set、Sorted Set、Hash 五大数据类型的常用命令、底层特性与典型使用场景,附完整命令示例。
深入讲解 Redis 的 Bitmap 位图、Geo 地理位置(GeoHash、Z-order 曲线、Base32 编码)与 Stream 消息流三种高级数据类型,含常用命令与实战示例。
详解 Redis 发布订阅模式的工作机制、三大弱事务缺陷(无持久化、无确认、无重试),以及在生产环境中的替代方案选择。
窗口操作通过设置窗口长度(windowDuration)和滑动间隔(slideDuration),在比 batchDuration 更长的时间范围内整合多个批次的数据,实现动态的流式计算。典型案例展示了如何通过 reduceByWindow 对窗口内数据进行拼接与求和,以及如何利用 reduceByKeyAndWindow 实现热点搜索词的实时统计,强调了窗口参数与批次间隔的关系。另一方面,状态跟踪操作如 updateStateByKey 和 mapWithState 可用于对流式数据进行全局累计统计。
本文介绍了 Spark Streaming 与 Kafka 的两种集成方式:Receiver Approach 和 Direct Approach。Receiver 方式通过 Executor 上的 Receiver 持续接收数据,依赖 BlockManager 管理数据块,可通过 WAL 增强可靠性;Direct 方式不依赖 Receiver,直接生成与 Kafka 分区对应的 KafkaRDD,提升吞吐效率,支持手动维护 Offset 实现 Exactly Once 语义。
Spark Streaming 集成 Kafka 时,Offset 管理是保证数据处理连续性与一致性的关键环节。Offset 用于标记消息在分区中的位置,应用可通过它来控制消费进度。若在程序异常退出前未持久化保存 Offset,则会导致数据丢失或重复消费。常见管理方式包括:使用 Checkpoint 保存元数据和 Offset,支持故障恢复但存在版本兼容问题;依赖 Kafka 内置的提交机制,实现简单但控制粒度有限;或选择外部存储(如 Redis、MySQL、HBase、ZooKeeper),通过手动管理。
Offset用于标记Kafka分区内消息的位置,正确管理能够实现"至少一次"甚至"仅一次"的数据处理语义。通过持久化Offset,应用在故障恢复时可从上次处理的位置继续消费,避免消息丢失或重复。
系统讲解 Redis Lua 脚本的 EVAL 命令语法、redis.call 与 redis.pcall 的区别,以及原子计数器、CAS、批量操作等四个典型实战案例。
详解 Redis 慢查询日志的配置参数(slowlog-log-slower-than、slowlog-max-len)、核心命令,以及数据结构优化、Pipeline、监控体系等生产级性能调优策略。
Apache Flink 是一个开源的大数据流处理框架,支持无界流和有界批数据的高效计算,以"流批一体"为核心理念,将批处理视为流处理的特例。其具备高性能、分布式执行和弹性扩展能力,能够在 YARN、Kubernetes 等集群环境中运行,广泛应用于实时 ETL、复杂事件处理、在线分析与监控预警等场景。
Apache Flink 既支持流处理(Stream Processing),也支持批处理(Batch Processing)。流处理适用于实时数据,如传感器、日志或交易流,特点是处理无界数据流、支持事件时间、窗口操作和状态管理,能够保证乱序与延迟情况下的精确计算。批处理则针对静态、有界数据集,常用于大规模分析或ETL任务,依赖任务并行化和 DataSet API 实现高效处理。文中以"单词统计"为案例,分别展示了基于批处理和流处理的实现方式。
Flink 的运行架构采用典型的 Master/Slave 模式,各核心组件分工明确。JobManager 作为 Master,负责作业的解析、调度、检查点协调以及故障恢复,同时支持高可用设计和多种作业提交方式。TaskManager 是执行单元,提供 Task Slot 资源,执行具体的子任务,并通过网络通信与心跳机制维持集群稳定性。ResourceManager 负责全局资源的分配与回收,协助启动和管理 TaskManager,保证资源利用效率。Dispatcher 则通过 REST 接口接收用户提交的作业
Flink 提供多种安装模式以适应不同场景需求。Local 模式适合个人学习与小规模调试,配置简单,可直接在本地 IDE 中运行。Standalone 模式是 Flink 内置的集群管理方式,包含 JobManager 和 TaskManager,用户需手动配置资源,优点是部署独立、简洁易用,适合中小规模生产环境或边缘计算场景,但缺乏动态扩展能力。YARN 模式依托 Hadoop YARN 进行统一资源调度,支持动态资源分配与高可用,适合企业级大数据平台和大规模生产环境。
在 YARN 模式下部署 Flink 需要完成一系列环境配置和集群管理操作。首先,在各节点配置环境变量,包括 HADOOP_CONF_DIR、YARN_CONF_DIR 和 HADOOP_CLASSPATH,并在 profile 中加入 Hadoop 与 Flink 的路径。随后修改 yarn-site.xml,指定 ResourceManager 地址,并关闭虚拟内存与物理内存检测以避免资源限制问题。
DataSource、Transformation 和 Sink。DataSource 提供多样化的数据输入方式,包括文件系统、消息队列、数据库及自定义数据源;Transformation 是计算的核心环节,支持 Map、FlatMap、Filter、KeyBy、Window 等操作,并能以链式调用构建完整的数据流处理管道;Sink 负责结果输出,可将数据写入消息系统、数据库或文件系统,并支持自定义实现。
系统对比 Redis 两种持久化方案:RDB 快照与 AOF 日志的配置方式、触发机制、优缺点,以及 AOF 重写机制和生产环境的推荐策略。
深入解析 Redis RDB 持久化机制,涵盖触发方式、BGSAVE 执行流程、配置参数、文件结构及与 AOF 的对比,帮助你在生产环境中做出合理的持久化选型。
非并行源(Non-Parallel Source)是Flink中并行度固定为1的源操作,无论集群规模如何,只能在单一实例中运行,确保任务按顺序处理。
RichSourceFunction 和 RichParallelSourceFunction 是功能增强型的源函数,适用于需要复杂逻辑和资源管理的场景。相比基础的 SourceFunction,它们提供了更完整的生命周期方法(open、close、run、cancel),支持在作业开始和结束时进行初始化和清理操作。
Flink 针对 DataStream 提供了丰富的算子,支持数据流在不同场景下的灵活处理。常见的算子包括 Map、FlatMap 和 Filter,用于元素转换、拆分与条件筛选;KeyBy 和 Reduce/Fold/Aggregations,可实现基于键的分区、滚动归约与聚合操作;Window 系列算子,能按照时间或事件对流进行窗口化计算,便于实现实时统计与累计功能。
Flink 的 Sink 是数据流处理的最终输出端,用于将处理结果写入外部系统或存储介质。它是流式应用的终点,决定数据如何被保存、传输或消费。
JDBC Sink 是最常用的数据输出组件之一,常用于将流处理与批处理结果写入 MySQL、PostgreSQL、Oracle 等关系型数据库。通过 JdbcSink.sink() 方法,开发者可以方便地实现 INSERT/UPDATE/UPSERT 等操作,并支持批量写入、事务一致性、自动重试机制,保证数据高效可靠落库。
Flink 的 DataSet API 是批处理的核心编程接口,专为处理静态、有限数据集设计,支持 TB 级甚至 PB 级大数据分析。相比 DataStream API 的流处理,DataSet API 聚焦于离线批处理,具备延迟执行、内存管理、丰富算子和容错机制等优势。常见应用场景包括 ETL 数据清洗与加载、批量报表分析、大规模图计算、机器学习特征工程与数据预处理。
全面解析 Redis 的内存控制机制,包括 maxmemory 配置、键过期的三种删除策略(惰性/主动/定时),以及 8 种内存淘汰策略的适用场景与选型建议。
深入解析 Redis 的通信底层:RESP 序列化协议的五种数据类型、Pipeline 批处理模式,以及基于 epoll 的 Reactor 单线程事件驱动架构如何支撑 Redis 的高并发处理能力。
Flink的Window窗口机制是流处理与批处理统一架构的核心桥梁。Flink将批处理视为流处理的特例,通过时间窗口(Tumbling、Sliding、Session)和计数窗口将无限流切分为有限数据集。
滑动窗口(Sliding Window)是Apache Flink流处理中的核心机制之一,比固定窗口更灵活,广泛应用于实时监控、异常检测、趋势分析和用户行为统计等场景。滑动窗口由两个关键参数组成:窗口大小(window size)与滑动步长(slide interval)。
Watermark 是一个特殊的标志,它用于告诉 Flink 数据流中事件的进展情况。简单来说,Watermark 是 Flink 中估计的"当前时间",表示所有早于该时间戳的事件都已经到达。Flink 认为当前时间在 Watermark 时间戳之前的所有事件已经接收完毕,不再期待有早于该时间戳的事件。当 Watermark 时间戳更新时,系统可以触发基于事件时间的窗口操作,比如窗口计算、聚合等。
Flink 的 Watermark(水印)机制 是事件时间窗口计算中最核心的概念之一,用于处理 乱序事件(Out-of-Order Events) 并确保窗口准确触发。它通过定义系统认为"之前事件已全部到达"的时间点,来决定窗口计算的时机。当 Watermark ≥ 窗口结束时间时,Flink 才会触发窗口聚合计算。通过配置 最大乱序时间(Bounded Out-of-Orderness),系统可容忍一定延迟,保证结果准确性。
一个Flink程序由多个Operator组成(Source、Transformation、Sink)。一个Operator由多个并行的Task(线程)来执行,一个Operator的并行Task(线程)数目就被称为该Operator(任务)并行度(Parallelism)。Flink 中的并行度是指每个算子在任务执行时可以同时处理数据的并发实例数。
根据是否依赖中间状态,Flink 计算可分为有状态和无状态两种类型:无状态计算(Stateless Computation)如 Map、Filter、FlatMap 等操作,每条数据独立处理,执行效率高、可线性扩展;而有状态计算(Stateful Computation)则需保存中间结果或上下文,如窗口聚合、异常检测、去重等典型场景。
系统梳理 Redis 在高并发场景下最常见的五类缓存问题:缓存穿透、缓存击穿、缓存雪崩、热 Key 和大 Key,分析每种问题的成因并给出可落地的解决方案。
Redis 乐观锁实战:WATCH/MULTI/EXEC 机制详解,Lua 脚本实现原子操作,SETNX+EXPIRE 分布式锁从基础到 Redisson,Java 代码完整示例。
广播状态(Broadcast State)是 Apache Flink 中支持流式应用动态更新逻辑的重要机制,广泛应用于实时风控、用户行为分析、动态规则评估等场景。它允许低吞吐量的配置流(如规则、模型、参数)广播至所有并行任务实例,使各算子在不重启的情况下即时应用新逻辑。典型案例是实时欺诈检测系统:高频交易流与低频规则流并行处理,规则更新可通过广播状态分发至各处理节点,实现业务逻辑热更新。
状态存储(State Backend)是其实现有状态流计算的核心机制,决定了数据的可靠性、性能与容错性。Flink 提供三种内置存储后端:MemoryStateBackend、FsStateBackend 与 RocksDBStateBackend。MemoryStateBackend 将状态保存在内存中,速度快但不适合生产;FsStateBackend 支持持久化到 HDFS,适合大状态与高可用;RocksDBStateBackend 基于嵌入式数据库 RocksDB,支持超大状态与增量 Checkpoint。
ManagedOperatorState用于管理无键(non-keyed)状态,实现算子在故障恢复或扩缩容时的状态一致性。开发者可通过实现CheckpointedFunction接口来使用ManagedOperatorState,支持ListState和BroadcastState两种数据结构。
Flink 中,并行度(Parallelism)是衡量任务并发处理能力的核心参数,决定了每个算子(Operator)可以同时运行的任务数量。合理设置并行度能显著提升作业的吞吐量与资源利用率。Flink 支持多层级的并行度配置,包括全局、作业级、算子级和系统级,可通过 env.setParallelism()、CLI 提交参数 -p 或 flink-conf.yaml 文件进行灵活设置。并行度与集群的 slot 数量直接相关,slot 代表实际执行线程资源,二者需保持平衡以避免资源浪费或任务阻塞。
Flink中专用于复杂事件流实时分析的核心组件,提供完整的模式匹配框架,支持基于事件时间(Event Time)的乱序处理与高性能NFA(非确定性有限自动机)匹配机制。它允许开发者通过Pattern API定义复杂的事件序列规则,如严格连续、宽松连续、循环匹配与时间窗口约束等,实现毫秒级延迟下的欺诈检测、物联网监控、实时风控与用户行为分析等业务场景。相比传统CEP系统(如Esper),Flink CEP具备更强的状态管理、精确一次语义、容错恢复与水平扩展能力,可无缝集成Flink DataStream
Flink CEP 超时事件提取是流处理中的关键环节,用于在模式匹配过程中捕获超过窗口时间(within)的部分匹配事件。通过 select()、flatSelect() 和 process() API,开发者可以同时处理成功匹配和超时事件,实现复杂事件流的精确监控。本文详细介绍了 Flink CEP 的完整开发流程。
深入解析 Redis 高可用实现原理,涵盖主从复制同步机制、哨兵模式自动故障转移流程,以及分布式锁设计思路,并附 Docker 部署示例。
系统介绍 Kafka 的核心架构设计,包括 Topic/Partition/Replica 模型、ISR 机制、零拷贝优化、消息格式与典型应用场景,理解 Kafka 实现百万级 TPS 的工程原理。
Flink CEP(Complex Event Processing)复杂事件处理机制,结合实际案例深入讲解其在实时流式计算中的应用原理与实战实现。通过定义事件模式(Pattern)、模式流(PatternStream)及 select 函数,开发者可从实时数据流中精准识别特定事件序列,用于欺诈检测、订单超时、用户行为分析、物联网监控等高频业务场景。
工程视角快速跑通 Flink SQL:提供现代依赖(不再使用 blink 规划器)、最小可运行示例(MRE)、Table API 与 SQL 互操作;输出使用 toChangelogStream 验证变更流。附窗口与时态表示例、常见错误速查与版本兼容提示,适合实时 ETL/分析入门。
面向高并发、低延迟 OLAP 场景,本文从工程视角讲清 ClickHouse 的底层优势(列式+压缩+向量化、MergeTree 家族)、适用与不适用边界、数据建模基本法以及近似统计的性能-精度权衡。
官方推荐的 keyring + signed-by 在 Ubuntu 安装 ClickHouse,并用 systemd 启动与自检;提供单机最小示例(建库建表/插入/查询)。集群部分给出 ClickHouse Keeper 三节点最小配置与三步自检,建议用 config.d/users.d 管理配置、password_sha256_hex 替代明文、限制远程网段并启用 TLS。
三节点(h121/122/123)为例,先完成集群连通性自检:system.clusters 校验 → ON CLUSTER 创建 ReplicatedMergeTree/Distributed → 分布式写读与迷你压测,确保复制与路由正常;随后用可复制示例梳理 ClickHouse 常用数据类型:Int/Float、Decimal(加减取大、乘取和、除取被除)、String/FixedString、UUID、Enum8/16、Array、Tuple、Date/Date32/DateTime64 及布尔替代
梳理 ClickHouse 表引擎:TinyLog、Log、StripeLog、Memory、Merge 的原理、适用与坑点,并给出可复制的最小可运行示例与并发/文件核验脚本。通过选型决策表与 Do&Don't,帮你在小表、一次性写入、临时日志、多表聚读等场景取舍。
深入拆解 Kafka 三大核心组件的工作原理:Producer 分区策略与 ACK 机制、Broker 的 Leader/Follower 架构、Consumer Group 的分区分配与偏移量管理。
介绍 Kafka 2.x 与 3.x 的核心差异,详细讲解集群安装步骤、ZooKeeper 配置、Broker 参数设置,以及 KRaft 模式如何彻底替代 ZooKeeper 依赖。
ClickHouse MergeTree 的关键机制:批量写入形成 part、后台合并(Compact/Wide 两种 part 形态)、ORDER BY 即稀疏主索引、index_granularity 标记密度与 primary.idx 工作原理,并对比 minmax/set/ngrambf_v1/tokenbf_v1 跳数索引的适用边界。提供一套可复制的观测与调优命令。
ClickHouse MergeTree 的存储与查询路径:列式文件(*.bin)、稀疏主键索引(primary.idx)、标记文件(.mrk/.mrk2)与 index_granularity 如何协同,实现分区裁剪与跳读,显著降低读放大并加速聚合查询。提供可复制 DDL、造数脚本与 clickhouse-compressor 统计方法。
覆盖 Kafka 日常运维的 Shell 命令(主题管理、消息收发)与 Java 客户端编程(Producer/Consumer 完整代码),包含关键配置参数说明和 ConsumerRebalanceListener 使用。
详解如何在 Spring Boot 项目中集成 Kafka,包括依赖配置、KafkaTemplate 同步/异步发送消息、@KafkaListener 消费消息的完整实践。
ClickHouse 两大轻聚合引擎 ReplacingMergeTree 与 SummingMergeTree,结合最小可运行示例(MRE)与对照查询,解释为何去重/求和仅在合并阶段生效,以及 SELECT … FINAL 与 OPTIMIZE FINAL 的正确使用时机与代价。文中强调 ORDER BY 作为匹配键、分区边界不跨区、Replacing 版本列取最大、Summing 非数值列保留首值等关键规则,给出基线对比与性能指标、报错速查卡、回滚与数据修复脚本,并提供以物化视图替代常态 FINAL。
ClickHouse 外部数据源引擎的最小可行方案:ENGINE=HDFS、ENGINE=MySQL、ENGINE=Kafka 的 DDL 模板、关键参数与读写链路。示范 Kafka→Materialized View→MergeTree 的实时落地,说明 HDFS 以读取为主,MySQL 写入的 replace_query/on_duplicate_clause 风险点。
ClickHouse 副本全链路:ZK/Keeper 准备、macros 宏配置、集群 ON CLUSTER 一致建表、写入去重与复制机制、system.* 视图健康检查、insert_quorum 一致性、Distributed 跨分片查询;提供性能与延迟观测项、replication_queue 积压定位、典型报错处理(Not connected、Replica already exists、Too many parts)与标准回滚步骤。含可直接执行的 SQL 与配置片段。
ClickHouse 分片×副本×Distributed 架构:基于 ReplicatedMergeTree + Distributed,在 3 分片×2 副本 集群上用 ON CLUSTER 一键建表,启用 ClickHouse Keeper/ZooKeeper 协调;给出 insert_quorum、prefer_localhost_replica、load_balancing 等关键参数最佳实践与 DDL/配置脚本/校验 SQL。同时提供 性能对比(TPS/P95)、system. 诊断查询。
ClickHouse 初学与运维实战,基于真实集群(h121/h122/h123)演示从连接到建库建表的完整流程,系统讲解 MergeTree 的 ORDER BY/PRIMARY KEY/PARTITION BY/TTL 关键点;提供 Memory/分区表/临时表与视图(普通/物化/POPULATE)示例。围绕运维高频动作,整理 ALTER(新增列、类型修改、备注、删除、重命名/迁库)与分区生命周期操作(DROP/CLEAR/REPLACE/DETACH/ATTACH),并通过 system.parts 监控
深入解析 Kafka Producer 初始化、消息拦截、序列化、分区路由、缓冲批量发送、ACK 确认等完整发送链路,并给出关键参数的调优建议。
深入讲解 Kafka 消息序列化原理与分区路由策略,包含自定义 Serializer 和 Partitioner 的完整代码实现,帮助掌握消息精准路由与高效传输。
Apache Kudu 在 2025 年的版本与生态集成:最新 Kudu 1.18.0(2025/07)上线,带来分段 LRU Block Cache 与基于 RocksDB 的元数据存储(实验特性),在保证 Raft 副本一致性的同时提升热点抗抖与可扩展性;与 Impala/HMS 的集成用于低延迟 SQL;Spark 侧使用 kudu-spark3_2.12:1.18.0 对接 Spark 3.5;Flink 侧提供外部化 Kudu 连接器 2.0.0,支持 Flink 1.19/1.20。
Apache Kudu 的 Master/TabletServer 架构、RowSet(MemRowSet/DiskRowSet) 写读路径、MVCC、以及 Raft 共识 在副本与故障切换中的作用;并给出 Range/Hash 多级分区 的建模思路与容量/并发权衡。2025 年最新稳定版 Kudu 1.18.0 已发布(含分段 LRU Block Cache、嵌入式 RocksDB 元数据等改进),建议在 Hadoop/Impala 生态中评估升级窗口与兼容性。
Apache Kudu 在 Ubuntu 22.04 云主机上的 Docker Compose 快速部署方案,覆盖 Kudu Master 与 Tablet Server 组件、KUDU_MASTERS/MASTER_ARGS/TSERVER_ARGS 关键参数、rpc_advertised_addresses 与 webserver_port(如 8051)配置,以及官方 quickstart.yml 的 3 Master / 4~5 TServer 拓扑。文中强调 NTP 时钟同步、文件系统 Hole Punching 支持等关键配置。
Java 客户端(kudu-client 1.4.0)连接 Apache Kudu 多 Master(示例端口 7051/7151/7251),完成建表、插入、查询、更新、删除全流程,并对 KuduSession 刷新模式(AUTO_FLUSH_SYNC / AUTO_FLUSH_BACKGROUND / MANUAL_FLUSH)的行为差异进行要点提示。
Kudu 的完整可运行示例,基于 Flink 1.11.1(Scala 2.12)/Java 11 与 kudu-client 1.17.0(2025 实测)。通过 RichSinkFunction 自定义下沉器,演示从 DataStream 映射到 Kudu Insert 的全过程:建表(INT32 主键 id、STRING name、INT32 age,哈希分区 3)、会话配置(AUTO_FLUSH_BACKGROUND)、作业启动与验证。文中同时点出工程侧关键坑:逐列 apply 导致缺列/重复提交
讲解 Kafka 0.10 引入的 Producer 拦截器机制,包括 onSend 和 onAcknowledgement 两个拦截点的作用、拦截器链的执行顺序与错误隔离,以及自定义拦截器的完整实现。
详解 Kafka Consumer Group 的消费模型、分区分配策略、心跳保活机制,以及 session.timeout.ms、heartbeat.interval.ms、max.poll.interval.ms 等关键参数的调优实践。
Apache Druid 的实时 OLAP 实战:适合以时间为主键的事件明细、亚秒级聚合与高并发自助分析。Druid 采用列式存储与时间分区,核心组件包括 Broker、Historical、MiddleManager、Coordinator、Overlord、Router,支持流式与批量摄取(Kafka/HDFS 等),并提供 SQL/JSON 查询接口,擅长快速聚合+交互式探索。当前最新稳定版为 34.0.0(2025-08-11),建议结合自动 Compaction 与查询上下文参数进行性能与并发优化。
Apache Druid 30.0.0,面向单机快速验证与工程落地,系统梳理 Druid 架构(Coordinator、Historical、Broker、Ingestion、Deep Storage),给出下载解压、环境变量、single-server 各档位(nano-quickstart/micro/small/medium/large/xlarge)启动命令与目录路径。覆盖控制台 8888 访问、ZooKeeper 2181 端口冲突排查、JVM 内存与启动参数要点,并强调列式存储、时间分区与索引对查询性能的优化作用。
Apache Druid 30.0.0 的可落地方案,覆盖 MySQL 元数据存储(mysql-connector-java 8.0.19)、HDFS 深度存储与 HDFS 上的 indexing-logs、以及 Kafka 实时摄取的混部实践。重点解释 Druid 角色划分(Coordinator/Overlord、Broker/Router、Historical、MiddleManager)、ZooKeeper 集群配置与 common.runtime.properties 关键项;给出 JVM 低配调优参数。
三台节点上落地 Apache Druid 30.0.0 的低内存集群实践:给出 Broker/Historical/Router 的 JVM 参数与 runtime.properties 关键项,解释堆外内存与处理缓冲区的配比关系。
深入解析 Kafka 的 Topic、Partition、Consumer Group 核心机制,涵盖自定义反序列化、偏移量管理与重平衡优化配置,帮助构建高吞吐消息消费系统。
全面介绍 Kafka Topic 的运维管理方法,包括 kafka-topics.sh 命令操作、副本均衡分配算法原理,以及 KafkaAdminClient Java API 的核心用法。
本文介绍Apache Druid实时接入Kafka的完整实战,以网络流量JSON为例,通过Druid控制台的Streaming/Kafka向导完成数据接入、解析时间列、设定维度与指标,并使用SQL验证结果。
Apache Druid 在 0.13.0~当前(2025)的组件职责与部署要点:Coordinator 负责历史节点 Segment 的均衡/复制与生命周期管理;Overlord 调度摄入任务到 MiddleManager/Peon;Historical 提供大部分 Segment 查询;Broker 聚合并返回结果;Router 可选作统一网关;外部依赖包括 ZooKeeper、Metadata Storage(MySQL/PostgreSQL)与 Deep Storage(HDFS/对象存储/本地)。
Apache Druid 的数据存储与高性能查询路径:从 DataSource/Chunk/Segment 的分层,到列式存储、Roll-up 预聚合、Bitmap 索引、mmap 文件映射、查询多级缓存的协同;并结合 Overlord/MiddleManager/Peon 的索引服务与 Kafka/Hadoop 深度存储场景,给出工程化落地要点与排错思路。
Scala Kafka Producer 将订单/点击数据写入 Kafka Topic(示例 topic: druid2),在 Druid 中通过 Kafka Indexing Service 进行连续摄取。由于原始记录为嵌套 JSON(orders 内含 products 数组),先进行 JSON 拉平预处理,随后在 Druid 设置正确的 timestampSpec,禁用 Rollup,并以 SQL 执行核心指标:订单总数、用户总数、按状态/支付方式聚合、订单金额 TopN 等。
深入剖析 Kafka 副本机制的工作原理,包括 ISR 同步节点集合的维护逻辑、Leader 选举流程,以及 unclean 选举在一致性与可用性之间的权衡。
系统讲解 Kafka 如何通过幂等生产者和事务机制实现精确一次(Exactly-Once)语义,覆盖 PID/序列号原理、跨分区事务配置与端到端 EOS 实现方案。
深入分析 Kafka 的日志存储架构,包括 LogSegment 分段设计、稀疏偏移量索引与时间戳索引的工作原理、消息查找流程,以及日志保留与清理策略配置。
深入剖析 Kafka 实现高吞吐的三大 I/O 技术:sendfile 零拷贝、mmap 内存映射与页缓存顺序写入,揭秘每秒百万级消息处理背后的内核级优化。
Apache Kylin 的背景、演进与工程实践,聚焦 MOLAP 方案在海量数据分析中的落地路径。核心关键词:Apache Kylin、MOLAP、Cube、Cuboid、Hive、Kafka、HBase、Spark、Flink、JDBC、ODBC、REST、星型模型、雪花模型、实时 OLAP、增量构建。按时间线梳理 2014–2019 的版本能力(V1.5 Kafka、V1.6 近实时、V2.0 雪花模型与 Spark、V2.4 Kafka+Hive JOIN、V3.0 实时 OLAP)
本文详细记录了在 Hadoop 2.9.2、Hive 2.3.9、HBase 1.3.1、Spark 2.4.5(without-hadoop,Scala 2.12)与三节点 ZooKeeper/YARN 环境下部署 Apache Kylin 3.1.1 的完整过程。核心要点包括:为 Kylin 补齐 core-site.xml/hdfs-site.xml/hbase-site.xml/hive-site.xml/spark-defaults.conf 软链;在 kylin.sh 中显式设置 HADOOP_HOME/HIVE_HOME/HBASE_HOME/SPARK_HOME。
OLAP 示例:用 Python 生成维度与事实数据,经 Hive(wzk_kylin)装载后,在 Kylin 侧设计 Cube(维度/度量/Cuboid),并给出分组聚合 SQL 的验证结果。文章围绕 Kylin 的核心机制——预计算多维 Cuboid 与裁剪(Aggregation Group),解释如何在查询时快速命中已计算的结果,从而替代代价昂贵的实时聚合。并提示在实时 OLAP 场景下,Kylin 4.x 可通过 Kafka 接入流式数据,与批数据合并分析。
Apache Kylin(3.x/4.x)Cube 的搭建与优化:从 DataSource → Model → Cube 的完整流程,覆盖维度建模、度量设计、Cuboid 预计算、Aggregation Group 剪枝、增量构建与查询命中。结合 HBase 列式存储与 Snappy/LZO 压缩,演示在 Hadoop/Hive 环境下的 MapReduce 构建,并说明 Kylin 4.0 的实时 OLAP(Kafka)思路与适配要点。
系统梳理大数据处理引擎从 MapReduce 到 Spark 再到 Flink 的演进脉络,解析 Spark 内存计算模型、统一生态与核心组件,帮助快速建立 Spark 全局认知。
手把手搭建 Apache Spark 分布式计算环境,涵盖下载解压、环境变量配置、slaves/spark-env.sh 核心配置文件调整,以及三节点集群分发启动的完整流程。
Apache Kylin 4.0 的 Cube 建模与查询加速方法:围绕事实表与维度表完成星型建模,设计维度与度量,利用 Aggregation Group、层级维度、联合维度、必要维度等策略减少 Cuboid 组合,降低构建与存储开销;在查询侧通过 Cuboid 匹配实现秒级 OLAP。本文给出按日期/区域/产品/渠道的建模与SQL示例,说明离线批构建在 Hive+Spark+HBase 组合下的验证结果,并概览 Kafka 驱动的实时 OLAP。附带错误速查卡。
以 Hive 分区表的日期字段作为 Partition Date Column,将 Cube 拆分为多个 Segment,按区间增量构建,避免对历史数据的重复计算;并对比全量构建与增量构建在查询路径上的差异。
Apache Kylin Segment合并实战教程,涵盖手动MERGE Job流程、连续Segment要求、Auto Merge多级阈值策略、Retention Threshold清理逻辑、删除流程(Disable→Delete)及JDBC连接查询示例。
Cuboid 剪枝优化:当维度较多时,Cuboid 数量指数级增长,导致构建时间长与存储膨胀。工程化做法:通过 CubeStatsReader 命令核查已物化 Cuboid 的行数/体积与 Shrink 比,结合 Web GUI 的 Cube Size 与 Expansion Rate(膨胀率)判断是否需要剪枝。
覆盖 Aggregation Group(聚合组)、Mandatory Dimension(强制维度)、Hierarchy(层级维度)、Joint(联合维度) 的使用取舍,并结合 CubeStatsReader 的精度/稀疏度读数与 RowKey/HBase 存储模型,说明字典编码、RowKey 顺序、ShardBy 分片对构建与查询性能的影响。
Kafka→Kylin 的实时 OLAP 链路,面向 2025 年常见业务(电商交易、用户行为、IoT 监控)提供分钟级聚合查询。
全面解析 Spark 核心数据抽象 RDD 的五大关键特征(分区、计算函数、依赖关系、分区器、优先位置),以及惰性求值、容错机制和窄/宽依赖的核心原理。
详解 Spark RDD 的三种创建方式(parallelize、textFile、从已有 RDD 转换),以及 map、filter、flatMap、groupBy、sortBy 等常用 Transformation 算子的使用与惰性求值原理。
文章介绍 Elasticsearch 8.x、Logstash 8.x、Kibana 8.x 的核心能力与常见实践,覆盖集中式日志系统的采集、传输、索引、分片/副本、查询 DSL、聚合与 ILM 生命周期管理等关键环节。
Elasticsearch是一个分布式全文搜索引擎,支持单节点模式(Single-Node Model)和集群模式(Cluster Model)部署,一般来说,小公司的业务场景往往使用Single-Node Mode部署即可。
Elasticsearch(ES 7.x/8.x)最小示例:创建索引、插入文档、按 ID 查询、更新与 _search 搜索流程,配合返回样例与截图,帮助读者在 3–10 分钟内完成「索引/文档 CRUD」跑通。
Elasticsearch 7.3.0 三节点集群部署实战教程,涵盖目录创建与权限设置、系统参数配置(vm.max_map_count、limits.conf)、JVM内存调整、elasticsearch.yml集群配置、分发与启动流程,以及常见错误排查清单。
介绍 Elasticsearch-Head 插件与 Kibana 7.3.0 的安装与连通性要点,涵盖 Chrome 扩展快速接入、ES 集群健康与分片可视化、REST API 调试、Kibana Dashboard/Discover 使用入口,以及生产场景下的 CORS、安全认证与端口冲突等常见问题排查。
Elasticsearch 索引创建、存在性判断(单/多/全量)、打开/关闭/删除与健康度排查,以及 IK 分词器的安装、ik_max_word / ik_smart 分析与远程扩展词典/停用词的 Nginx 托管方案。
本文详细介绍 Elasticsearch 7.x/8.x mapping 配置与文档 CRUD 操作,包括索引/字段映射创建、映射属性(type、index、store、analyzer)、文档创建、查询、全量/局部更新、按 ID 或条件删除。
深入讲解 Elasticsearch 7.3 中查询 DSL 核心用法,重点拆解 match、match_phrase、query_string、multi_match 等全文检索语句在真实业务中的差异和坑位。
深入解析 Spark 集群核心组件 Driver、Cluster Manager、Executor 的职责,对比 Standalone、YARN、Kubernetes 部署模式,并介绍静态与动态资源分配策略。
本文演示 Elasticsearch term-level queries 包括 term、terms、range、exists、prefix、regexp、fuzzy、ids 查询,以及 bool 复合查询。涵盖创建 book 索引、插入示例数据、各种查询 DSL 示例与执行结果。
本文介绍 Filter DSL 与 query 的区别:Filter DSL 不计算相关度评分,专门优化过滤场景的执行效率。涵盖 bool + filter + range 数值/日期范围过滤、基于 _score 排序、单/多字段排序、分页、highlight 高亮配置以及批量操作(_mget、_bulk)。
覆盖指标聚合 Metrics Aggregations 与桶聚合 Bucket Aggregations 的完整实践,适用于 2025 年常见的 Elasticsearch 7.x / 8.x 版本。文章先从聚合语法入手,解释 aggs/aggregations 节点结构,然后通过 max、sum、avg、value_count、cardinality、stats、extended_stats、percentiles、percentile_ranks 等案例,演示如何在 ES 中完成最大值、最小值、求和等统计功能。
elasticsearch-rest-high-level-client 实现索引和文档的增删改查,包括:通过 JSON 与 XContentBuilder 两种方式创建索引、配置分片与副本、删除索引、插入单条文档、按 ID 查询文档以及使用 match_all 查询全部数据。
全面介绍 Spark RDD 的 Action 操作,涵盖数据收集、统计聚合、元素检索、存储写出等类别,并详解 Key-Value RDD 的 groupByKey、reduceByKey、join 等核心算子。
文章解析 Elasticsearch 倒排索引原理,对比正向索引与倒排索引差异,涵盖分词、Term Dictionary、Posting List 等核心概念。详述文档写入的分片路由规则(hash(routing) % number_of_primary_shards)、主副本写入复制流程,以及 Query 阶段与 Fetch 阶段协作方式。
文章详细解析 Elasticsearch 近实时搜索的核心机制,包括 Lucene Segment、Memory Buffer、File System Cache、Refresh、Flush 及 Translog(事务日志)等核心组件,解释为何 ES 只能做到"近实时搜索",以及数据持久化提交的流程。涵盖 refresh_interval、flush、translog.durability 等关键参数的调优思路。
解释 refresh 导致小段增多、段合并如何在后台把小段并入大段并清理已删除文档,为什么段过多会带来句柄/内存/CPU与查询开销。工程侧给出 merge 相关配置点:merge scheduler 线程数、merge policy(floor_segment、max_merge_at_once、max_merged_segment 等)的含义与取舍;并补充强制合并 _forcemerge 在日志归档、只读索引场景下的使用边界与性能风险。后半部分拆解 ES 数据目录:nodes/indices 下 UUID 对应结构。
文章详细解析 Elasticsearch 倒排索引的核心数据结构:Terms Dictionary(词典)、Posting List(倒排表)、FST(有限状态转换器)与 SkipList(跳表)在查询阶段如何加速 Term 定位与 postings 合并。结合 Lucene 分段不可变+flush/merge 的写入模型,解释 ES 近实时(NRT)背后的代价与收益,并用 .tim/.tip/.doc 等索引文件后缀把概念—落盘—执行路径串起来。
Elasticsearch 并发冲突(库存扣减的读-改-写)拆解写覆盖成因,并用 ES 的乐观并发控制(OCC)给出工程解法:通过 if_seq_no 与 if_primary_term 让更新具备条件写入,当文档已被其他请求修改时返回 version_conflict_engine_exception(HTTP 409)
索引时生成的磁盘列式数据结构,面向排序、聚合与脚本取值优化;多数支持类型默认开启,text 字段默认不提供 doc values,需通过 keyword 子字段或启用 fielddata 才能聚合/排序。
Logstash 7 入门教程,涵盖 stdin/file 采集、sincedb 机制与 start_position 生效条件,附带错误速查表
Logstash Input 插件对比,拆解 JDBC Input 与 Syslog 采集链路的技术差异、适用场景与关键配置。JDBC 通过 JDBC 驱动连接 MySQL 等关系型数据库,结合 sql_last_value、tracking_column、last_run_metadata_path 实现增量同步,适用于数据库到 Elasticsearch 的数据导入与 ETL。
使用 Spark + Scala 和 Spark + Java 两种方式实现分布式 WordCount,详解 RDD 五步处理流程、Maven 项目配置和 spark-submit 提交命令。
通过两个经典案例深入 Spark RDD 编程:蒙特卡洛方法分布式估算 π 值,以及两种思路实现社交网络共同好友分析,对比笛卡尔积与数据变换的性能差异。
文章讲解在 Logstash 7.3.0 环境下,用 grok 从控制台 stdin 与 Nginx 访问日志中提取结构化字段(IP、time_local、method、request、status 等),并通过 stdout { codec => rubydebug } 快速验证解析效果。
Logstash Output 插件(Logstash 7.3.0)实战教程,涵盖 stdout(rubydebug)用于联调验数、file 输出用于本地归档、Elasticsearch 输出用于检索分析。重点讲解 bulk 批量提交、retry 重试、负载均衡、多输出并行、条件路由 if/else,并给出生产常见组合与高频故障定位路径。
通过 Nginx 配置 log_format json 输出结构化 access_log(包含 @timestamp、request_time、status、request_uri、ua 等字段),在多节点(h121/h122/h123)启动 Zookeeper 与 Kafka 做日志缓冲与解耦,再启动 Elasticsearch 7.3.0 存储检索,最后用 Kibana 7.3.0 完成检索与可视化。
Filebeat 采集 Nginx access.log 写入 Kafka,Logstash 从 Kafka 消费后按字段(app/type)条件解析 message 内嵌 JSON,叠加 GeoIP(GeoLite2-City.mmdb)生成坐标字段并写入 Elasticsearch 索引(logstash-%{type}-%{+YYYY.MM.dd}),再交给 Kibana 展示。
Master / Data / Coordinating 三类节点职责与生产落地的角色隔离策略,给出容量规划的推算抓手(JVM Heap 30–32GB 上限、冷热数据与磁盘/IO 约束、水平扩容路径),并将分片(shard)与副本(replica)作为"性能与可靠性"的核心旋钮
DataX(DataX 3.0)是阿里体系广泛使用并开源的离线数据同步/数据集成工具,面向企业级异构数据源同步(MySQL、Oracle、SQLServer、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等)。它以 Framework + Reader/Writer 插件模型抽象"读—传—写",新增数据源主要通过插件接入而不是重连全链路
实现一个完整的生产级词频统计流水线:小写转换、标点去除、停用词过滤、词频计数,最终通过 foreachPartition 高效写入 MySQL,对比逐条插入与分区批量写入的性能差异。
深入讲解 Spark Driver-Executor 进程通信、Java/Kryo 序列化选型、闭包序列化问题排查,以及 RDD 依赖、Stage 划分和持久化存储级别。
Apache Tez(示例版本 Tez 0.9.x)如何在 Hadoop2/YARN 上作为执行引擎替代 MapReduce,为 Hive on Tez、Pig on Tez 提供 DAG(有向无环图)执行模型。核心配置围绕 tez-site.xml 的 tez.lib.uris(将 Tez 包上传到 HDFS 并让集群可见)、客户端 HADOOP_CLASSPATH/TEZ_JARS、以及 Hive 侧 hive.execution.engine=tez 的单次/永久切换
2025年仍最常用的机器学习概念框架:监督学习(分类/回归)、无监督学习(聚类/降维)、半监督学习与强化学习。重点解释输入空间、输出空间与特征空间的关系,以及过拟合/欠拟合在训练集与交叉验证集上的典型表现与治理思路
KNN/K近邻算法(K-Nearest Neighbors, KNN):从欧氏距离计算、距离排序、TopK投票到函数封装,给出可复现的Python代码与matplotlib可视化。重点解释K值对模型偏差/方差的影响、噪声数据下为何需要更大的K、以及高维数据下距离度量与特征缩放对结果稳定性的决定作用
从统一 API(fit/predict/transform/score)到 kneighbors 找出测试样本的 K 个最近邻,再到用学习曲线/参数曲线选择 n_neighbors(K 值)。重点说明:KNN 对数据尺度敏感,未标准化会导致距离度量失真;而仅靠一次 train_test_split 的最高分来定"最佳 K"在不同 random_state 下会波动,需用 StratifiedKFold 交叉验证配合 GridSearchCV/RandomizedSearchCV 才能稳定选参
训练/测试随机划分会导致评估指标不稳定,并给出工程化解法:K折交叉验证(K-Fold Cross Validation)。通过sklearn的cross_val_score在训练集内部做多次划分,输出每折得分数组,进一步计算均值(mean)与方差(var),用"高均值+低方差"筛选更稳健的KNN超参数K
scikit-learn机器学习训练流程中,KNN这类距离模型对"量纲不统一"极其敏感:欧式距离的平方和会让数值尺度更大的特征主导距离,从而显著拖垮分类效果。Min-Max归一化通过"减最小值再除以极差"把特征压缩到[0,1],是KNN的常用预处理。但工程上最容易踩坑的是数据泄露:把全量X先归一化再做train/test切分或交叉验证,会把测试集分布信息注入训练过程,导致评估虚高
详解 Spark Checkpoint 的执行流程、与 persist/cache 的核心区别、分区器策略,以及在迭代算法和长依赖链场景下的最佳使用实践。
详解 Spark 广播变量的工作原理、配置参数与最佳实践,以及利用广播实现 MapSideJoin 替代 shuffle join 的性能优化方案。
决策树模型(Decision Tree)面向分类任务系统梳理:树的三类节点(根节点/内部节点/叶节点)、从根到叶的递归分裂流程,以及"分而治之"的规则生成机制。理论层面给出决策树的条件概率分布视角:特征空间被划分为互不重叠区域 R_j,叶节点估计 P(Y|X∈R_j),预测时用 MAP 选择概率最大的类别
决策树信息增益(Information Gain)展开,先用信息熵(Entropy)解释不纯度,再说明为何在节点切分时要最大化父节点熵与子节点熵之差:在 Ent(D) 固定的前提下,最大化 Gain 等价于最小化分支不纯度的加权平均,从而得到局部最优切分
"分裂"到"剪枝"的完整链路,解释其为何通常采用贪心算法形成"局部最优",以及不同算法在分裂准则上的差异:ID3/C4.5偏信息增益(Information Gain),但信息增益会偏向取值多的特征,因此引入信息增益比/增益率(Gain Ratio)做修正;CART常用二叉递归划分,分类树用基尼系数(Gini)度量不纯度,回归树常用方差/均方误差类指标。
DecisionTreeClassifier 在 load_wine 数据集完成从数据拆分、建模评估到决策树可视化的完整流程(2026版)。重点解释 criterion 的选择:gini(基尼不纯度)、entropy 与 log_loss(信息增益/香农信息)在分裂质量度量上的差异,以及 splitter=best/random、random_state 对树结构稳定性的影响。可视化部分通过 sklearn.tree.export_graphviz 导出 DOT,并用 Python graphviz 包渲染
scikit-learn 决策树剪枝(预剪枝)在工程落地中的常用参数:max_depth、min_samples_leaf、min_samples_split、max_features、min_impurity_decrease 与 class_weight,解释它们如何影响 DecisionTreeClassifier 的过拟合、树规模与泛化能力,并给出用学习曲线(score vs 超参数)确定近似最优值的操作路径。重点提示版本差异:min_impurity_decrease 自 0.19 引入,用于替代_决策树 样本不均衡
混淆矩阵(TP、FP、FN、TN)建立统一口径,解释 Accuracy、Precision(查准率)、Recall(查全率/敏感度)、F1 Measure 的业务含义:Precision 对应"误伤多数类"的成本,Recall 对应"捕获少数类"的能力,F1 用调和平均惩罚短板;并给出 ROC 曲线的坐标含义(FPR 假正率、TPR 真正率/召回率)与 AUC 的使用边界。工程落地以 scikit-learn 1.8.0(2025-12 发布)为准,覆盖 sklearn.metrics.confusion
全面讲解 Spark Standalone 集群的四大核心组件、应用提交流程、SparkContext 内部架构,以及 Shuffle 演进历史和 RDD 优化策略。
系统介绍 SparkSQL 的演进历史、核心抽象 DataFrame/Dataset、Catalyst 优化器原理,以及与 Hive/HDFS 多数据源集成的实战用法。
线性回归(Linear Regression)的核心链路:用矩阵形式统一表示预测函数 y=Xw,将参数向量 w 作为唯一未知量;以损失函数刻画拟合误差,重点解释 SSE(残差平方和/误差平方和)作为回归任务的典型优化目标;通过最小二乘法(Least Squares)把"让 SSE 最小"转化为对参数求导并令一阶导为 0,从一元线性回归的直观拟合过渡到多元线性回归的矩阵推导与求解框架(正规方程形式)。内容覆盖:线性回归的机器学习表示、损失函数与优化目标、最小二乘法、SSE 推导、多元线性回归矩阵求解。
pandas DataFrame 与 NumPy 矩阵乘法手写多元线性回归(线性回归实现)。核心思路是将特征矩阵 X(包含一列全 1 作为截距)与标签 y 组成正规方程,通过 w=(X^TX)^{-1}X^Ty 直接求解参数权重。实现中重点检查 X^TX 是否满秩:若行列式为 0 则矩阵奇异,无法求逆,需要改用伪逆或最小二乘。评估部分给出残差平方和 SSE、均方误差 MSE、均方根误差 RMSE,以及判定系数 R²(1-\frac{SSE}{SST})的计算方式,并用 matplotlib 将预测直线与原始数据点可视化展示。
scikit-learn 进行线性回归时,如何应对最小二乘法中的多重共线性问题。多重共线性可能导致回归模型的不稳定性,表现为参数估计值的不稳定、方差增大以及解的不唯一。文章详细介绍了多重共线性的成因及其影响,并提出了几种改进的回归方法,如岭回归、Lasso回归等。
岭回归(Ridge Regression)和Lasso回归(Lasso)是两种常用的线性回归正则化方法,用于解决机器学习中的过拟合和多重共线性问题。岭回归通过L2正则化项压缩回归系数,但不将其归零,适合特征间高度相关的场景;Lasso回归则采用L1正则化,有助于特征选择,将不重要的特征系数压缩为零,特别适用于高维数据。选择两者时需依据应用场景:岭回归适用于避免过拟合,Lasso则有助于模型解释性与特征筛选。实际应用中,交叉验证用于选择最优正则化参数λ,Elastic Net结合两者优点进行折中。
逻辑回归(Logistic Regression, LR)是机器学习中重要的分类算法,广泛应用于二元分类任务,如情感分析、疾病预测、垃圾邮件检测等场景。尽管其名字中有"回归"二字,实则是一种分类方法。LR通过对数几率函数(Logistic Function)将预测值映射到0到1之间,计算样本属于某个类别的概率。为了优化LR模型,常用的算法是梯度下降法,它通过不断调整模型参数以最小化损失函数,找到最优解。在实际应用中,梯度下降需要调整步长、初始值,并进行标准化处理以提高收敛速度。本文深入探讨了逻辑回归的原理、...
但随着C的逐渐变大,正则化的强度越来越小,模型在训练集和测试集上表现呈现了上升趋势,直到C=0.8左右,训练集上的表现依然走高,但模型在未知数据集上的表现就开始下跌,这时候就是出现了过拟合。正则化参数,LogisticRegression默认带了正则化项,penalty参数可选择的值有1和2,分别对应L1的正则化和L2的正则化,默认是L2的正则化。可以看出,当我们选择L1正则化的时候,许多特征的参数都被设置了0,这些特征在真正建模的时候,就不会出现在我们的模型当中了,而L2正则化是对所有特征都给出了参数。
深入对比 Spark 三大数据抽象 RDD、DataFrame、Dataset 的特性与适用场景,介绍 SparkSession 统一入口,并演示各抽象之间的相互转换方法。
系统梳理 SparkSQL 的 Transformation 和 Action 算子,涵盖 select、filter、join、groupBy、union 等操作,并通过实际测试用例演示其用法与性能优化技巧。
文章浏览阅读4.4k次,点赞10次,收藏19次。Scikit-Learn 中使用逻辑回归时,max_iter 控制最大迭代次数,影响模型的收敛速度和精度。如果训练未收敛,可能会收到警告提示需要增大 max_iter。不过,过高的迭代次数可能导致过拟合,影响测试集的表现。在二元逻辑回归中,multi_class 参数的选择也至关重要。OvR(One-vs-Rest)适用于大多数数据集,而 multinomial(多类)则适合需要更精确分类的场景。
文章浏览阅读5.8k次,点赞39次,收藏17次。聚类算法 K-Means,梳理监督学习与无监督学习的差异(是否需要标签 Y),并给出聚类在客户细分、RFM 分析、图像/语音/视频压缩、异常检测等工程场景的落地路径。重点解释 K-Means 的关键概念「簇与质心」、迭代过程(分配样本→更新质心→收敛)、以及评价目标簇内误差平方和 Inertia。同时给出 K 值选择的工程方法(肘部法、轮廓系数、业务约束),并强调 K-Means 对初始化、尺度/量纲、离群点与非凸簇形状敏感。
文章浏览阅读4.5k次,点赞14次,收藏22次。Python K-Means 聚类实现:基于 NumPy 广播计算欧式距离平方和(distEclud),在特征范围内均匀采样初始化质心(randCent),并使用 Pandas 统一容器 result_set 记录「最短距离/当前簇/上次簇」,通过簇编号是否变化判断收敛,最终输出 centroids 与分簇结果。示例数据采用 Iris(鸢尾花)数据集(iris.txt)。工程化落地时重点关注:特征量纲统一(标准化/归一化)、随机种子与最大迭代次数、空簇导致质心数量缩减、groupby().mean()
文章浏览阅读5.4k次,点赞22次,收藏18次。K-Means 聚类给出一套「可验证、可复现、可排错」的工程化流程:先用二维 testSet 数据集做算法验证(pd.read_table 读取、追加虚拟标签列、plt.scatter 可视化、绘制质心与聚类结果),再切换到 sklearn.cluster.KMeans 进行参数级理解与对照。核心关键词覆盖:K-Means、sklearn KMeans、n_clusters、init、n_init、max_iter、tol、labels_、predict、fit_predict、make_blobs、聚类
文章浏览阅读6.1k次,点赞30次,收藏32次。scikit-learn(sklearn)KMeans(2026)解释三个最常用对象:cluster_centers_(聚类中心)、inertia_(簇内平方和/Within-Cluster Sum of Squares)以及聚类评估指标 silhouette_score / silhouette_samples(轮廓系数,范围 [-1, 1])。inertia_随簇数 K 增大通常单调下降,适合做「肘部法则」参考,但不具备可比上界且强依赖特征尺度与维度;因此在选 K 时,更工程化的做法是:对 K 进行网格搜索并结合轮廓系数等指标综合评估。sklearn.cluster
文章浏览阅读5.2k次,点赞32次,收藏26次。KMeans 选 n_clusters 方法:在候选簇数(如 2/4/6/8)上计算 silhouette_score 与 silhouette_samples,结合轮廓系数分布图与聚类散点图判断最优 k,并解释「轮廓系数均值不等于最佳」的典型情况(簇内分裂、簇间重叠、离群点拉低)。同时梳理 KMeans 初始化相关参数:init(推荐默认 k-means++)、n_init(多次初始化取 inertia 最优)与 random_state(复现用)。重点指出 scikit-learn 1.4+(2024 年)起 n_init 默认变为 auto 的重大变化,结合实战代码与错误速查表,帮助读者避坑。
介绍 SparkSQL 的核心使用方式,包括 DataFrame API、SQL 查询语法、lateral view explode 等高级功能,以及如何通过 enableHiveSupport 集成 Hive 元数据与读写 Hive 表。
深入解析 SparkSQL 的五种 Join 执行策略(BHJ、SHJ、SMJ、Cartesian、BNLJ)的选择条件与适用场景,以及 Catalyst 优化器从 SQL 解析到代码生成的完整处理流程。
文章浏览阅读4.4k次,点赞15次,收藏25次。Prometheus 2.53.2(2025/2026 仍常见在存量环境)给出一套可复用的落地流程:在监控机下载并解压二进制,编写 prometheus.yml 完成 scrape_interval 与多 scrape_configs 目标配置,拉取多台服务器 node_exporter(9100) 指标,并通过 /targets 页面快速验证抓取状态。文章同时覆盖 Prometheus 数据模型(metric + labels 的时间序列)、Pull 采集模型、PromQL 基础用途(rate/聚合/等)
常见的 Prometheus 监控落地场景:在 Rocky Linux(兼容 CentOS/RHEL)上安装 node_exporter-1.8.2 暴露主机指标,并接入 Prometheus(示例版本 2.53.2)完成 targets 采集;同时介绍 Pushgateway-1.10.0 的定位与边界:用于短期任务、cron、CI/CD、ETL 等无法长期暴露 /metrics 的作业,通过「任务 push 到 Pushgateway,Prometheus 再 pull」的方式统一采集。
文章浏览阅读4k次,点赞34次,收藏20次。2026 年仍在使用 CentOS/RHEL 系(含兼容发行版)的运维/开发,给出 Grafana 11.3.0(grafana-enterprise-11.3.0-1.x86_64.rpm)通过 YUM 直接安装 RPM 的工程化落地流程:安装包来源、systemctl 启动与状态检查、默认 3000 端口访问与首次登录(admin/admin)验证链路,并补齐最常见的线上问题定位:服务未监听、端口被防火墙/安全组拦截、SELinux 拦截、反向代理/域名访问 404/502、以及「页面能开但登录失败/循环跳转」等场景的排查思路。
文章浏览阅读4.9k次,点赞24次,收藏20次。2026年工程实践,梳理数据仓库(数仓)的核心概念与落地关注点:从企业数据孤岛出发,解释数据仓库的四大特征——面向主题(Subject Oriented)、集成(Integrated)、相对稳定/非易失(Non-Volatile)、反映历史变化/时变(Time Variant)。同时给出数据库与数据仓库的本质对比,即OLTP(联机事务处理)与OLAP(联机分析处理)的差异:OLTP强调事务一致性与高并发写入,OLAP强调历史、聚合与多维分析(星型/雪花模型)。在工程链路上,重点说明ETL/ELT、数据集成过程,包括数据清洗、转换、加载,以及数据仓库的构建方法论。数据仓库主要用于解决企业级的数据分析问题或者管理和决策,为分析数据而设计,而非取代数据库。数据仓库包含各种粒度的历史数据,数据时限远远长于操作型数据的时限,数据按照时间的顺序追加,都带有时间属性。
文章浏览阅读4.2k次,点赞40次,收藏35次。(Offline Data Warehouse)在企业落地时最常见的两类问题:数据集市扩张导致的数据孤岛、以及数仓分层边界不清导致的重复计算与口径混乱,给出可执行的工程化拆解。你会看到数据集市(Data Mart)为何只能作为数据仓库(DW)的一部分,以及在多 BU 组织下如何通过一致性维度(DIM)与可复用的明细层(DWD)/汇总层(DWS)来减少重复开发、提升查数效率并稳定指标口径。同时对 ER/3NF(Inmon)与维度模型(Kimball,星型/雪花)给出适用条件:业务快速变化场景优先维度模型,追求大数据离线数仓分层
文章浏览阅读5.3k次,点赞39次,收藏25次。离线数仓建模实践,系统梳理事实表(Fact Table)与维度表(Dimension Table)的核心概念、事实类型(可加/半可加/不可加)与粒度(交易/快照/累积快照)对查询性能与可分析性的决定性影响。围绕三类事实表:事务事实表、周期快照事实表、累积快照事实表,给出适用业务过程与更新机制边界,尤其强调累积快照的多里程碑日期键与"未发生"代理键占位策略。进一步对比雪花模型(维度规范化、低冗余但多连接)与事实星座(共享公共维表、多主题事实表)在存储、维护与查询效率上的取舍,补充元数据(技术/业务/管理元数据)
介绍 Spark 实时计算的两代框架:DStream 微批处理模型的架构与局限,以及 Structured Streaming 如何通过无界表模型和 Catalyst 优化解决 EventTime 处理、API 一致性等问题。
全面讲解 Spark Streaming 三种基础数据源的原理与实现:文件流监控目录、Socket TCP 接入、RDD 队列模拟测试,附完整 Scala 代码示例。
文章浏览阅读4.5k次,点赞23次,收藏27次。业务拆分(前台/运营后台/商家后台)→数据来源(启动/点击日志、下单/支付/退款等交易数据)→数据埋点(页面统计/操作统计、需求—采集—上报—清洗加工—入仓—分析—展示)→指标体系(准确/可解释/结构性、指标=基础指标+修饰词+时间段、核心指标与维度拆解、漏斗拆解与监控)。结合会员活跃、广告、核心交易三类主题分析任务,强调指标口径标准化(指标字典、数据来源、去重与空值规则)与宣贯落地(责任矩阵、评审会、报表与告警)。适用于 2025–2026 年电商数据团队搭建离线数仓、沉淀指标体系与提升报表稳定性的实践场
离线数据仓库(离线数仓)总体架构设计与落地方法:框架选型对比 Apache 社区版与第三方发行版(CDH/HDP/FusionInsight),梳理数据采集(DataX/Flume/Sqoop/Logstash/Kafka)、存储(HDFS/HBase)、计算(Hive/MapReduce/Tez/Spark/Flink)、调度(Airflow/Azkaban/Oozie)、元数据(Atlas)、质量(Griffin)、即席查询(Impala/Kylin/ClickHouse/Presto/Druid)等组件
文章浏览阅读5.3k次,点赞18次,收藏29次。离线数仓建设,给出"日志采集→落地→分层→指标"的工程化路径。会员以设备唯一标识(Android IMEI / iOS OpenUDID)为口径,输出新增会员、活跃会员(DAU/WAU/MAU)与留存(次日/7日/30日)等核心指标。采集侧选择 Flume 1.8+ 的 Taildir Source 解决多目录增量追踪与断点续传(positionFile),通过 HDFS Sink 按日期分区写入,进入 ODS,再在 DWD 清洗明细、DWS 汇总主题、ADS 对外服务。
文章浏览阅读8.5k次,点赞24次,收藏18次。Flume 1.9.0 在离线数仓(日志采集→HDFS)场景的工程化优化:从 Source→Channel→Sink 全链路给出 batchSize、Memory/File Channel 的 capacity/transactionCapacity、压缩传输(gzip/snappy/lz4)等关键参数的可落地取值区间与取舍原则,重点解决高并发写入下的吞吐与稳定性问题。同时整理 Flume 常见 OOM 根因:默认 JVM 堆过小导致导入大日志或突发流量时崩溃,给出 flume-env.sh 的 -Xms/_java flume 拦截器
系统梳理 Spark Streaming DStream 的无状态转换算子与 transform 高级操作,通过黑名单过滤案例演示 leftOuterJoin、SQL、广播变量三种实现方式。
深入讲解 Spark Streaming 有状态计算:窗口操作参数配置、reduceByKeyAndWindow 热词统计、updateStateByKey 全量状态维护与 mapWithState 增量优化,附完整 Scala 代码。
文章浏览阅读4.5k次,点赞32次,收藏27次。使用 TAILDIR Source 监控多个目录(start/event),通过 filegroups headers 为不同来源打上 logtype;再配合自定义 Interceptor 从日志正文解析业务时间,写入 header=logtime。最终 HDFS Sink 采用动态路径 /user/data/logs/%{logtype}/dt=%{logtime}/,实现按日志类型分目录、按日志时间分区落盘。文中覆盖 jar-with-dependencies 投放位置、拦截器 Builder 配置
文章浏览阅读4.2k次,点赞15次,收藏27次。Apache Flume 的离线日志采集链路,给出一套工程化落地:使用 Taildir Source 监控多个目录与多文件正则匹配,为不同目录日志注入 logtype 等 Header;通过自定义 Interceptor(Java)解析 Event body 中的 JSON(fastjson),提取启动日志/事件日志的时间戳并转换为 yyyy-MM-dd 写入 logtime Header;最后由 HDFS Sink 基于 Header 动态路由写入不同 HDFS 路径,实现按天分区与可控的文件滚动
文章浏览阅读8.8k次,点赞31次,收藏34次。离线数仓(2026)中 ODS(Operational Data Store)层的工程落地,给出 Hive 外部表(external table)+ 按天分区(partition dt)承接原始日志的最小闭环:建表 location 指向 HDFS 目录、通过 alter table add partition 管理分区,并用 Shell 脚本实现"传参日期/默认昨天"的装载流程。随后聚焦 Hive JSON 处理:get_json_object 适合单字段路径提取,json_tuple 适合一次取多个键...
详解 Spark Streaming 接入 Kafka 的两种模式:基于 Receiver 的高级 API 与 Direct 直连模式的架构差异、偏移量管理、Exactly-Once 语义保证及完整 Scala 代码实现。
文章浏览阅读5.9k次,点赞38次,收藏34次。Hive 离线数仓中的 JSON 数据处理,覆盖三类最常见需求:1)从 JSON 串中取数组字段并在 SQL 中 explode 展开;2)从 JSON 串中同时解析普通字段(json_tuple)与数组字段(自定义 UDF);3)对"每行一个 JSON object"的原始文件,使用 JsonSerDe 直接建表加载。示例基于 Hive 2.3.7(hive-exec 2.3.7)与 Java UDF,实现输入(jsonStr、arrKey)输出 array,并配套 LATERAL VIEW
本文介绍使用 Hive 构建离线数仓,统计活跃会员(日活/周活/月活)的完整流程,从 DWD 明细层到 DWS 汇总层再到 ADS 应用层,涵盖建表脚本、数据装载脚本及常见错误速查。
离线数仓按天计算“新增会员”,并为后续“会员留存”提供口径一致的数据底座。用“全量会员表(含首日dt)”做去重锚点,DWS 产新增明细,ADS 产新增计数。
系统介绍 Apache Flink 的起源、核心特性与架构组件:JobManager、TaskManager、Dispatcher 的职责划分,流批一体处理模型,以及与 Spark Streaming 的对比选型。
离线数仓中“会员留存“的实现方法:DWS 层通过 dws_member_retention_day 表关联新增与启动明细表计算 1/2/3 日留存;ADS 层构建留存数表与留存率表。包含完整 Hive 建表、装载脚本及常见错误排查。
离线数仓 ADS 层 Hive 表导出到 MySQL 的落地链路,给出 DataX 典型方案:hdfsreader → mysqlwriter。重点覆盖 DataX JSON 配置与常见报错修复。
演示一套从日志采集到会员指标分析的完整链路,涵盖 Flume Taildir 监听、HDFS 分区存储、Hive 外部表加载、ODS/DWD/DWS/ADS 分层处理,支撑活跃会员、新增会员、会员留存等指标计算。
Flink 在 YARN 集群上的三种部署模式详解:Session、Application、Per-Job 模式,Hadoop 依赖配置、YARN 资源申请与任务提交流程。
基于 Hadoop + Hive + HDFS + DataX + MySQL 的离线数仓实战,涵盖会员指标测试(活跃/新增/留存)、HDFS 导出、DataX 同步至 MySQL,以及广告业务 ODS/DWD/ADS 全流程建模。
Hive 离线数仓广告业务实战,结合 Flume + Hive + UDF + Parquet 的典型链路,演示如何将原始事件日志从 ODS 层映射到 Hive 外部表,再在 DWD 层完成事件明细拆解、广告行为过滤与广告宽表构建。
基于 Hive 离线数仓实现广告曝光、点击、购买的分时统计,完成点击率 CTR、购买率 CVR 与广告效果 Top100 排名分析。涵盖 ADS 层建表、分区装载、CASE WHEN 行转列、窗口函数排名等典型写法。
Flink DataStream API 入门指南,程序执行流程、环境获取、数据源定义、算子链与执行模式详解,通过 WordCount 案例演示流处理程序开发。
Flink 时间窗口全面解析:滚动窗口、滑动窗口、会话窗口、Watermark 原理与生成策略、迟到数据处理机制。
使用 Flume Agent 采集 event 日志并写入 HDFS,再通过 Hive 脚本按日期完成 ODS 层与 DWD 层的数据装载。内容覆盖 Flume Agent 的 Source、Channel、Sink 基本结构,日志文件上传、Flume 启动命令、HDFS 落盘验证。
使用 DataX 将 Hive ADS 层数据导出到 MySQL 的完整方案。涵盖 ADS 装载、DataX 配置、MySQL 建表、Shell 脚本参数化执行,以及常见报错定位与修复清单。
文章浏览阅读4.4k次,点赞28次,收藏16次。围绕订单数、商品数、支付金额三大指标,按销售区域与商品类型(三级品类)拆解分析维度。基于 trade_orders、order_product、product_info、product_category、shops、shop_admin_org、payments 等表,明确主键与关联键(orderId / productId / shopId / categoryId / areaId / payMethod),并梳理口径:订单粒度 vs 明细粒度、支付金额取值(totalMoney vs money)
Flink 有状态计算详解:Keyed State、Operator State、Checkpoint 配置、Savepoint 备份与恢复、生产环境实践。
文章浏览阅读6k次,点赞22次,收藏14次。DataX(mysqlreader + hdfswriter)将 MySQL 电商业务库按"全量/增量"两类策略抽取到 HDFS,并在 Hive 中以 dt=yyyy-mm-dd 进行分区管理。针对维表/小表(如商品分类、店铺、组织、支付方式)采用每日全量导出形成新分区;针对事实表/大表(订单、订单商品、商品信息)基于可区分每日新增的字段执行增量抽取。
使用 DataX(MySQLReader + HDFSWriter)从 MySQL 抽取订单表、订单明细表、产品信息表的日增量数据,落地到 HDFS,并以 dt=yyyy-MM-dd 目录实现分区化存储,后续通过 Hive alter table ... add partition 完成 ODS 分区挂载。核心指标覆盖订单数、商品数、支付金额。
通过 DataX 将 MySQL 数据同步到 HDFS 指定目录,再在 Hive 中创建 ODS 外部表,统一使用 dt 字符串分区。允许在7天内快速查询原始交易记录体现ods层什么核心特点。
文章浏览阅读5.2k次,点赞39次,收藏23次。缓慢变化维(SCD,Slowly Changing Dimensions)展开,系统梳理 SCD Type 0、1、2、3、4、6 的核心差异,并结合 Hive 离线数仓场景说明快照表与拉链表的适用边界。
文章浏览阅读5.2k次,点赞37次,收藏15次。离线数仓建模方式,实战讲解 Hive 拉链表实现方案,覆盖初始化装载、每日增量更新、历史版本闭链、Shell 调度脚本以及回滚恢复逻辑。
Hive 拉链表实战教程,讲解订单历史状态增量刷新、ODS 到 DWD 分层,结合 2020 年订单状态变更案例,说明拉链表如何处理"记录会变化、又需要保留历史"的业务对象。
文章首先确定事实表与维表的区分:绿色表示事实表,灰色表示维表。维表处理方式根据数据量选择不同策略——小表采用每日快照表(如产品分类表、商家店铺表、商家地域组织表、支付方式表),大表则使用拉链表(如产品信息表)。由于数据库遵循三范式导致查询不便,文章通过逆规范化设计,将商品分类维度表、省份区域维度表和商家信息维度表进行处理,生成宽表以简化查询逻辑。
订单表是周期性事实表,为保留订单状态可使用拉链表处理;订单产品表为普通事实表。订单状态包括:-3用户拒收、-2未付款订单、-1用户取消、0等待发货、1配送中、2用户确认收货。订单从创建到完成有时间限制,业务上不允许订单一个月后状态仍变化。
Apache Airflow 是一个开源的任务调度和工作流管理平台,主要用于开发、调试和监控数据管道。Airflow 通过使用 Python 脚本定义任务和依赖关系,帮助用户以编程的方式构建动态的、可视化的工作流。
Apache Airflow 是一个开源的任务调度和工作流管理工具,用于编排复杂的数据处理任务。最初由 Airbnb 开发,于 2016 年捐赠给 Apache 软件基金会。Airflow 的主要特点是以代码方式定义任务及其依赖关系,支持任务的调度和监控,适合处理复杂的大数据任务。airflow离线安装部署
Linux系统是由cron(crond)系统服务来控制的,Linux系统上原本那就有非常多的计划性工作,因此这个系统服务是默认启动的。Linux系统也提供了Linux用户控制计划任务的命令:crontab命令。作用:任务(命令)定时调度、定时备份等。
Apache Airflow 是一个开源的任务调度和工作流管理工具,用于编排复杂的数据处理任务。最初由 Airbnb 开发,于 2016 年捐赠给 Apache 软件基金会。Airflow 的主要特点是以代码方式定义任务及其依赖关系,支持任务的调度和监控,适合处理复杂的大数据任务。
Apache Airflow 是一个开源的任务调度和工作流管理工具,用于编排复杂的数据处理任务。最初由 Airbnb 开发,于 2016 年捐赠给 Apache 软件基金会。Airflow 的主要特点是以代码方式定义任务及其依赖关系,支持任务的调度和监控,适合处理复杂的大数据任务。
Atlas是Hadoop平台元数据框架:Atlas是一组可扩展的核心基础治理服务,使企业能够有效,高效的满足Hadoop中合规性要求,并能与整个企业数据生态系统集成Apache Atlas为组织提供了开放的元数据管理和治理功能,以建立数据资产的目录,对这些资产进行分类和治理,并为IT团队、数据分析团队提供围绕这些数据资产的协作功能。
元数据(MetaData)狭义的解释是用来描述数据的数据。广义来看,除了业务逻辑直接读写处理的那些业务数据,所有其他用来维持整个系统运转所需的信息、数据都可以叫做元数据,如数据库中表的Schema信息,任务的血缘关系,用户和脚本、任务的权限映射关系信息等。管理元数据的目的,是为了让用户能够更高效的使用数据,也是为了平台管理人员能更加有效的做好数据的维护管理工作。
Apache Griffin是一个开源的大数据质量解决方案,它支持批处理和流处理两种模式的数据质量检测方式。可以从不同的维度(如离线任务执行完毕后检查源端和目标端的数据质量是否一致,源表数据值空值等)度量数据资产,从而提升数据的准确度、可信度。数据质量监控通常结合自动化工具和人工审查,利用数据质量管理平台进行实时监控,生成报告并触发警报,以便及时纠正问题。
Livy 是一个用于 Apache Spark 的 REST 接口,旨在简化 Spark 作业的提交和管理,特别是在大数据处理场景中。它的主要功能是通过 REST API 与 Spark 集群进行交互,允许用户提交作业、执行代码片段并查询作业的状态和结果,而不需要直接与 Spark 的底层架构交互。简化 Spark 作业提交:用户可以通过 HTTP 请求向 Livy 发送 Spark 作业,而不需要直接使用 spark-submit命令。
Apache Griffin 是一个开源的数据质量管理框架,旨在帮助组织在大数据环境中监控和提高数据质量。用户可以自定义规则,使用 JSON 或其他标准格式来描述数据质量的各项要求,支持批处理和流处理数据。
数据实时处理能力成为企业提升竞争力的一大因素,最初阶段主要采用来一个需求,编写一个实时任务的方式来处理实时数据,随着需求的增多,计算任务也相对增多,并且不同任务的开发人员不同,导致开发风格差异化,该阶段的实时数据处理缺乏统一的规划,代码风格差异化严重,在维护成本和开发效率上有很大障碍。CDH:最成型的发型版本,拥有最多的部署案例,提供强大的部署、管理和监控工具,国内使用最多的版本,拥有强大的社区支持。
实时数仓是一种数据仓库系统,区别于传统批处理数仓,它强调低延迟、高吞吐和高可用性。实时数仓能够处理流式数据或近实时的数据流,使企业能够及时监控关键指标并做出决策。
阿里巴巴 B2B 公司,由于业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从 2010 年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅、消费的业务。Canal是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅、消费的中间件。目前,Canal主要支持了 MySQL 的 Binlog 解析,解析完成后才利用 Canal Client 用来处理获得相关数据。
Canal 是一款用于 MySQL 数据库 binlog 增量订阅和消费的开源工具。它主要用于解决数据同步和分布式事务问题,支持将数据库变更同步到其他系统中,比如消息队列、大数据平台等。Master 主库将改变记录写进二进制 binary log 中Slave 从库向 MySQL Master 发送 DUMP 协议,将 Master 主库的 binary log events 拷贝到它的中继日志(relay log)。Slave 从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库。
MySQL 的二进制日志(Binary Log,简称 binlog)是 MySQL 数据库中的一种日志文件类型,它记录了对数据库执行的所有更改操作(不包括 SELECT 和 SHOW 等查询操作)。它主要用于数据恢复、复制和审计等场景。
Canal 是阿里巴巴开源的数据同步工具,用于 MySQL 数据库的增量日志解析和同步。它模拟 MySQL 从库协议,获取主库的 binlog 日志,从而实现实时数据捕获和传输,常用于数据迁移、缓存更新和搜索引擎同步等场景。Canal 集群模式通常结合 ZooKeeper 实现分布式协调,保证高可用性和负载均衡。
本文介绍了阿里巴巴开源的Canal工具,它通过解析MySQL的binlog实现数据库变更的数据捕获(CDC)。文章展示了如何将Canal与Kafka集成,实现数据库变更到消息队列的实时推送,包含INSERT、UPDATE、DELETE操作的JSON格式示例。
在互联网企业中,常见的 ODS 数据有业务日志数据(Log)和业务 DB 数据两类,对于业务 DB 数据来说,从 MySQL 等关系型数据库的业务数据进行采集,然后导入到 Hive 中,是进行数据仓库生产的重要环节。它的作用是存储大量的结构化数据,并能进行频繁和可重复的分析。为了彻底解决这些问题,我们逐步实时 binlog 采集进行实时处理,binlog 是 MySQL的二进制日志,记录了 MySQL 中发生的所有数据的变化,MySQL 集群自身的主从同步就是基于 binlog 做的。
在 Kafka 中写入维度表(DIM)通常涉及将实时或批处理数据从 Kafka 主题读取,并根据数据流中的信息更新维度表。维度表存储与业务数据相关的维度信息,如客户、产品、地理位置等,用于支持 OLAP 查询。
DW(Data WareHouse 数据仓库层),包含 DWD、DWS、DIM 层数据加工而成,主要完成数据架构与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。基于 DW 数据,整合汇总成主题域的服务数据,用于提供后续的业务查询等。在分析交易过程时,可以通过卖家、买家、商品和时间等维度描述交易发生的环境,所以维度的作用一般是查询约束、分类汇总以及排序等。转换 area 表 到 地区ID、地区的名字、城市ID、城市的名字、省份 ID、省份的名字 到 HBase 中。
线性回归(Linear Regression)是利用回归方程(函数)对一个或多个自变量和因变量之间关系进行建模的一种分析方式。特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归。
本文介绍了逻辑回归的基本原理、应用场景和在Spark MLlib中的实现。逻辑回归是一种高效二分类算法,广泛应用于广告点击率、垃圾邮件识别等领域。文章详细讲解了逻辑回归的输入函数、Sigmoid激活函数和损失计算方法,并通过糖尿病预测案例演示了如何使用Spark MLlib的LogisticRegressionWithSGD模块进行模型训练与评估。
本文介绍了决策树的基本概念、分类原则和分类原理。决策树是一种非线性有监督分类模型,通过树形结构进行属性判断和分类。分类时应选择能将数据分类更纯粹的节点作为根节点,减少树高和训练次数。分类原理涉及熵、条件熵、信息增益等概念:熵衡量信息混乱程度,信息增益反映分类前后熵的变化,基尼系数也可表示样本混乱程度。
本文系统介绍了决策树的预剪枝与后剪枝原理,对比了ID3、C4.5和CART三种主流算法的核心差异,包括分裂标准、属性支持类型和剪枝方法。重点阐述了信息增益、信息增益率与基尼系数的计算原理,详细讲解了从树生成到剪枝的完整流程,并通过Spark MLlib中的Scala代码实例演示了决策树分类器的实现过程。
本文系统介绍了机器学习中的集成学习方法。主要内容包括:1)集成学习的基本定义与分类,通过结合多个模型提升预测性能;2)Bagging方法原理及应用,重点讲解随机森林的实现过程;3)Boosting方法的核心思想,包括Adaboost等算法的逐步增强机制。文章通过图示直观展示了不同集成学习技术的运作流程,比较了它们在解决欠拟合和过拟合问题上的作用。
本文介绍了机器学习中Bagging与Boosting的区别,以及GBDT(梯度提升决策树)算法原理。主要内容包括:1)Bagging和Boosting在数据采样、投票方式、学习顺序和应用场景上的差异;2)GBDT的基本概念和使用CART回归树的原因;3)回归决策树的构建流程,包括最优切分点选择、区域划分和输出值计算;4)通过具体案例演示回归树的生成过程,包括损失函数计算和递归划分策略。
本文介绍了梯度提升树(GBDT)算法的原理与应用。首先通过通俗例子说明提升树的基本思想,然后详细解析算法流程,包括负梯度计算、回归树拟合和模型更新等关键步骤。文章比较了GBDT与传统提升树的区别,并阐述了GBDT在回归和分类问题中的优势。此外,还介绍了XGBoost、LightGBM等高效实现及其特性,分析了GBDT的适用场景和局限性。
GBDT 案例实战,手把手带你完成从残差计算到回归树构建与迭代训练的全过程,结合图示详细解析,最终预测精准输出!