开启kudu:
sudo /etc/init.d/kudu-tserver start
sudo /etc/init.d/kudu-masterstart
首先你需要添加依赖
<dependency>
<groupId>org.apache.kudu</groupId>
<artifactId>kudu-client</artifactId>
<version>1.7.0</version>
</dependency>
1.创建表
def createTable(client: KuduClient, tableName: String): Unit = {
//首先我们需要引入java转换
import scala.collection.JavaConverters._
//写一个java类型的list,里面放入ColumnSchema,用于存放字段信息
//ColumnSchemaBuilder里有两个参数,分别是字段名和type类型的字段类型
//后面跟上一个.key函数表示是否为主键
val columns = List(
new ColumnSchema.ColumnSchemaBuilder("word", Type.STRING).key(true).build(),
new ColumnSchema.ColumnSchemaBuilder("cnt", Type.INT32).build()
).asJava
//将字段信息封装成一个schema
val schema = new Schema(columns)
//这边我们需要新建一个CreateTableOptions用于存放创建表的选项
val options: CreateTableOptions = new CreateTableOptions()
//设置副本系数为1
options.setNumReplicas(1)
//这边必须设置addHashPartitions,有两个参数
//第一个参数指定哪个字段进行分区,可以有多个所以需要一个list
//第二个设置分为几个桶
options.addHashPartitions(parcols,3)
//这边新建了一个LinkedList
val parcols: util.LinkedList[String] = new util.LinkedList[String]()
//设置使用word字段进行分发
parcols.add("word")
//使用client.createTable进行创建表,有三个参数
//1.表名
//2.schema信息
//3.创建表选项
client.createTable(tableName,schema,options)
}
编写main方法
def main(args: Array[String]): Unit = {
//设置master
val KUDU_MASTERS = "localhost"
//使用new KuduClient.KuduClientBuilder创建一个KuduClient ,需要传入master
val client: KuduClient = new KuduClient.KuduClientBuilder(KUDU_MASTERS).build()
//设置表名
val tableName = "ods"
//调用createTable方法,将KuduClient和表名传入
createTable(client, tableName)
//关闭服务
client.close()
}
运行成功查看ui界面
表创建成功
2.添加数据
def insertRows(client: KuduClient, tableName: String) = {
//通过client.openTable打开一个表
val table: KuduTable = client.openTable(tableName)
//要进行表操作必须新建一个Session
val session: KuduSession = client.newSession()
//通过for循坏插入数据
for(i<-1 to 10) {
//通过table.newInsert新建一个插入操作
val insert: Insert = table.newInsert()
//通过insert.getRow拿到行信息
val row: PartialRow = insert.getRow
//插入操作
row.addString("word",s"dam-$i")
row.addInt("cnt", 100+i)
//通过session.apply进行运行
session.apply(insert)
}
}
操作成功,接下来我们查询里面的数据
3.查询表
def query(client: KuduClient, tableName: String) = {
//打开表
val table: KuduTable = client.openTable(tableName)
//要查询需要client.newScannerBuilder(table).build()获得KuduScanner
val scanner: KuduScanner = client.newScannerBuilder(table).build()
//while循环数据
while(scanner.hasMoreRows) {
//scanner.nextRows()获得可迭代行数据
val iterator: RowResultIterator = scanner.nextRows()
//迭代这个行数据
while(iterator.hasNext) {
val result: RowResult = iterator.next()
println(result.getString("word") + " => " + result.getInt("cnt"))
}
}
}
查看控制台
这样就验证了插入数据和查询数据完成
4.修改数据
def alterRow(client: KuduClient, tableName: String) = {
//打开表
val table: KuduTable = client.openTable(tableName)
//新建session
val session: KuduSession = client.newSession()
//创建一个update操作
val update: Update = table.newUpdate()
//获得row
val row: PartialRow = update.getRow
//这边设置将word为"dam-10"的数据"cnt"设为8888
row.addString("word", "dam-10")
row.addInt("cnt", 8888)
session.apply(update)
}
测试,我们将修改前后都进行查询,查看控制台
5.修改表名
def renameTable(client: KuduClient, tableName: String, newTableName: String) = {
//这边需要新建一个AlterTableOptions
val options: AlterTableOptions = new AlterTableOptions()
//通过options.renameTable,将新表名设置进去
options.renameTable(newTableName)
//需要调用client.alterTable修改表名,两个参数分别为旧表名,上面新建的AlterTableOptions
client.alterTable(tableName, options)
}
运行看ui界面
需求完成
6.删除表
def deleteTable(client: KuduClient, tableName: String) = {
//直接使用client.deleteTable就可以了
client.deleteTable(tableName)
}