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

news2024/9/27 17:32:56

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

目前已经更新到了:

  • 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
  • 必须指定副本数量、分区策略、数量

编写代码

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();
        // 副本数量为1
        options.setNumReplicas(1);
        List<String> colrule = new ArrayList<>();
        colrule.add("id");
        options.addHashPartitions(colrule, 3);

        kuduClient.createTable(tableName, schema, options);
        kuduClient.close();
    }

}

测试运行

控制台未输出内容

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

查看Kudu

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

删除表

编写代码

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表先生成出来,具体运行这里跳过了。

编写代码

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

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: wzk

Process finished with exit code 0

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

更改数据

编写代码

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();
    }

}

删除指定行

编写代码

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.coloradmin.cn/o/2165409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】 AD24中元器件重叠系统不报错的解决方案(消除报错)

【学习笔记】 AD24中PCB设计元器件重叠后系统不报错的解决方案&#xff08;如何主动屏蔽报错&#xff09; 一、Component Clearance未开启使能的解决方案二、最小水平间距设置错误的解决方案三、未开启设计规则检查的解决方案四、设计规则检查中 “在线”和“批量”的含义五、为…

开源的CDN:jsDelivr+Github加速图片加载

文章目录 20240530更新 网站加载的图片耗时&#xff0c;将图片使用jsDelivr进行加速。 每次打开静态网站的时候&#xff0c;都会发现页面的内容已经加载出来了&#xff0c;但是图片还是一片白&#xff0c;就考虑如何让图片能够更快的加载出来。 后面发现可以用jsDelivr加速Gi…

自然场景文本定位系统源码分享

自然场景文本定位检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

南京市副市长吴炜一行至天洑软件参观调研

近日&#xff0c;南京市副市长吴炜、南京市工信局副局长代吉上、南京市科技局副局长王愿华、江宁开发区管委会副主任易骏飞一行至天洑软件参观&#xff0c;调研工业软件重点企业方案&#xff0c;天洑软件副总经理冯克列、总工程师郭阳、研发部部长谢佳雯陪同调研。 Q1&#xff…

南开大学联合同济大学发布最新SOTA Occ OPUS:使用稀疏集进行占据预测,最快实现8帧22FPS

Abstract 占据预测任务旨在预测体素化的 3D 环境中的占据状态&#xff0c;在自动驾驶社区中迅速获得了关注。主流的占据预测工作首先将 3D 环境离散化为体素网格&#xff0c;然后在这些密集网格上执行分类。然而&#xff0c;对样本数据的检查显示&#xff0c;大多数体素是未占…

Linux:编译,调试和Makefile

一丶vim编译器 ### 基本概念 模式&#xff1a;Vim有几种不同的模式&#xff0c;包括&#xff1a; 命令/正常/普通模式&#xff1a;控制屏幕光标的移动&#xff0c;字符、字或行的删除&#xff0c;移动复制某区段及进入Insert mode下&#xff0c;或者到 last line mode 插入模…

xpath在爬虫中的应用、xpath插件的安装及使用

安装 1、打开谷歌浏览器进入扩展程序安装页面(右上角会有"开发者模式按钮")默认是关闭的&#xff0c;当安装此插件时需要把开发者模式打开。 2、下载下来的xpath_helper是zip格式的&#xff0c;需要解压缩即可安装。 3、重启浏览器&#xff0c;再次点击扩展程序即…

CAN通信详解

1、CAN介绍 1.1、什么是CAN? CAN&#xff08;Controller Area Network&#xff09; 即控制器局域网&#xff0c;是ISO国际标准化的串行通信协议。 开发目的&#xff1a;为了满足汽车产业的“减少线束的数量”、“通过多个LAN&#xff0c;进行大量数据的高速通信”…

9.25 C++继承 多态

手动实现队列 #include <iostream>using namespace std;class My_queue { private:struct Node //队列结构体{int data;Node *next;Node(int value):data(value),next(nullptr){}};Node *front;Node *rear;int size;public:My_queue():front(nullptr),rear(nullptr),siz…

EMQX MQTT 服务器启用 SSL/TLS 安全连接,使用8883端口

1.提前下载安装openssl 2.新建openssl文件夹打开在命令行操作 3.按照下面的操作进行 MQTT 安全 作为基于现代密码学公钥算法的安全协议&#xff0c;TLS/SSL 能在计算机通讯网络上保证传输安全&#xff0c;EMQX 内置对 TLS/SSL 的支持&#xff0c;包括支持单/双向认证、X.509 …

如何使用ssm实现线上旅游体验系统+vue

TOC ssm691线上旅游体验系统vue 绪论 课题背景 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化。目前&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到提升&#xff0…

进制数知识(2)—— 浮点数在内存中的存储 和 易混淆的二进制知识总结

目录 1. 浮点数在内存中的存储 1.1 浮点数的大V表示法 1.2 浮点数的存储格式 1.3 浮点数的存入规则 1.4 浮点数的读取规则 1.5 补充&#xff1a;移码与掩码 1.6 题目解析 2. 易错的二进制知识 2.0 符号位到底会不会参与运算&#xff1f; 2.0.1 存储前的编码变化运算 …

【Zynq从零开始】汇总导航

Welcome 大家好&#xff0c;欢迎来到瑾芳玉洁的博客&#xff01; &#x1f611;励志开源分享诗和代码&#xff0c;三餐却无汤&#xff0c;顿顿都被噎。 &#x1f62d;有幸结识那个值得被认真、被珍惜、被捧在手掌心的女孩&#xff0c;不出意外被敷衍、被唾弃、被埋在了垃圾堆。…

《Object-Centric Learning with Slot Attention》中文校对版

系列论文研读目录 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列论文研读目录摘要引言2 方法2.1 插槽注意力模块2.2 对象发现2.3 集合预测 3 相关工作4 实验4.1 对象发现4.2 集合预测 5 结论更广泛的影响 摘要 学习复杂场景的以对象为中心的表示是…

erlang学习:Linux命令学习5

从本地上传文件 使用rz命令选择文件&#xff0c;将本地文件上传至linux服务器 rz与本地文件中的txt文本文件内容相同 将上传的文件按行分割 split -l 1 study.txt -d -a 1 study_-l:按行分隔&#xff0c;每1行对study.txt文件进行切割 -d:添加数字后缀 -a 1:以1位数数字做尾…

Java_Day03学习

Day03 构造方法目的 为类的属性赋值构造方法调用 //调用带参方法时&#xff0c;要先实例化类&#xff0c;创建对象再调用&#xff1b; eg&#xff1a;public class Max_and_Min {//方法:访问修饰符 返回类型 方法名(形式参数类型 形参&#xff0c;形参类型 形参) {}public v…

速刷DuckDB官网24小时-掌握核心功法

简介 DuckDB 是面向列的本地 OLAP 数据库&#xff0c;SQLite是面向行的本地 OLTP 数据库。duckdb是 数据分析师得力助手&#xff0c;可以很好的直接读取本地的各种结构化数据文件&#xff0c;速度显著快于主流的pandas等工具。 duckdb通过加载插件可以成为各种RDBMS数据库的中…

Linux突发网络故障常用排查的命令

测试环境 系统&#xff1a;Ubuntu 18硬件&#xff1a;单核2G ping 用于测试客户机和目标主机通信状况&#xff0c;是否畅通。以及测量通信的往返时间&#xff0c;判断网络质量的好坏。 它通过发送ICMP回显请求消息到目标主机&#xff0c;并等待返回的ICMP回显回复消息。 pin…

C#和数据库高级:继承与多态

文章目录 一、继承的基本使用继承的概念&#xff1a;继承的特点&#xff1a;为什么使用继承&#xff1f; 二、继承的关键字1、this关键字2、base关键字3、Protected关键字4、子类调用父类的构造函数的总结&#xff1a; 三、继承的特性继承的传递性&#xff1a;继承的单根性&…

C/C++逆向:循环语句逆向分析

在逆向分析中&#xff0c;循环语句通常会以特定的汇编模式或结构体现出来。常见的循环语句包括 for 循环、while 循环和 do-while 循环。由于不同的编译器会根据代码优化的级别生成不同的汇编代码&#xff0c;分析循环的模式也可能会有所不同。以下是三种常见循环语句的汇编分析…