开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第三阶段):Kudu 使用_创建工程】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/678/detail/11780
Kudu 使用_创建工程
内容介绍:
一、使用 Scala 操作 Kudu
一、使用 Scala 操作 Kudu
Scala 是基于 JVM 的语言,它的特性是可以和 Java 混用,Scala 操作 Kudu 使用的 Kudu 的 Java API,因为 Scala 跟 Java 可以进行相互操作。
1、Kudu API 结构设计
(1)Client
全称 Kudu Client,使用 Kudu master 服务器地址列表来创建,作用是Kudu 的 API 主入口,通过 Client 对象获取 Table 后才能操作数据。
操作:
①检查表是否存在;
②提交表的 DDL 操作,如 create, delete, alter ,在对表进行 DDL 的时候,需要如下两个对象;
③创建 Table 对象,就是 Open Table。
(2)Table
通过 Client 对象开启,通过 Table 对象可以操作表中的数据,可以获取行对象,对对象进行 insert, delete, update, upsert,然后进行对于数据的增、删、改、查,
(3)Scanner
专门负责查,也是 Kudu API 提供查的接口,它也是一个对象,通过 Table 对象开启扫描,Table 对象可以获取 Scanner,Scanner 可以进行相应的查询。
Scanner 中有几个读取模式,比较关键的有两个:
①READ_ LATEST,就是读取最后的数据,与 MySQL 中事务隔离级别中的不可重复读 ReadCommitted 相似,它能够保证只读取到已经提交的数据,只会返回已经提交的数据,但是不能保证每一次获取的数据都是一样的。
②READ_ AT_ SNAPSHOT,SNAPSHOT 就是快照,可以理解为时间戳,它可以读取在这个时间戳的数据,在某一个时间点的数据,这时它能够保证在这个时间点读取的数据第一次和第二次读一定是一样的,类似于可重复读RepeatableRead,但是它性能比较差,比如获取10秒钟之前的数据,就要等待在这个时间点之前所提交的所有的事务全都提交后,才能进行结果的返回。
还有一种模式叫 READ_ YOUR_ WRITES,是试验性的一种模式,尽量不要使用,意思是在每一次查询后确保自己的数据已经提交,把自己提交的所有数据都返回,不管别人是否提交。
2、导入 Kudu 所需要的包
使用 Scanner 操作 Kudu,先创建工程,点击 IDEA 里的 New Project,
然后点击下一步,groupid 为 cn.itcast,Artifactld 为 kudu,版本为0.0.1
放在 DMP 下 Project 下的 Kudu 工程里
点击 Finish,就创建完这个过程。
要使用 Kudu 的 Java API,就要导入一些 Kudu 相关的 Maven 依赖。
需要导入如下三个 Maven 插件,Maven 插件是编译时能够做额外事情的插件,第一个插件 maven -compile -plugin,是自动导入的,默认就有,现在需要导入这个插件的目的主要是通过其指定 Java 的版本。还有插件 scala-maven-plugin,主要作用是编译Scala 代码。还有 maven -shade- plugin,需要了解 jar 包的类型,一种叫 non-uber Jar,比如打出来一个 jar 包,不是必备的一些依赖并不会包含在这个 jar 包内,jar 包里只有一些必备的一些代码。之前导过插件 shade- plugin,作用是打一个 uber Jar,也就是胖 Jar,non-uber Jar 可以理解为瘦 Jar,瘦 Jar 里只包含自己写的代码,胖 Jar 里包含所有导入的依赖,但是现在举两个例子,比如要提交 Spark 程序,Spark 在服务器里部署时有一个 lib 目录,lib 目录内有各种各样的 jar 包,这些 Jar 包在 Spark 集群执行任务时会被加载到当前的上下文中,如果打了一个Uber Jar,而 Uber Jar 包含了引入的 Spark,那么和加载的 Jar 包就冲突了,它会把一些可能产生冲突的、依赖的 class 重命名。在提交 spark 任务时可以打一个 Non-Uber Jar,因为 spark 中已经加载了它所必备的一些内容。
3、需要导入一个 Kudu 的依赖包
根据使用 Hadoop 的版本不同, Kudu 的导入方式有两种, 一种是 CDH 版本的依赖,一种是 Apache 版本的依赖,我们当前使用 CDH 版本的依赖,所以需要导入如下包:
<dependency>
<groupId>org.apache.kudu</ groupId>
<artifactId>kudu-client</artifactId>
<version>1.7.0-cdh5.16.1</version>
<scope>provided</scope>
</dependency>
4、整个 Maven 文件如下所示
拷贝后放进工程中,这样整个初始环境就清楚了。