Spark整合Kudu-创建表和增删改查操作

10 篇文章 0 订阅

开启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)
  }
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值