Kudu 使用_Java API_插入数据 | 学习笔记

简介: 快速学习 Kudu 使用_Java API_插入数据

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

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


Kudu 使用_Java API_插入数据


内容介绍:

一、如何插入数据

 

已经介绍了如何操作表,如何创建表,接下来要了解的是如何操作数据,也就是如何插入数据,依然使用 kudu Java API 进行数据的插入。一个是针对表的操作,一个是针对数据的操作,针对表的操作必须要分区,还必须提供 schema 信息,在插入数据的时候有什么样的限制呢?一起去了解一下。

 

一、如何插入数据

1、创建 KuduContext 对象

创建这个对象是为了能够操作 kudu Java API,也就是 KuduContext 其实是作为一个 API 的入口存在的。

2、创建 Table 对象来表示一张表

表示完表以后,针对 table的操作,面向对象是什么意思?有一个table 的对象,代表了 kudu 当中的一张表,对 table 对象的操作最终也会落到 kudu 当中,这就是表的意义。

3、创建 Parial Row 对象来表示要插入的数据

可以通过 table 对象创建 Parial Row 这样一个对象,这个对象说的是一部分行,就是一行的一部分数据,然后通过这个对象表示要插入的数据。

4、开启会话,使插入生效(传给 Kudu)

封装完数据以后就可以开启会话,然后插入生效。

这四个步骤是有一些逻辑的,最终是要开启会话让插入生效,但是开启会话以后要生效的是什么操作,是插入删除还是修改等等,要通过 Parial Row 这个对象来表示,这个对象是不是针对于某一张表的操作?针对于某一张表的操作,要使用 table 对象的方法,既然要得到一张表的对象,就必须使用 KuduContext,是环环相扣的。

@Test

def insertData(): Unit = {

val KUDU_ MASTER ="192.168.169.101:7051"

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

//得到表对象,表示对一个表进行操作

val table = kuduClient.openTable( name = "simple")

//表示操作,组织要操作的行数据

val insert = table.newInsert()

val row = insert.getRow

row.addstring( columnIndex= 0val = "A")

row.addstring( columnIndex= 1val = "1")

//开启会话开始操作

val session = kuduClient.newSession()

session.apply(insert)

}

}

接下来就去创建对应的方法,写下代码,首先还是 Test,然后 def,再去创建方法,这个方法叫做 insertDatainsertDate 第一步是创建 KuduContext,直接拿到 kuduClientkuduClient 怎么创建呢?New 一个 kuduclientbuilder,然后向其中提供 master 列表,直接把这两行代码拷过来就可以了,

val KUDU_MASTER = "192.168.169.101: 7051"

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

这是第一步。接下来可以得到表对象,表示对一个表进行操作,这是面向对象的思想。接下来还可以表示操作,组织要操作的行数据。第三步就可以开启会话,开始操作。

这是大概步骤,如果是这样的话,可以先去得到表对象,起码要告诉 kudu 要操作的是哪一张表。不要小瞧面向对象的操作,其实评价一个好的开发者和不好的开发者主要是有一个非常重要的点,就是它对于面向对象的理解,注意是面向对象的理解而不是对设计模式的掌握。因为过度的应用设计模式是对整体结构的一种破坏,在为了做一件事而去做一件事,后果是得不偿失的。但是如果能重视软件开发的六大原则,面向对象的六大原则,那么其实能写出比较好的代码,比如单一职责、理事转换。通过得到表的这一点,就是在看到这 kudu 提供 API 的时候,应该想这个 API 是怎么应用面向对象的,从而不断的提高自己面向对象的能力。但是面向对象不是过度设计,不要为了去面向对象而面向对象,是没有意义的。

kuduClient open 一个tableopenTable 的时候指定一下名字叫做 simple,这个 table 就得到了一个 table 对象,得到这个 table 对象以后可以针对于 table 对象 new 一个 insert,之后会得到一个 insert 对象。点进 newInsert

image.png

得到了一个 insert 对象,其实要做的操作就是一个 insert,也就是插入的一个操作。如果是这样的话,要插入什么是通过 insert 的对象来去.getRow 获取一个行对象,获取一个行对象以后就得到一个 row,通过这个行对象,向这个行对象当中增加内容,就相当于增加到了这个 insert 当中,row 对象代表一个行,针对于这个 row 对象来操作就是操作到这个行上了。从 insert 当中得到的这个行,所以就隐含了是一个插入。在这个 row 当中可以 addStringkudu 当中,它在操作这个表的时候 API 比较像 h base的,所以需要指定 columnIndex,要告诉它现在向第0列当中增加一个数据叫做 A,然后再向行当中添加 addstring,添加到第1个位置,添加内容叫 val = "1",这样就处理好了这个 row

之后就可以开启会话,因为 kudu 虽然不是关系型数据库,但是这些no circle 的数据库都在试图去支持一些事务,因为这个 show 很多时候一些简单的事务还是要用到的。虽然分布式事务之类的东西是不太容易见得到,但是简单的事务有的时候还是有必要的。开启这个会话,直接得到一个session 对象,通过 kuduClient,然后 new 一个 session 对象,之后可以 session.apply 去应用一个操作,这个操作是 insert 操作,这样插入数据的 API 就搞定了。

运行一下,等待它的运行结果。

image.png

有几个常见的错误,这个错误也是希望大家看到的,这个时候它报的这个错误意思是 cdh02.itcast.cn 这个 IP 获取不到 can not resolve,为什么刚才创建表的时候没有报这个错误,现在报呢?因为现在需要向具体的某一个 cdh02部署的是一个 tablet server, 要具体的向某一个 tablet server 当中的某一个 tablet 当中插入数据的时候就会出现这种问题,这种问题是因为整个过程是这样的,在创建表的时候,这有三台服务器,

image.png

这是 master,这是 cdh02,这是 cdh03,这是 master,这是两个 tablet server,在客户端当中创建表的时候它只需要跟 master 进行沟通说要创建一个表,那么 master 会去来这找它一下,来这找它一下,创建出来对应的 tablet server

插入数据的过程先要知道 master 要往哪个表里面插数据,master 会告诉表在哪个 tablet server 里,再去连对应的tablet server 来进行数据的插入,如果是这样的话,就要在客户端、程序当中连接服务器了,现在不能连接,因为它返回的IP是什么,返回的 hosts ch02.itcast.cn,解决这种问题的方式为打开我的电脑,然后进入到 C 盘当中,思路就是要去找到 hosts 文件,把刚才那一串东西配到 hosts 文件里,让你在本机上可以访问,可以通过主机名访问到虚拟机,这就可以了。这个时候找到 Windows,往下找一个 system32,再往下去找一个 drivers,之后再去找 etc,然后找到这个 hosts 文件,直接复制到桌面上,使用 Atom 打开 hosts 文件,打开了以后把 hosts 文件拉进来,然后修改这个 hosts

image.png

192.168.169.101 cdh01.itcast.cn,复制两遍,102对应的是 cdh02,103对应的是 cdh03,保存一下,然后用 Windows+D 回到桌面,复制这个文件,然后打开这个 etc 的目录,把刚才这个文件粘贴进来,

image.png

替换目标的 hosts 文件,这个时候就已经搞定了。其实就是在本机,让它能够通过域名、通过 FQDN 访问到虚拟机,通过主机名访问到虚拟机就可以。

这个时候再重新运行一下,

image.png

这时已经没有任何报错了,说明数据已经插入了。

相关文章
|
2月前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
2月前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
289 2
|
2月前
|
JSON 监控 API
小红书笔记评论API:一键获取分层评论与用户互动数据
小红书笔记评论API可获取指定笔记的评论详情,包括内容、点赞数、评论者信息等,支持分页与身份认证,返回JSON格式数据,适用于舆情监控、用户行为分析等场景。
|
2月前
|
数据采集 JSON API
微店API使用指南:高效获取商品列表数据
本文介绍如何使用Python爬虫调用微店item_search接口,根据关键词搜索商品并获取商品列表数据,涵盖请求方式、JSON数据解析、分页参数设置及筛选排序功能,适用于电商数据分析与竞品研究。
|
2月前
|
JSON API 数据格式
淘宝拍立淘按图搜索API系列,json数据返回
淘宝拍立淘按图搜索API系列通过图像识别技术实现商品搜索功能,调用后返回的JSON数据包含商品标题、图片链接、价格、销量、相似度评分等核心字段,支持分页和详细商品信息展示。以下是该API接口返回的JSON数据示例及详细解析:
|
2月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
2月前
|
XML JSON API
苏宁商品详情API秘籍!轻松获取商品详情数据
苏宁商品详情API基于RESTful架构,支持JSON/XML格式,通过AppKey、AppSecret与签名三重认证,结合OAuth 2.0实现安全调用。开发者可获取商品名称、价格、销量、库存、促销等实时数据,适用于电商分析与商业智能。接口强制使用HTTPS协议,支持POST/GET请求,统一采用UTF-8编码,确保数据传输安全可靠。
|
2月前
|
自然语言处理 监控 API
速卖通商品详情API秘籍!轻松获取SKU属性数据
速卖通商品详情API(aliexpress.item.get)支持通过编程获取商品标题、价格、SKU、库存、销量、物流模板、评价及店铺信息,适用于价格监控、选品分析等场景。接口支持多语言返回,采用AppKey+AppSecret+Token认证,需签名验证,确保安全调用。
|
2月前
|
安全 API
亚马逊商品详情 API 秘籍!轻松获取 SKU 属性数据
亚马逊商品详情API是官方接口,通过ASIN获取商品标题、价格、库存、评价等50余项数据,支持多站点查询。包含Product Advertising API与MWS两类,分别用于商品信息获取和卖家店铺管理,采用AWS4-HMAC-SHA256认证,保障请求安全。
|
2月前
|
XML 数据采集 API
用Lxml高效解析XML格式数据:以天气API为例
免费Python教程:实战解析中国天气网XML数据,详解Lxml库高效解析技巧、XPath用法、流式处理大文件及IP封禁应对策略,助你构建稳定数据采集系统。
207 0