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);
}
}