Kudu-java数据库简单操作
参考官网:http://kudu.apache.org/docs/kudu_impala_integration.html
参考:https://my.oschina.net/weiqingbin/blog/189413#OSC_h2_8
参考:https://www.cloudera.com/documentation/enterprise/5-12-x/topics/impala_create_table.html
1、创建表
CREATE TABLE my_first
(
id STRING,
int_value INT,
bigint_value BIGINT,
PRIMARY KEY(id)
)
PARTITION BY HASH PARTITIONS 3
STORED AS KUDU;
需要注意的是 PARTITION BY HASH PARTITIONS 3,3这个数字需要和实际的物理机器有关,不能大于实际的物理机器数,这个很令人费解,还没有找到原因。
java测试代码
package main.java;
import java.sql.Timestamp;
import java.util.List;
import java.util.UUID;
import org.apache.kudu.client.*;
/**
* @Author:sks
* @Description:
* @Date:Created in 14:59 2018/3/29
* @Modified by:
**/
import java.util.Date;
public class test {
private final static int mutationBufferSpace = 2000; public static void main(String[] args) {
try {
testInsert();
} catch (KuduException e) {
e.printStackTrace();
} } public static void testInsert() throws KuduException {
String master = "192.163.1.175:7051";
KuduSession session =null;
// String master = "101.201.197.71:7051";
try {
KuduClient client = new KuduClient.KuduClientBuilder(master)
.build();
session = client.newSession();
String tableName = "impala::default.my_first";
KuduTable table = client.openTable(tableName); SessionConfiguration.FlushMode mode;
Timestamp d1 = null;
Timestamp d2 = null;
long millis;
long seconds;
int recordCount = 1000;
mode = SessionConfiguration.FlushMode.MANUAL_FLUSH;
d1 = new Timestamp(System.currentTimeMillis());
insertManual(session, table, recordCount);
d2 = new Timestamp(System.currentTimeMillis());
millis = d2.getTime() - d1.getTime();
seconds = millis / 1000 % 60;
System.out.println(mode.name() + "耗时秒数:" + seconds); } catch (KuduException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
} finally {
if (!session.isClosed()) {
session.close();
}
} } //仅支持手动flush的测试用例
public static void insertManual(KuduSession session, KuduTable table, int recordCount) throws Exception { SessionConfiguration.FlushMode mode = SessionConfiguration.FlushMode.MANUAL_FLUSH;
session.setFlushMode(mode);
//如果不设置,默认是1000
session.setMutationBufferSpace(mutationBufferSpace); int uncommit = 0;
for (int i = 0; i < recordCount; i++) {
System.out.println(i);
Insert insert = table.newInsert();
PartialRow row = insert.getRow();
UUID uuid = UUID.randomUUID();
row.addString("id", uuid.toString());
row.addInt("int_value", i);
row.addLong("bigint_value", 10000L);
session.apply(insert);
// 对于手工提交, 需要buffer在未满的时候flush,这里采用了buffer一半时即提交
// uncommit = uncommit + 1;
// if (uncommit > OPERATION_BATCH / 2) {
// session.flush();
// uncommit = 0;
// }
} // 对于手工提交, 保证完成最后的提交
if (uncommit > 0) {
List<OperationResponse> lst = session.flush();
for(OperationResponse oor :lst){
System.out.println(oor.getRowError());
}
}
} //仅支持自动flush的测试用例
public static void insertInAutoSync(KuduSession session, KuduTable table, int recordCount) throws Exception {
// SessionConfiguration.FlushMode.AUTO_FLUSH_BACKGROUND
// SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC
// SessionConfiguration.FlushMode.MANUAL_FLUSH
SessionConfiguration.FlushMode mode = SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC;
//如果不设置,默认是1000
session.setFlushMode(mode); for (int i = 0; i < recordCount; i++) {
Insert insert = table.newInsert();
PartialRow row = insert.getRow();
UUID uuid = UUID.randomUUID();
row.addString("id", uuid.toString());
row.addInt("int_value", 100);
row.addLong("bigint_value", 10000L);
session.apply(insert);
}
} }
maven配置
<dependencies>
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency> <dependency>
<groupId>org.apache.kudu</groupId>
<artifactId>kudu-client</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.9</version>
</dependency>
</dependencies>
Kudu-java数据库简单操作的更多相关文章
- Java 数据库简单操作类
数据库操作类,将所有连接数据库的配置信息以及基本的CRUD操作封装在一个类里,方便项目里使用,将连接数据库的基本信息放在配置文件 "dbinfo.properties" 中,通过类 ...
- github上创建java项目简单操作
github上创建java项目简单操作 参考L: github上创建java项目简单操作 - CSDN博客http://blog.csdn.net/qq_29392425/article/detail ...
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- SQL数据库简单操作
sql语言简介 (1)数据库是文件系统,使用标准sql对数据库进行操作 * 标准sql,在mysql里面使用语句,在oracle.db2都可以使用这个语句 (2)什么是sql * Structured ...
- MySQL数据库简单操作
title date tags layout MySQL简单操作 2018-07-16 Linux post 登录mysql mysql -h 主机名 -u 用户名 -p 查看所有数据库 show d ...
- mongodb之java CRUD 简单操作
我下载的是 mongo-2.8.0.jar — Version 2.8.0 打开mongo shell -- 新建数据库test --( use test) 打开eclipse新建工程,把junit, ...
- 使用SQLiteOpenHelper类对数据库简单操作
实现数据库基本操作 数据库创建的问题解决了,接下来就该使用数据库实现应用程序功能的时候了.基本的操作包括创建.读取.更新.删除,即我们通常说的CRUD(Create, Read, Upda ...
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- Oracle 数据库简单操作
现在大型企业一般都用Oracle数据库,Oracle数据库在一般采用expdp,impdp 导出导入数据,但是在操作中经常会遇到一些问题.下面来浅析这些问题. 1. 导出数据 一般导出数据的时候需要建 ...
- android数据库简单操作
1.DbOpenHelper package com.example.dbtest.dbHelper; import android.content.Context; import android.d ...
随机推荐
- 关于Android4.X的Alertdialog对话框
最近在做Android4.0的开发,发现AlertDialog相比较以前有了较大变化,就是在触摸对话框边缘外部,对话框消失 于是研究其父类发现,可以设置这么一条属性,当然必须先AlertDialog. ...
- NOI.AC NOIP模拟赛 第一场 补记
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
- poj 1511 优先队列优化dijkstra *
题意:两遍最短路 链接:点我 注意结果用long long #include<cstdio> #include<iostream> #include<algorithm& ...
- Sed&awk笔记之sed篇(转)
Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" strea ...
- 【shell学习笔记】curl命令总结
2014-12-16 20:34 文思海辉 =========== CURL命令总结 1. 下载 curl -o [文件名称] www.baidu.com 2. 显示 HTTP request头信息 ...
- Syntactic and Semantic Errors
There are two kinds of errors that Basis can find. Syntax errors occur during the parsing of input c ...
- 使用position:relative制作下边框下的小三角
在制作tab选项卡的时候,有时会有下边框,且下边框下另一个头向下的小三角,这全然能够用css来实现,而不必使用背景图片. 由于使用背景图片时会有一个问题,选项卡内容字数不同.导致使用背景图片时无法控制 ...
- 基于SmartThreadPool线程池技术实现多任务批量处理
一.多线程技术应用场景介绍 本期同样带给大家分享的是阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何采用基于开源组件SmartThreadPool线程池技术实现多任务批量处理.在工作中您是否 ...
- 《完全用Linux工作》作者:王垠
完全用 GNU/Linux 工作 理解 GNU/Linux 注:本文是清华“牛仔”王垠的“成名作”,在网上引起很大的争议.对他崇拜地五体投地者有,对他嗤之以鼻者也有,总之成了一年多以前Linux 爱好 ...
- maven报错
今天执行mvn test的时候提示: 错误:读取 /home/subaochen/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.ja ...