Kudu 使用_Java API_扫描 | 学习笔记

简介: 快速学习 Kudu 使用_Java API_扫描

开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第三阶段)Kudu 使用_Java API_扫描学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/678/detail/11783


Kudu 使用_Java API_扫描


kudu Java API 这个环节当中介绍了创建表,也就是针对于表这个概念本身的操作,然后又介绍了如何插入数据,插入数据是针对表里面的数据来进行的操作,但是插入数据的方式,就是针对数据的操作有很多种,比如有增、删、改、查,、删和改就先不用说了,因为 Java API 用的相对比较少,可能最多的还是使用 spark API。这个时候直接向大家介绍如何查询数据,这个查询数据在非关系型数据库当中不是叫 find,也不是叫 query,也不是通过 SQL 进行查询,它们统一叫做扫描。其实在 h base 当中查询的操作也叫做扫描,接下来就来看查询如何进行。

 

一、扫描查询数据

大致还是三四个步骤。首先,要扫描是要先开一个扫描的对象,通过扫描对象来进行扫描,这也是面向对象的设计。接下来通过扫描器获取每一个 tablet server 里面 tablet 的数据。再去迭代 tablet 当中的数据,获取每一行数据,打印出来。但是在这之前,就是在获取数据之前应该先去设置一下投影,这个投影其实就是常说的谓词,也就是要查询哪一些列。如果要指定查询某一些列,有一些列可以不用查,明显会增快性能,所以投影是必须要设置的。

接下来,进入到 idea 当中,

@Test

def scan(): Unit = {

val KUDU_ MASTER =192.168.169.101:7051"

val kuduClient = new KuduClientBuilder(KUDU_ MASTER).build()

// 1.设置投影

import scala.collection. JavaConverters._

val projects = List("key" "value") .asJava

// 2. scanner 组装

Val scanner = kuduClient.newScannerBuilder( kuduClient.open Table( name = "simple"))

.setProjec tedcolumnNames(projects)

.build()

// 3.获取结果

while (scanner.hasMoreRows) {

//这个 Results 是一整个 tablet

val results = scanner.nextRows( )

while (results.hasNext) {

//这才是一条具体的数据

val result = results.next()

println(result.getstring(columnIndex=0result . getstring( columnIndex = 1))

}

}

}

}

创建一个新的方法,这个方法 Test 叫做 scan,然后 scan 创建出来以后直接把前两行拿过来,

val KUDU_MASTER ="192.168.169.101:7051"

val kuduClient = new KuduClientBuilder(KUDU_ MASTER).build( )

步骤很简单,第一步,设置投影,第二步,进行扫描的组织,scanner 组装,第三步应该去获取结果,这就是三个步骤。

先看 scanner 的组装,因为最直接还是通过 scanner 来进行查询的, scanner 对象呢通过 kuduClient 来获取,kuduClient 当中可以 new 一个 scanner builder,在 kudu API 当中,其实提供的还是比较好的,Builder 是一个构建者模式,这个构建者模式用起来还是比较舒服的,这个时候它必须要求你提供一个 table 对象,是一个 kudu table 类型的,所以要去扫描哪个表是要先提供出来,通过 kuduClient.openTable 指定现在要扫描的 simple 这张表,提供这个数据以后,要去设置一下 ProjectedColumnNames,设置要去投影的那些列,如果是这样的话,就先去把这个列创建出来,它就是一个 projects,然后 List 后,就去指定,project 就是投影的意思,这个地方是 setProjectedColumnNames,然后要查 key 这一列,value 这一列也要,其次再去导入 scala 中的 collection 这个包下的 JavaConverts,然后下划线_,这个时候在这.asJava,因为这些都是 Java API,如果它要接收一个 list,它接收的也一定是 Java list,所以要给它转成 Java list 才能传进来。

已经设置过投影了,就可以直接 build 了,除了设置投影这一个 API 以外,它有挺多东西可以设了,比如容错模式,包括也可以设置要访问的、要投影的 index 形式,就是第几列是要查的,现在使用的是 name 的形式。

scanner 有了以后就可以获取其中的数据了,while 一下,这个 scanner 其实也是一个迭代器模式,可以通过 scanner 来看一看它是否 hasMoreRows,就是它是否有更多的 Rows,如果有,就可以通过 scanner nextRows,注意它不是 nextRow,而是 nextRows,它获取的是一次获取批量的数据,一次获取的是一整个 tablet 的数据,这个 Results  是一整个 tablet

tablet tablet server 是可以理解的,一个 tablet server 上是存放 tablet 的,一个 tablet server 可以存放多个 tablet,而这一次获取到的 results 是一个 tablet 里面的所有数据。

针对一个数据集,获取到的一整个 tablet 数据,可以再进行一次迭代,还是一个迭代器模式,通过 results 直接 hasNext,如果有下一个,直接 val 获取 result 这个 results.next 获取,这样就获取到具体的每一条数据了,这才是一条具体的数据,获取到具体的数据以后就可以 prinln,因为这是一个 no SQL API,所以 result 当中要一个列一个列的获取数据,比如获取第一列是一个 string,那就把0传进来,然后可以在 result 获取第二列 string,可以把1传进来,获取这一行当中的第一条数据,就是第一个列的数据获取这一行当中的第二个列的数据,每个列的数据都是 string,这就是查询的扫描的这个代码。

接下来可以运行一下

image.png

这个时候已经获取到数据了,对应的是(A1),数据已经获取好了,整个的扫描大概就是这样,其实就是一个 scanner,通过 scanner 获取一整个 tablet 的数据,然后再获取每一条的数据。

相关文章
|
3月前
|
存储 Java
Java扫描某个文件夹且要保证不重复扫描,如何实现?
【10月更文挑战第18天】Java扫描某个文件夹且要保证不重复扫描,如何实现?
88 3
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
103 2
|
21天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1月前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
81 10
|
1月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
2月前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
33 0
|
2月前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
2月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
61 0
|
3月前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
49 1
|
3月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
53 0