kudu介绍

article/2025/9/25 9:51:45

kudu介绍

Kudu是运行在hadoop平台上的列式存储系统,拥有Hadoop生态系统应用的常见技术特性,运行在一般的商用硬件上,支持水平扩展,高可用。

kudu的优势

1)一个table由多个tablet组成,对分区查看、扩容和数据高可用支持非常好
2)支持update和upsert操作。
3)与presto集成或spark集成后(dataframe)可通过标准的sql操作,使用起来很方便
4)可与spark系统集成

kudu的劣势

1)只有主键可以设置range分区,且只能由一个主键,也就是一个表只能有一个字段range分区,且该字段必须是主键。
2)如果是pyspark连接kudu,则不能对kudu进行额外的操作;而scala的spark可以调用kudu本身的库,支持kudu的各种语法。
3)kudu的shell客户端不提供表schema查看。如果你不通过imapla连接kudu,且想要查看表的元数据信息,需要用spark加载数据为dataframe,通过查看dataframe的schema查看表的元数据信息。
3)kudu的shell客户端不提供表内容查看。如果你想要表的据信息,要么自己写脚本,要么通过spark、imapla查看。
4)如果使用range 分区需要手动添加分区。假设id为分区字段,需要手动设置第一个分区为1-30.第二个分区为30-60等等

问题描述

在项目中有个功能是外导用户群,每次导入重复的记录数,总是显示重复记录数为0。因为我们是将导入的文件内容先存储在group_input表中,表结构如下
CREATE TABLE group_input (
l_date varchar commen ‘日期’,
file_id varchar ‘导入文件id’,
id_type varchar ‘id类型’,
id_str varchar ‘id值’,
super_id varchar ‘唯一id’
)
WITH (
column_design = ‘{“l_date”:{“key”:true,“nullable”:false,“encoding”:“AUTO_ENCODING”,“compression”:“DEFAULT_COMPRESSION”},“file_id”:{“key”:true,“nullable”:false,“encoding”:“AUTO_ENCODING”,“compression”:“DEFAULT_COMPRESSION”},“id_type”:{“key”:true,“nullable”:false,“encoding”:“AUTO_ENCODING”,“compression”:“DEFAULT_COMPRESSION”},“id_str”:{“key”:true,“nullable”:false,“encoding”:“AUTO_ENCODING”,“compression”:“DEFAULT_COMPRESSION”},“super_id”:{“key”:false,“nullable”:true,“encoding”:“AUTO_ENCODING”,“compression”:“DEFAULT_COMPRESSION”}}’,
partition_design = ‘{“hash”:[{“columns”:[“file_id”,“id_type”,“id_str”],“buckets”:3}],“range”:null}’
);

我们设计是以l_date,id_str,id_type,file_id作为联合主键,现在使用java API操作kudu,往表里面添加10条重复数据。

public static void main(String[] args) throws KuduException {String kuduAddress = "nffapp01:7051,nffapp02:7051,nffdata02:7051";KuduClient kuduClient = new KuduClient.KuduClientBuilder(kuduAddress).build();//创建表//创建kudu表字段LinkedList<ColumnSchema> columnSchemas = new LinkedList<>();columnSchemas.add(KuduUtil.newColumn("l_date", Type.STRING,true));columnSchemas.add(KuduUtil.newColumn("file_id",Type.INT32,true));columnSchemas.add(KuduUtil.newColumn("id_type",Type.STRING,true));columnSchemas.add(KuduUtil.newColumn("id_str",Type.STRING,true));columnSchemas.add(KuduUtil.newColumn("super_id",Type.STRING,false));//创建schemaSchema schema = new Schema(columnSchemas);//创建表提供的所有选项CreateTableOptions createTableOptions = new CreateTableOptions();//设置副本数createTableOptions.setNumReplicas(1);//设置范围分区的规则LinkedList<String> list = new LinkedList<String>();list.add("l_date");//设置hash分区createTableOptions.addHashPartitions(list,5);kuduClient.createTable("group_input",schema,createTableOptions);//向表内插入新数据KuduTable table = kuduClient.openTable("group_input");KuduSession session = kuduClient.newSession();session.setTimeoutMillis(60000);for (int i = 0; i < 10; i++) {logger.info("----------------insert  "+i+"---------------");Insert insert = table.newInsert();PartialRow row = insert.getRow();row.addString(0, "2019-08-01");row.addInt(1,20);row.addString(2, "20"+i);row.addString(3, "18664301061");row.addString(4, "super_id:9980767");session.apply(insert);}kuduClient.close();
}

}

获得的结果,根据id_type可以看出插入了第一条记录后其他记录都未插入。

当修改id_type和file_id值的时候,则数据可以全部插入,结果如图
在这里插入图片描述

总结

产品在设计之时没有考虑到kudu表主键的唯一性。当同一个文件中包含相同的记录时,只能导入一条记录。为了满足项目需要,只能修改统计规则,总记录条数=导入成功数+导入失败数+重复数,这样的话就重复数=成功重复数+失败重复数


http://chatgpt.dhexx.cn/article/6RmmvTfe.shtml

相关文章

KUDU 介绍

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

KUDU(一)kudu概述

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

Kudu概述

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

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

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

adb remount 挂载失败

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

adb remount overlayfs的说明

在android R项目中执行adb remount的时候&#xff0c;能看到"Using overlayfs for xxx"的打印&#xff0c;类似如下&#xff1a; #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 问题描述 在调试开发的时候&#xff0c;执行remount可以获得更高的权限&#xff0c;对系统的一些应用或者文件进行删除或替换&#xff0c;达到快速调试的目的&…

adb remount

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

Android 11 无法remount问题

问题描述&#xff1a; 在Android 11开发的时候&#xff0c;想快速调试把单独编译好的模块push 到 /system 目录下&#xff0c;结果发现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&#xff0c;verified boot and DM-verity默认启用策略发生了变化。详情如下&#xff1a; DM-V…

remount

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

Typescript之接口(Interface)

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

astype

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

TypeScript中的interface和type区别

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

TypeScript接口——interface

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

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

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

type 与 interface 的区别,你真的懂了吗?

大厂技术 高级前端 Node进阶 点击上方 程序员成长指北&#xff0c;关注公众号 回复1&#xff0c;加入高级Node交流群 在写 ts 相关代码的过程中&#xff0c;总能看到 interface 和 type 的身影。它们的作用好像都一样的&#xff0c;相同的功能用哪一个都可以实现&#xff0c;…

自定义字体 Typeface ttf

一、简介 有时候界面在设计app时会使用一些比较美观的字体&#xff0c;在安卓中使用起来也并不困难&#xff0c;随着安卓SDK的更新&#xff0c;它的实现方式也有所不同&#xff0c;该文章来看看怎么实现自定义字体。 二、普通方法 设置字体TextView.setTypeface(Typeface) pub…

TypeScript - Interfaces(接口)

目录 1、接口介绍 1.1 接口示例 2、可选属性 3、只读属性 4、额外的属性检查 5、函数类型 6、可索引的类型 &#xff17;、类类型 &#xff17;.1 类静态部分和实例部分 &#xff18;、继承接口 &#xff19;、混合类型 1&#xff10;、接口继承类 1、接口介绍 Ty…

type 与 interface

type 与 interface 官方文档是这么说的&#xff1a; For the most part, you can choose based on personal preference, and TypeScript will tell you if it needs something to be the other kind of declaration. If you would like a heuristic, use interface until you…