Java 客户端
本地host配置(因为返回的是hostname,不是ip,如果不配置的话,会存在各种连不上)
192.168.1.101 kudu-master-1 kudu-master-2 kudu-master-3
构建maven 工程
<dependencies>
<dependency>
<groupId>org.apache.kudu</groupId>
<artifactId>kudu-client</artifactId>
<version>1.11.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
初始化客户端
/**
* 声明全局变量 KuduClient 后期通过它来操作 kudu 表
*/
private KuduClient kuduClient;
/**
* 指定 kuduMaster 地址
*/
private String kuduMaster;
/**
* 指定表名
*/
private String tableName;
@Before
public void init() {
//初始化操作
kuduMaster = "192.168.1.101:7051,192.168.1.101:7151,192.168.1.101:7251";
//指定表名
tableName = "student2";
KuduClient.KuduClientBuilder kuduClientBuilder = new
KuduClient.KuduClientBuilder(kuduMaster);
kuduClientBuilder.defaultOperationTimeoutMs(1800000);
kuduClient = kuduClientBuilder.build();
logger.info("服务器地址#{}:客户端#{} 初始化成功...", kuduMaster, kuduClient);
}
createTable(String name, Schema schema, CreateTableOptions builder)
创建表deleteTable
删除表apply(Operation operation)
执行操作, Operation 包含Insert
/Update
/Upsert
/Delete
KuduScanner
表扫描器
插入数据
/**
* 向表加载数据
*/
@Test
public void insertTable() throws KuduException {
//向表加载数据需要一个 kuduSession 对象
KuduSession kuduSession = kuduClient.newSession();
// kuduSession.set
kuduSession.setTimeoutMillis(100000);
kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC);
//需要使用 kuduTable 来构建 Operation 的子类实例对象
KuduTable kuduTable = kuduClient.openTable(tableName);
for (int i = 1; i <= 10; i++) {
Insert insert = kuduTable.newInsert();
PartialRow row = insert.getRow();
row.addInt("id", i);
row.addString("name", "zhangsan-" + i);
row.addInt("age", 20 + i);
row.addInt("sex", i % 2);
//最后实现执行数据的加载操作
kuduSession.apply(insert);
}
}
查询数据
/**
* 查询表的数据结果
*/
@Test
public void queryData() throws KuduException {
//构建一个查询的扫描器
KuduScanner.KuduScannerBuilder kuduScannerBuilder =
kuduClient.newScannerBuilder(kuduClient.openTable(tableName));
ArrayList<String> columnsList = new ArrayList<String>();
columnsList.add("id");
columnsList.add("name");
columnsList.add("age");
columnsList.add("sex");
kuduScannerBuilder.setProjectedColumnNames(columnsList);
//返回结果集
KuduScanner kuduScanner = kuduScannerBuilder.build();
//遍历
while (kuduScanner.hasMoreRows()) {
RowResultIterator rowResults = kuduScanner.nextRows();
while (rowResults.hasNext()) {
RowResult row = rowResults.next();
int id = row.getInt("id");
String name = row.getString("name");
int age = row.getInt("age");
int sex = row.getInt("sex");
System.out.println(">>>>>>>>>> id=" + id + " name=" + name + " age=" + age + "sex = " + sex);
}
}
}
修改数据
/**
* 修改表的数据
*/
@Test
public void updateData() throws KuduException {
//修改表的数据需要一个 kuduSession 对象
KuduSession kuduSession = kuduClient.newSession();
kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC);
//需要使用 kuduTable 来构建 Operation 的子类实例对象
KuduTable kuduTable = kuduClient.openTable(tableName);
//Update update = kuduTable.newUpdate();
//如果 id 存在就表示修改,不存在就新增
Upsert upsert = kuduTable.newUpsert();
PartialRow row = upsert.getRow();
row.addInt("id", 100);
row.addString("name", "zhangsan-100");
row.addInt("age", 100);
row.addInt("sex", 0);
//最后实现执行数据的修改操作
kuduSession.apply(upsert);
}
删除数据
/**
* 删除数据
*/
@Test
public void deleteData() throws KuduException {
//删除表的数据需要一个 kuduSession 对象
KuduSession kuduSession = kuduClient.newSession();
kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC);
//需要使用 kuduTable 来构建 Operation 的子类实例对象
KuduTable kuduTable = kuduClient.openTable(tableName);
Delete delete = kuduTable.newDelete();
PartialRow row = delete.getRow();
row.addInt("id", 100);
kuduSession.apply(delete);//最后实现执行数据的删除操作
}
删除表
@Test
public void dropTable() throws KuduException {
if (kuduClient.tableExists(tableName)) {
kuduClient.deleteTable(tableName);
}
}