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 编译器 开发工具
Java基础学习笔记——idea篇
JDK由JRE(包含JVM和核心类库)和开发工具箱(如javac编译器和java运行工具)组成。Java项目结构包括Project、Module、Package和Class。IDEA快捷键包括:生成main方法(main psvm)、复制代码(Ctrl+D)、删除代码(Ctrl+Y/X)、格式化代码(Ctrl+Alt+L)、重命名(Shift+F6)等。
51 0
|
6月前
|
监控 负载均衡 Dubbo
|
3月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
1月前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
25 1
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
1月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
31 0
|
1月前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
34 0
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
54 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
下一篇
无影云桌面