大数据-147 Apache Kudu 常用 Java API 增删改查

ops/2024/10/18 14:20:12/

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(正在更新…)

章节内容

上节我们完成了如下的内容:

  • Apache Kudu 的 Dockerfile
  • Dockerfile 详解
  • Kudu 启动访问

在这里插入图片描述

新建工程

由于重复了太多次,这里直接跳过了。

导入依赖

<dependency><groupId>org.apache.kudu</groupId><artifactId>kudu-client</artifactId><version>1.4.0</version>
</dependency>

创建新表

  • 必须指定表连接到的Master节点主机名
  • 必须定义Schema
  • 必须指定副本数量、分区策略、数量

编写代码

java">package icu.wzk.kudu;import org.apache.kudu.ColumnSchema;
import org.apache.kudu.Schema;
import org.apache.kudu.Type;
import org.apache.kudu.client.CreateTableOptions;
import org.apache.kudu.client.KuduClient;
import org.apache.kudu.client.KuduException;import java.util.ArrayList;
import java.util.List;public class KuduCreateTable {public static void main(String[] args) throws KuduException {String masterAddress = "localhost:7051,localhost:7151,localhost:7251";KuduClient.KuduClientBuilder kuduClientBuilder = new KuduClient.KuduClientBuilder(masterAddress);KuduClient kuduClient = kuduClientBuilder.build();String tableName = "student";List<ColumnSchema> columnSchemas = new ArrayList<>();ColumnSchema id = new ColumnSchema.ColumnSchemaBuilder("id", Type.INT32).key(true).build();columnSchemas.add(id);ColumnSchema name = new ColumnSchema.ColumnSchemaBuilder("name", Type.STRING).key(false).build();columnSchemas.add(name);Schema schema = new Schema(columnSchemas);CreateTableOptions options = new CreateTableOptions();// 副本数量为1options.setNumReplicas(1);List<String> colrule = new ArrayList<>();colrule.add("id");options.addHashPartitions(colrule, 3);kuduClient.createTable(tableName, schema, options);kuduClient.close();}}

测试运行

控制台未输出内容

运行结果如下图所示:
在这里插入图片描述

查看Kudu

我们查看Kudu的Tables,可以看到刚才创建的表如下:
在这里插入图片描述

删除表

编写代码

java">package icu.wzk.kudu;import org.apache.kudu.client.KuduClient;
import org.apache.kudu.client.KuduException;public class KuduDeleteTable {public static void main(String[] args) throws KuduException {String masterAddress = "localhost:7051,localhost:7151,localhost:7251,";KuduClient client = new KuduClient.KuduClientBuilder(masterAddress).defaultAdminOperationTimeoutMs(5000).build();client.deleteTable("student");client.close();}}

测试运行

控制台没有输出内容,这里运行截图如下:
在这里插入图片描述

查看Kudu

查看Kudu服务的 Table 页,里边的数据表已经删除了。
在这里插入图片描述

插入数据

  • 获取客户端
  • 打开一张表
  • 创建会话
  • 设置刷新模式
  • 获取插入实例
  • 声明带插入的数据
  • 刷入数据
  • 应用插入实例
  • 关闭会话

创建新表

我们运行刚才的创建新表代码,把student表先生成出来,具体运行这里跳过了。

编写代码

java">package icu.wzk.kudu;import org.apache.kudu.client.*;public class KuduInsert {public static void main(String[] args) throws KuduException {String masterAddr = "localhost:7051,localhost:7151,localhost:7251";KuduClient client = new KuduClient.KuduClientBuilder(masterAddr).defaultAdminOperationTimeoutMs(5000).build();KuduTable stuTable = client.openTable("student");KuduSession kuduSession = client.newSession();kuduSession.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);Insert insert = stuTable.newInsert();insert.getRow().addInt("id", 1);insert.getRow().addString("name", "wzk");kuduSession.flush();kuduSession.apply(insert);kuduSession.close();client.close();}}

在代码中,有一个叫:kuduSession.setFlushMode:

  • AUTO_FLUSH_SYNC(默认):意思是调用KuduSession apply方法后,客户端会在当前刷新到服务器后再返回,这种情况不能够批量插入数据,调用 flush 方法不会起作用,应为此时缓冲区已经被刷新到了服务器。
  • AUTO_FLUSH_BACKGROUD:意思是调用apply方法后,客户端会立即返回,但是写入将在后台发送,可能与来自同一会话的其他写入一起进行批处理。如果没有足够的缓冲空间,KuduSession apply会阻塞,缓冲空间不可用。因为写入操作是在后台进行的,因此任何一个错误都将存储在一个会话本地缓冲区中。注意:这个模式可能会导致插入是乱序的,这是因为在这种模式下,多个写操作可以并发的发送到服务器。且这是一个Kudu的BUG,详细请看:https://issues.apache.org/jira/browse/KUDU-1767https://issues.apache.org/jira/browse/KUDU-1767
  • MANUAL_FLUSH:调用apply后,会非常快的返回,但是写操作不会发送,直到用户使用flush函数,如果缓冲区超过了限制大小,apply就会返回一个错误。

测试运行

控制台无输出内容,运行的截图如下图所示:
在这里插入图片描述

查询数据

编写代码

Kudu的查询数据用Scanner

java">package icu.wzk.kudu;import org.apache.kudu.client.*;public class KuduSelect {public static void main(String[] args) throws KuduException {String masterAddr = "localhost:7051,localhost:7151,localhost:7251";KuduClient client = new KuduClient.KuduClientBuilder(masterAddr).build();KuduTable kuduTable = client.openTable("user");KuduScanner kuduScanner = client.newScannerBuilder(kuduTable).build();while (kuduScanner.hasMoreRows()) {for (RowResult result : kuduScanner.nextRows()) {int id = result.getInt("id");String name = result.getString("name");int age = result.getInt("age");System.out.println("id: " + id + ", name: " + name + ", age: " + age);}}client.close();}}

测试运行

id: 1, name: wzkProcess finished with exit code 0

运行结果如下图所示:
在这里插入图片描述

更改数据

编写代码

java">package icu.wzk.kudu;import org.apache.kudu.client.*;public class KuduUpdate {public static void main(String[] args) throws KuduException {String masterAddress = "localhost:7051,localhost:7151,localhost:7251";KuduClient client = new KuduClient.KuduClientBuilder(masterAddress).build();KuduTable stuTable = client.openTable("student");KuduSession kuduSession = client.newSession();kuduSession.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);Update update = stuTable.newUpdate();update.getRow().addInt("id", 1);update.getRow().addString("name", "wzk_icu");kuduSession.apply(update);kuduSession.close();client.close();}}

删除指定行

编写代码

java">package icu.wzk.kudu;import org.apache.kudu.client.*;public class KuduDelete {public static void main(String[] args) throws KuduException {String masterAddress = "localhost:7051,localhost:7151,localhost:7251";KuduClient client = new KuduClient.KuduClientBuilder(masterAddress).build();KuduSession kuduSession = client.newSession();KuduTable stuTable = client.openTable("student");kuduSession.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);Delete delete = stuTable.newDelete();PartialRow row = delete.getRow();row.addInt("id", 1);kuduSession.flush();kuduSession.apply(delete);kuduSession.close();client.close();}}

测试运行

控制台没有输出任何内容,运行过程截图如下:
在这里插入图片描述


http://www.ppmy.cn/ops/118209.html

相关文章

【MySQL】函数及存储过程

MySQL函数和存储过程 函数 数据库中的函数是一种可重复使用的命名代码块&#xff0c;用于在数据库中执行特定的操作或计算。 在MySQL中提供了很多函数&#xff0c;为我们的SQL提供了便利 内置函数 mysql> select count(r_id),max(r_id),min(r_id),avg(r_id) from resume…

【优选算法之位运算】No.7--- 经典位运算算法

文章目录 前言一、位运算几种模型&#xff1a;1.1 基础的位运算&#xff1a; << >> ~ & | ^1.2 几种模型&#xff1a;1.3 模型练习 二、位运算示例&#xff1a;2.1 判定字符是否唯⼀2.2 丢失的数字2.3 两整数之和2.4 只出现⼀次的数字 II2.5 消失的两个数字 前…

Naive UI 选择器 Select 的:render-label 怎么使用(Vue3 + TS)

项目场景&#xff1a; 在Naive UI 的 选择器 Select组件中 &#xff0c;如何实现下面的效果 &#xff0c;在下拉列表中&#xff0c;左边展示色块&#xff0c;右边展示文字。 Naive UI 的官网中提到过这个实现方法&#xff0c;有一个render-label的api&#xff0c;即&#xff…

【ARM】MDK-当选择AC5时每次点击build都会全编译

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决MDK中选择AC5时每次点击build都会全编译 2、 问题场景 在MDK中点击build时&#xff0c;正常会只进行增量编译&#xff0c;但目前每次点击的时候都会全编译。 3、软硬件环境 1 软件版本&#xff1a;Keil MDK 5.…

帆软通过JavaScript注入sql,实现数据动态查询

将sql语句设置为参数 新建数据库查询 设置数据库查询的sql语句 添加控件 JavaScript实现sql注入 添加事件 编写JavaScript代码 //获取评价人id var pjrid this.options.form.getWidgetByName("id").getValue();//显示评价人id alert("评价人&#xff1a;&…

【Linux】驱动的基本架构和编译

驱动源码 /** Silicon Integrated Co., Ltd haptic sih688x haptic driver file** Copyright (c) 2021 kugua <daokuan.zhusi-in.com>** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public Licen…

【C语言】const char*强制类型转换 (type cast)的告警问题

void run_upload(const char *ftp_url) {CircularQueue queue;// 初始化环形队列for (int i = 0; i < QUEUE_SIZE; i++) {queue.items[i].data = malloc(BUFFER_SIZE);if (queue.items[i].data == NULL) {fprintf(stderr, "Failed to allocate memory for queue item %…

ML 系列:机器学习和深度学习的深层次总结(06)— 提升数据质量

一、说明 在AI数据挖掘中&#xff0c;对原始数据的预处理是必须的技术手段&#xff0c;本篇将对数据预处理的一系列注意事项进行展示。 二、关于数据预处理 注意&#xff1a; 在本章中&#xff0c;讨论的技术和方法基于 Roy Jafari 的《Hands-On Data Preprocessing in Pyth…