Kudu 整合 impala-java 操作 | 学习笔记

简介: 快速学习 Kudu 整合 impala-java 操作

开发者学堂课程【NoSQL 数据库 Kudu 教程 Kudu 整合 impala-java 操作学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/723/detail/12912


Kudu 整合 impala-java 操作


内容介绍:

一、impala 使用 java 操作 kudu

二、引入依赖

三、具体操作

 

一、impala 使用 java 操作 kudu

对于 impala 而言,开发人员是可以通过 JDBC 连接 impala 的,有了 JDBC,开发人员可以通过 impala 来间接操作kudu

使用 impala 使用 JAVA 操作 KUDU,这种情况下和通过 JDBC 操作 mysql 非常类似,只不过需要注意的是 lmpala JDBC 驱动是由官网提供,所以要去官网下载驱动包,放到私库或者本地当中。

 

二、引入依赖

<!--impala jdbc 操作-->

<dependency>

<groupld>com.cloudera</groupld>

<artifactld>lmpalaJDBC41</artifactld>

<version>2.5.42</version>

</dependency>

<!--Caused by : ClassNotFound : thrift.protocol.TPro-->

<dependency>

<groupld>org.apache.thrift</groupld>

<artifactld>libfb303</artifactld>

<version>0.9.3</version>

<type>pom</type>

</dependency>

<!--Caused by : ClassNotFound : thrift.protocol.TPro-->

<dependency>

<groupld>org.apache.thrift</groupld>

<artifactld>libthrift</artifactld>

<version>0.9.3</version>

<type>pom</type>

</dependency>

<dependency

<groupld>org.apache.hive</groupld>

<artifactld>hive-jdbc</artifactld>

<exclusions>

<exclusion>

<groupld>org.apache.hive</groupld>

<artifactld>hive-service-rpc</artifactld>

</exclusion>

<exclusion>

<groupld>org.apache.hive</groupld>

<artifactld>hive-service</artifactld>

</exclusion>

</exclusions>

<version>1.1.0</version>

</dependency>

<!--导入 hive-->

<dependency>

<groupld>org.apache.hive</groupld>

<artifactld>hive-service</artifactld>

<version>1.1.0</version>

</dependency>

 

以上是 pom 文件的引用,最后发现驱动包是 lmpalaJDBC41,可以去官网进行下载。在软件的下方,有一个选择impala,里面提供一个 zip,这个就是官网下载下来的,里面有相关的软件应用,这时候打开编译器创建一个 JAVA 工程,或者放在本地的字符当中,大概有以下几个包开发使用。

image.png

核心就是刚才所看到的进行客户端连接的 impalaJDBC41.jar,其他都是依赖,创建好以后,单击右键选择Add as library 就可以保证来使用了。

image.png

接下来看一下相关代码的编写,整体来看和之前的 impala 没有任何区别,只不过建表的时候需要特别指定表的属性信息存于 kudu上,通过一连串的操作对表进行,增参改参删参体现通过 JAVA API 如何操作 KUDU

 

三、具体操作

public Person(int companyIdint workIdString nameString genderString photo){

this.companyId = companyId;

this.workId = workId;

this.name = name;

this.gender = gender;

this.photo = photo;

}

public int getcompanyId() i return companyId; }

public void setCompanyId(int companyId) { this.companyId = companyId; }

public int getworkId() { return workId; }

public void setlworkId(int workId) { this.workId = workId; }

public string getName() { return name; }

public void setName(String name) { this.name = name; }

public String getGender() {

return gender;

}

public void setGender(String gender) { this.gender = gender; }

public String getPhoto() { return photo; }

public void setPhoto(String photo) { this.photo = photo; }

首先创建 JAVA B 叫做 personperson 里面定义了一些属性字段,companyId 公司的变化、功耗、姓名、性别、照片等等。提供了标准的构造器,还有 set 定量方法,这是一个普通的 java B

import java.sq1.*;

public class Contants {

private static String JDBC DRIVER="com. cloudera. impala. jdbc41 .Driver";

private static String CONNECTION URL =" jdbc: impala://node-1:21050/defau1tjauth=noSasl";

//定义数据库连按

static Connection conn=nul1;

//XPreparedStatement 对象

static PreparedStatement ps-nu1l;

//定义查询的结果集

static ResultSet rs= null;

//数据库连接

public static Connection getCpnn(){

try {

Class . forName(JDBC_ DRIVER);

conn-DrivrManager . getConnection(CONNECTION URL);

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

接下来看一下 ImpalaJDBCclient,在这个里面主要写了整个方法的,入口,写了一个 main 方法,首先通过它获得一个连接,并没有把所有代码都写在里面,而是分装了一个类,叫做 contants,这个类里面定义的非常多的方法,比如说要想去连接一个数据库,不管是 impala 还是 mysql,都要首先有驱动,注册驱动,然后获得连接,根据连接获得会话,发送最新的 sql,获得结果然后关闭连接。大概都是这些步骤,这里通过 JAVA 操作 impala,间接控制 kudu 也是一样的流程。首先定义了一些属性,JDBC 驱动的路径,还有连接的地址,这个是 impala 专用的地址。默认是default 库,下面连接的对象为空,咨询的对象以及结果集。这些都是 JDBC 相关的属性,首先,第一个方法是get conn,使用 class for name 注册驱动,通过 driver manager 获得链接,最后返回连接。

//创建一个表

public static void createTable(){

Conn=getConn();

String sq1="CREATE TABLE impala kudu test" +

"("+

"companyId BIGINT ," +

"workId BIGINT," +

"name STRING," +

"gender STRING," +

"photo STRING," +

"PRIMARY KEY(companyId)" +

")+

"PARTITION BY HASH PARTITIONS 16 " +

"STORED AS KUDU

"TBLPROPERTIES (" +

"'kudu. master_ addresses' - 'node-1:7051, node-2: 7051,node-3:7051'," +

"'kudu.table_ name' = ' impala kudu test'" +

");";

try {

ps = conn. prepareStatement(sq1);

ps .execute();

} catch (SQLException e) {

e. printStackTrace();

}

第一个是 get conn,获得一个连接,首先看第一个方法,创建一个表操作,创建一个表的方法是 create table,跳转进来,可以发现 create table 其实就是原始的 JDBC,通过 conn get 一个 conn 型,下面拼凑了一个 SQL 语句,需要注意的是 SQL 要求的是字符串类型,创建一个表,表名叫做 impala_kudu_test,主键是 company ID,表的属性是进行哈希分区分为16个区,存储在 kudu 当中。下面指定 kudu 的地址,表名为 impala_kudu_test,接下来到 kudu里面进行刷新,发现是没有这个表的。接下来执行这个语句能不能进行操作。

image.png

//插入数据

public static void insertRows (Person person){

conn=getConn();Stringsql"insertintotableimpala_kudu_test(companyIdworkId,name,gender,photo)values(?,?,?,?,?)";

try {

ps=conn. prepareStatement(sq1);

//给占位符?赋值

ps.setInt( parameterIndexc 1,person. getCompanyId());

ps. setInt( parameterIndex 2, person. getWorkId()); .

ps . setString( parameterIndexc 3,person.getName());

ps . setString( parameterIndexc 4,person. getGender());

ps.setString( parameterIndexc 5,person. getPhoto());

ps.execute();

} catch (SQLException e) {

e.printstackTrace();

}finally {

if(ps !=nu11){

try {

//关闭

ps.close();

} catch (SQLException e) {

e.printStackTrace();

}

if(conn !=nu11){

运行一下 conn 表,发现又回到了最原始的 jdbc 当中,执行成功以后,退出代码为零,首先,从 impala 当中做一个查询,用的是 default 库,使用 show tablesimpala_kudu_test 表就已经有了,然后去 kudu 里面查看一下,刷新之后发现也有 impala_kudu_test 表,这样就通过 JAVA API,间接的在 impala 中创建了一个表,但是最终这个表是存储在 kudu 的。再往下看都是大同小异了。
创建完成以后,要去插入数据,插入数据调用的是 insert rows 方法,下面看一下 insertrows 插入数据是怎么插入的,Insert rows,需要指定插入对象,获得一个连接,语序是 insert into table,然后指定相应字段,接下来给占位符赋值,根据字段的 index 进行获取的。接下来看一下能不能把数据插入进去,对象是 new person,指定相关编号,右键进行 run,执行结果退出状态为零,成功以后,在 impala 里面进行验证,输入以下代码。

image.png

剩下几个就不再过多演示,因为都非常简单,比如说查询表的结构,使用的语句是 queryrows,查询过程当中,最重要的就是语句如何定义,执行语句,把结果作一个解析。

//查询数据

public static ResultSet queryRows(){

try {

//定义执行的 sql 语句

String sq1="select from impala kudu_ test" ;

ps = getConn(). prepareStatement(sql);

rs- ps .ekecuteQuery();

} catch (SQLException e) {

e. printStackTrace();

}

return rs;

同样后面的更新数据需要使用 updaterows 语句,都是语句的分发。
总结来说,如果想要使用 impala 操作 kudu,在 JAVA 层面,主要是编写非常原始的 JDBC 连接,其中,比较困难的是 impala 驱动,必须要去 kudu 官网下载,有了这个驱动,其他连接完全可以照抄 Mysql 的操作,就是创立连接拼接 SQL,执行结果,解析结果,关闭连接。

相关文章
|
6月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
391 5
|
3月前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
|
3月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
9月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
190 13
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
326 4
|
9月前
|
开发框架 Java 开发工具
【Java全栈学习笔记-U1-day01】Java介绍
本笔记整理了Java学习的基础内容,涵盖程序理解、Java语言特性、JDK安装与配置、Java程序开发工具及编写步骤。重点介绍了Java程序的基本结构、编译和运行过程,以及输出语句的使用。通过实例演示了IDEA创建Java程序的方法,并强调了编码规范和注意事项。适合初学者复习和交流学习。 主要内容: 1. 理解程序:计算机组成、程序定义。 2. 简介:Java语言特点、技术平台、JDK作用。 3. 编写Java程序:编写、编译、运行步骤,基本结构。 4. 输出语句 5. DEA使用:新建工程、保存位置、文件介绍、新建类。 6. 扩展:注释、代码规范、大小写敏感、缩进等。
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
163 1
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
203 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)