Apache Kudu

article/2025/9/25 9:50:02

前言   

在Kudu出现前,由于传统存储系统的局限性,对于数据的快速输入和分析还没有一个完美的解决方案,要么以缓慢的数据输入为代价实现快速分析,要么以缓慢的分析为代价实现数据快速输入。随着快速输入和分析场景越来越多,传统存储层的局限性越来越明显,Kudu应运而生,它的定位介于HDFS和HBase之间,将低延迟随机访问,逐行插入、更新和快速分析扫描融合到一个存储层中,是一个既支持随机读写又支持OLAP分析的存储引擎。本篇文章研究一下Kudu,对其应用场景,架构原理及基本使用做一个总结。

Kudu介绍

在Kudu出现前,无法对实时变化的数据做快速分析:

alt Kudu-01

以上设计方案的缺陷:

1.数据存储多份造成冗余,存储资源浪费。

2.架构复杂,运维成本高,排查问题困难。

而Kudu就融合了动态数据与静态数据的处理,同时支持随机读写和OLAP分析。

Kudu与HDFS,HBase的对比:
alt Kudu-02
适用场景

  • 既有随机读写随机访问,又有批量扫描分析的场景(OLAP)
  • HTAP(Hybrid Transactional Analytical Processing)混合事务分析处理场景
  • 要求分析结果实时性高(如实时决策,实时更新)的场景
  • 实时数仓
  • 支持数据逐行插入、更新操作
  • 同时高效运行顺序读写和随机读写任务的场景
  • Kudu作为持久层与Impala紧密集成的场景
  • 解决HBase(Phoenix)大批量数据SQL分析性能不佳的场景
  • 跨大量历史数据的查询分析场景(Time-series场景)

特点及缺点

特点

  • 基于列式存储
  • 快速顺序读写
  • 使用 LSM树 以支持高效随机读写
  • 查询性能和耗时较稳定
  • 不依赖Zookeeper 有表结构,需要定义Schema,需要定义唯一键,支持SQL分析(依赖Impala,Spark等引擎)
  • 支持增删列,单行级ACID(不支持多行事务-不满足原子性)
  • 查询时先查询内存再查询磁盘
  • 数据存储在Linux文件系统,不依赖HDFS存储

缺点

  • 暂不支持除PK外的二级索引和唯一性限制
  • 不支持多行事务 不支持BloomFilter优化join
  • 不支持数据回滚
  • 不能修改PK,不支持AUTO INCREMENT PK
  • 每表最多不能有300列,每个TServer数据压缩后不超8TB
  • 数据类型少,不支持Map,ARRAY,Struct等复杂类型

与相似类型存储引擎对比  

本文重点说Kudu,但我们也需要了解其他类似组件,了解它们各自擅长的地方,才能更好地做技术选型。这里简单对比一下Kudu,Hudi和DeltaLake这三种存储方案,因为它们都具有相似的特性,能解决类似的问题。


选择建议:考虑实时数仓方案以及SQL支持方面可选Kudu,数据湖方案及可回滚可选DeltaLake和Hudi,考虑兼容性高且应对读多写少读少写多都有很好的方案选Hudi,考虑并发写能力读多写少且与Spark紧密结合选DeltaLake。

原文链接:https://shmily-qjj.top/5f26355/


http://chatgpt.dhexx.cn/article/aKjH2Tk8.shtml

相关文章

Kudu的介绍及使用

前文: 过往采用Hive的离线处理时效性低,计算任务过于集中,查询效率低。SparkStreamingHive的数据清洗线使得多套数据流过于复杂。未来的数据仓库场景越来越趋向于实时数仓。 一、引入 二、架构图 2、架构及数据量 3、文件结构 4、目录结构 5…

Kudu简单使用

环境版本:CDH 6.3.2 | Impala 3.2.0 | Hive 2.1.1 | Hue 4.2.0 | kudu 1.10.0 # 创建kudu表,需指定主键、分区 CREATE TABLE kudu_table (id BIGINT,name STRING,PRIMARY KEY(id) ) PARTITION BY HASH PARTITIONS 16 STORED AS KUDU;# 创建impala外部表映…

Kurento

java相关代码:https://codeload.github.com/Kurento/kurento-tutorial-java/zip/refs/heads/master node相关代码:https://github.com/Kurento/kurento-tutorial-node WebRTC之Kurento:直播、视频通话、视频会议我都行! 前言 前段时间做rtsp无插件网页…

kudu介绍

kudu介绍 Kudu是运行在hadoop平台上的列式存储系统,拥有Hadoop生态系统应用的常见技术特性,运行在一般的商用硬件上,支持水平扩展,高可用。 kudu的优势 1)一个table由多个tablet组成,对分区查看、扩容和数据高可用支持非常好 2…

KUDU 介绍

前言 近两年,KUDU 在大数据平台的应用越来越广泛。在阿里、小米、网易等公司的大数据架构中,KUDU 都有着不可替代的地位。本文通过分析 KUDU 的设计, 试图解释为什么 KUDU 会被广泛应用于大数据领域,因为还没有研究过 KUDU 的代码…

KUDU(一)kudu概述

文章目录 概述使用场景对比其他存储Kudu基本架构Kudu中的相关概念和机制 概述 Kudu是一个分布式列式存储引擎/系统,由Cloudera开源后捐献给Apache基金会很快成为顶级项目。用于对大规模数据快速读写的同时进行快速分析 官网 https://kudu.apache.org/ Kudu运行在…

Kudu概述

Kudu是一个分布式的,具有可扩展性的列式存储管理器,可以对快速变化的数据进行快速分析。 使用场景 近实时计算场景时间序列数据的场景预测建模与存量数据共存既有随机读写/访问,又有批量扫描分析的场景(OLAP)HTAP混合事务分析处理场景Kudu作为持久层与Impala紧密集成的…

Kudo介绍 + Spark\Python\Scala开发Kudu应用程序

前半部分文章摘自:http://blog.csdn.net/a1043498776/article/details/72681890 Kudu的背景 Hadoop中有很多组件,为了实现复杂的功能通常都是使用混合架构, Hbase:实现快速插入和修改,对大量的小规模查询也很迅速HDF…

adb remount 挂载失败

打开cmd ,输入adb remount 挂载设备的时候失败,提示如下: 按照提示,输入adb root 再输入adb remount ,成功。

adb remount overlayfs的说明

在android R项目中执行adb remount的时候,能看到"Using overlayfs for xxx"的打印,类似如下: #adb root restarting adbd as root#adb remount Disabling verity for /system Using overlayfs for /system Disabling verity for /…

[高通SDM450][Android9.0]adb无法进行remount的解决方案

文章目录 开发平台基本信息问题描述解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 在调试开发的时候,执行remount可以获得更高的权限,对系统的一些应用或者文件进行删除或替换,达到快速调试的目的&…

adb remount

使用adb remount失败了,提示 如下图。 解决方法 先执行 adb root 然后 ctrlc, 然后再adb remount就成功了

Android 11 无法remount问题

问题描述: 在Android 11开发的时候,想快速调试把单独编译好的模块push 到 /system 目录下,结果发现remount failed C:>adb root restarting adbd as rootC:>adb remount Skipping /system for remount Skipping /vendor for remount S…

Android P(9.0) userdebug 版本执行adb remount失败

当你执行 adb remount 时会发现提示 remount of the / superblock failed: Permission denied remount failed 原因是android P 版本后 google 启用 avb(Android Verified Boot)2.0,verified boot and DM-verity默认启用策略发生了变化。详情如下: DM-V…

remount

1. 需要获取手机的root权限,方法很多了,我用的是360一键Root,有时也用百度一键Root 2. 从其他手机拷贝sqlite3文件到PC,我是从模拟器copy出来的,为方便大家,附件就有,可以直接下载哈 3. 进入手机…

Typescript之接口(Interface)

我们可以通过Interface关键字来定义限制数据的类型。 1.给对象定义类型 /*** 定义一种类型,名称叫做PersonInfo,里面有三个属性* name 人物的名字,类型为string* age 人物的年龄,类型为number* say 人物的方法,类型为函数类型&a…

astype

anp.array([1.1,1.2]) print(a数据类型:,a.dtype) print(astype修改数据类型:,a.astype(float).dtype) print(原数据类型未改变,a.dtype)#正确操作 aa.astype(float32) print(修改类型后再次操作,类型改变:,a.dtype) ba.astype(in…

TypeScript中的interface和type区别

💂 个人网站: 【紫陌】【笔记分享网】 💅 想寻找共同学习交流、共同成长的伙伴, 请点击【前端学习交流群】 在 TypeScript中,type 和 interface有些相似,都可以给类型命名并通过该名字来引用表示的类型。不过它们之间使…

TypeScript接口——interface

目录 一、接口概述: 二、接口类型介绍: 1、属性接口: 2、 函数接口: 3、可索引接口: (1)可索引接口约束数组示例: (2) 可索引接口约束对象示例&#xf…

【TypeScript】接口类型 Interfaces 的使用理解

导语: 什么是 类型接口? 在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement&#x…