推荐阅读:

论主数据的重要性(正确理解元数据、数据元)

CDC+ETL实现数据集成方案

Java实现impala操作kudu

实战kudu集成impala

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

引入maven相关依赖

<!--impala的jdbc操作-->

<dependency>

    <groupId>com.cloudera</groupId>

    <artifactId>ImpalaJDBC41</artifactId>

    <version>2.5.</version>

</dependency>

通过JDBC连接impala操作kudu

使用JDBC连接impala操作kudu,与JDBC连接mysql做更重增删改查基本一样,创建实体类代码如下:

package cn.itcast.impala.impala;

public class Person {

private int companyId;

private int workId;

private String name;

private String gender;

private String photo;

public Person(int companyId, int workId, String name, String gender, String photo) {

this.companyId = companyId;

this.workId = workId;

this.name = name;

this.gender = gender;

this.photo = photo;

}

public int getCompanyId() {

return companyId;

}

public void setCompanyId(int companyId) {

this.companyId = companyId;

}

public int getWorkId() {

return workId;

}

public void setWorkId(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; }
}
JDBC连接impala对kudu进行增删改查
package cn.itcast.impala.impala;

import java.sql.*;

public class Contants {

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

private static String CONNECTION_URL="jdbc:impala://node1:21050/default;auth=noSasl";

//定义数据库连接

static Connection conn=null;

//定义PreparedStatement对象

static PreparedStatement ps=null;

//定义查询的结果集

static ResultSet rs= null;

//数据库连接

public static Connection getConn(){

try {

Class.forName(JDBC_DRIVER);

conn=DriverManager.getConnection(CONNECTION_URL);

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

//创建一个表

public static void createTable(){

conn=getConn();

String sql="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' = 'node1:7051,node2:7051,node3:7051'," +

"'kudu.table_name' = 'impala_kudu_test'" +

");";

try {

ps = conn.prepareStatement(sql);

ps.execute();

} catch (SQLException e) {

e.printStackTrace();

}

}

//查询数据

public static ResultSet queryRows(){

try {

//定义执行的sql语句

String sql="select * from impala_kudu_test";

ps = getConn().prepareStatement(sql);

rs= ps.executeQuery();

} catch (SQLException e) {

e.printStackTrace();

}

return rs;

}

//打印结果

public static void printRows(ResultSet rs){

/**

private int companyId;

private int workId;

private String name;

private String gender;

private String photo;

*/

try {

while (rs.next()){

//获取表的每一行字段信息

int companyId = rs.getInt("companyId");

int workId = rs.getInt("workId");

String name = rs.getString("name");

String gender = rs.getString("gender");

String photo = rs.getString("photo");

System.out.print("companyId:"+companyId+" ");

System.out.print("workId:"+workId+" ");

System.out.print("name:"+name+" ");

System.out.print("gender:"+gender+" ");

System.out.println("photo:"+photo);

}

} catch (SQLException e) {

e.printStackTrace();

}finally {

if(ps!=null){

try {

ps.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(conn !=null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

//插入数据

public static void insertRows(Person person){

conn=getConn();

String sql="insert into table impala_kudu_test(companyId,workId,name,gender,photo) values(?,?,?,?,?)";

try {

ps=conn.prepareStatement(sql);

//给占位符?赋值

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

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

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

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

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

ps.execute();

} catch (SQLException e) {

e.printStackTrace();

}finally {

if(ps !=null){

try {

//关闭

ps.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(conn !=null){

try {

//关闭

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

//更新数据

public static void updateRows(Person person){

//定义执行的sql语句

String sql="update impala_kudu_test set workId="+person.getWorkId()+

",name='"+person.getName()+"' ,"+"gender='"+person.getGender()+"' ,"+

"photo='"+person.getPhoto()+"' where companyId="+person.getCompanyId();

try {

ps= getConn().prepareStatement(sql);

ps.execute();

} catch (SQLException e) {

e.printStackTrace();

}finally {

if(ps !=null){

try {

//关闭

ps.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(conn !=null){

try {

//关闭

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

//删除数据

public static void deleteRows(int companyId){

//定义sql语句

String sql="delete from impala_kudu_test where companyId="+companyId;

try {

ps =getConn().prepareStatement(sql);

ps.execute();

} catch (SQLException e) {

e.printStackTrace();

}

}

//删除表

public static void dropTable() {

String sql="drop table if exists impala_kudu_test";

try {

ps =getConn().prepareStatement(sql);

ps.execute();

} catch (SQLException e) {

e.printStackTrace();

}

}

}
代码测试运行
package cn.itcast.impala.impala;

import java.sql.Connection;

public class ImpalaJdbcClient {

public static void main(String[] args) {

Connection conn = Contants.getConn();

//创建一个表

Contants.createTable();

//插入数据

Contants.insertRows(new Person(1,100,"lisi","male","lisi-photo"));

//查询表的数据

ResultSet rs = Contants.queryRows();

Contants.printRows(rs);

//更新数据

Contants.updateRows(new Person(1,200,"zhangsan","male","zhangsan-photo"));

//删除数据

Contants.deleteRows(1);

//删除表

Contants.dropTable();

}
}

Java实现impala操作kudu的更多相关文章

  1. 使用impala操作kudu之创建kudu表(内部表和外部表)

    依次启动HDFS.mysql.hive.kudu.impala 登录impala的shell控制端: Impala-shell 1:使用该impala-shell命令启动Impala Shell .默 ...

  2. 通过java代码进行impala和kudu的对接

    对于impala而言,开发人员是可以通过JDBC连接impala的,有了JDBC,开发人员可以通过impala来间接操作kudu: maven导包: <!-- https://mvnreposi ...

  3. 使用impala对kudu进行DML操作

    将数据插入 Kudu 表 impala 允许使用标准 SQL 语句将数据插入 Kudu 插入单个值 创建表: CREATE TABLE my_first_table ( id BIGINT, name ...

  4. 使用java操作kudu

    使用maven导入kudu <dependency> <groupId>org.apache.kudu</groupId> <artifactId>ku ...

  5. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  6. Java的JDBC操作

    Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...

  7. Java读写文本文件操作

    package com.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; ...

  8. 第26章 java进制操作

    java进制操作 1.二进制 二进制只有0和1,逢二进一 二进制多用在计算机中,来自计算机硬件的开关闭合 2.位运算 分别讲解: 2.1.按位与 & 两位全为1,结果才为1 0&0=0 ...

  9. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

随机推荐

  1. vscode python开发插件推荐

    vscode作为一款好用的轻量级代码编辑器,不仅支持代码调试,而且还有丰富的插件库,可以说是免费好用,对于初学者来说用来写写python是再合适不过了.下面就推荐几款个人觉得还不错的插件,希望可以帮助 ...

  2. Web自动化测试项目(二)BasePage实现

    一.BasePage介绍 创建一个BasePage类,对Selenium Api进行二次封装 为了快速创建项目并投产,用到的Selenium Api才进行封装,没用到的则不封装 优先封装最重要的几个方 ...

  3. 手写 Promise

    在上一章节中我们了解了 Promise 的一些易错点,在这一章节中,我们会通过手写一个符合 Promise/A+ 规范的 Promise 来深入理解它,并且手写 Promise 也是一道大厂常考题,在 ...

  4. centos7中修改运行级别

    centos6 在centos6里打开vim /etc/inittab文件看到下面有一行 id:5:initdefault,因此我们可以通过修改这个文件的id后的数字来修改运行级别 如果我们想要直接切 ...

  5. 不停机替换线上代码? 你没听错,Arthas它能做到

    写在前边 有没有这样一种感受,自己写的代码在开发.测试环境跑的稳得一笔,可一到线上就抽风,不是缺这个就是少那个反正就是一顿报错,线上调试代码又很麻烦,让人头疼得很.阿里巴巴出了一款名叫Arthas的工 ...

  6. e.detail.value 获取input的值

    inputId(e) { this.setData({ inputId: e.detail.value }) },

  7. Linux之时间同步操作

    Linux之时间同步操作 时间同步操作应用的命令 yum进行软件安装,软件安装过程中如遇到询问,一律选择y,ntp是时间同步命令 [root@localhost ~]# yum -y install ...

  8. pyhon学习Day18--继承

    [知识点] 面向对象的三大特性:继承.多态.封装 [继承] (1)继承:class Person(Animal): ——括号里的:父类,基类,超类   括号外的:子类,派生类 class Animal ...

  9. C++读取MNIST数据集

    MNIST是一个标准的手写字符测试集. Mnist数据集对应四个文件: train-images-idx3-ubyte: training set images  train-labels-idx1- ...

  10. vs2017项目上传到github

    如果要把项目提交到一个厂库里面,需要建个git存储库,比如选择新建git库选择VSVIEW文件夹,以后在这个文件夹下的项目,提交时都会提交到VSVIEW这个github仓库 选择的文件夹不在git文件 ...