HBase Java API 开发:表的扫描与扫描的缓存和批量处理 第1关:批量处理

这篇具有很好参考价值的文章主要介绍了HBase Java API 开发:表的扫描与扫描的缓存和批量处理 第1关:批量处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

批量操作

如果我们去查看HBaseAPI的源码会发现,在上次实训中我们使用的delete、get,put这些批量操作,实际上都是调用了batch()方法。

查看put(List<Put> puts)函数源码:

HBase Java API 开发:表的扫描与扫描的缓存和批量处理 第1关:批量处理

HBase Java API 开发:表的扫描与扫描的缓存和批量处理 第1关:批量处理

我们可以发现put(List<Put> puts)方法最终还是调用的batch(final List<? extends Row> actions, final Object[] results, int rpcTimeout),其他getdelete的批量操作也同样。

所以我们如果既有get操作又有Put操作那是不是可以整合在一起呢?

答案是肯定的。

我们来看个例子:

List<Row> rows = new ArrayList<>();
//上传操作
Put put = new Put(Bytes.toBytes("row1"));
put.addColumn(Bytes.toBytes("data"),Bytes.toBytes("2"), Bytes.toBytes("value1"));
rows.add(put);
//删除操作
Delete delete = new Delete(Bytes.toBytes("row1"));
delete.addColumn(Bytes.toBytes("data"),Bytes.toBytes("1"));
rows.add(delete);
//获取操作
Get get = new Get(Bytes.toBytes("row1"));
get.addColumn(Bytes.toBytes("data"),Bytes.toBytes("2"));
rows.add(get);
//定义结果数组长度
Object[] results = new Object[rows.size()];
table.batch(rows, results);//这是一个同步的操作,批量操作的结果将会在操作之后放在results中
for (Object object : results) {
System.out.println(object.toString());
}

上述代码deleteput操作的结果为keyvalues=NONE,即没有结果,当然如果get操作没有获取到结果也会输出keyvalues=NONE。 有结果则会输出类似这样的数据:keyvalues={row1/data:1/1543220978519/Put/vlen=7/seqid=0} 是一个Result类型的对象。

值的注意的是:最好不要将put和delete操作放在同一个批处理的请求中,因为这样会有很大的风险。在学习多线程的时候我们学过多线程三大特性之一有序性,也许会因为其他原因导致操作的实现顺序不同,这样会产生不可预料的结果,还有就是资源竞争,会使结果波动。

上述使用的是同步的方式进行批量操作,其实API还提供了一个异步执行的方法

table.batchCallback(actions, results, callback):


batchCallback(
final List<? extends Row> actions, final Object[] results, final Batch.Callback<R> callback)
 

在我们需要使用异步执行批量操作,并且想要获取异步执行结果的时候可以考虑使用batchCallback()方法,Batch.Callback<R> callback就是异步执行结果的监听器。

编程要求

纸上得来终觉浅,我们来实际操练吧,在右侧编辑器begin-end处编写代码补全batchOp(String tablename) 函数,参数:tablename为待操作表的表名,要求实现如下操作:

  • 删除表中行键为row1row2的行;

  • 获取表中行键为row3row10的行;

  • 四个操作需要依照以上先后顺序,即先删除在获取row3,row10

不需要你直接输出,只需要将批量操作的执行结果作为返回值返回即可

package step1;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.client.coprocessor.Batch;
import org.apache.hadoop.hbase.util.Bytes;
public class Task {
 public Object[] batchOp(String tablename) throws Exception {
   /********* Begin *********/
   Configuration conf = HBaseConfiguration.create();
   Connection conn = ConnectionFactory.createConnection(conf);
   Table table = conn.getTable(TableName.valueOf(tablename));
   List<Row> rows = new ArrayList<>();
   //删除操作
   Delete delete = new Delete(Bytes.toBytes("row1"));
   Delete delete2 = new Delete(Bytes.toBytes("row2"));
   rows.add(delete);
   rows.add(delete2);
   //获取操作
   Get get = new Get(Bytes.toBytes("row3"));
   Get get2 = new Get(Bytes.toBytes("row10"));
   rows.add(get);
   rows.add(get2);
   //定义结果数组长度
   Object[] results = new Object[rows.size()];
   table.batch(rows, results);//这是一个同步的操作,批量操作的结果将会在操作之后放在results中
   //delete和put操作的结果为NONE 即没有结果
   return results;
   /********* End *********/
 }
}

start-dfs.sh

start-hbase.sh文章来源地址https://www.toymoban.com/news/detail-486024.html

到了这里,关于HBase Java API 开发:表的扫描与扫描的缓存和批量处理 第1关:批量处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Hbase】hbase的java api操作(3)

    目录 这篇文章的源码比较多,需要的私信我 需求与数据集 准备工作 下载安装maven 下载安装idea 配置国内的maven镜像库 创建一个maven工程 修改pom文件,导入相关的依赖 复制Hadoop的配置文件core-site.xml和HBase的配置文件hbase-site.xml到resources目录中 创建包结构 创建hbase连接类及管理

    2023年04月12日
    浏览(36)
  • HBase Java API编程实践

    本实例采用Eclipse开发工具。 启动Eclipse,启动以后,出现如下图所示界面,点击ok按钮。 启动进入Eclipse以后的程序开发界面如下图所示。 点击界面顶部的“File”菜单,在弹出的子菜单(如下图所示)中选择“New”,再选择子菜单中的“Project”。 这时会弹出一个Java工程创建

    2024年02月05日
    浏览(38)
  • HBASE-JAVA-API

    Hbse-Java Api 基础知识 初始化 这段代码初始化了一个连接到Apache HBase数据库的过程。以下是每行代码的作用: Configuration conf = HBaseConfiguration.create(); :创建了一个新的HBase配置对象。 conf.set(\\\"hbase.zookeeper.quorum\\\", \\\"master:2181,node1:2181,node2:2181\\\"); :设置了HBase用于协调的ZooKeeper群集服务

    2024年01月17日
    浏览(41)
  • 基于hadoop的HBase JAVA API

    摘要:   HBase的Java API提供了一种与HBase数据库进行交互的方式,通过编写Java程序可以连接到HBase集群并对数据进行存储、检索和处理。该API适用于大规模数据存储、实时数据访问和高扩展性需求的场景。具有高可靠性、高扩展性和高性能的特点。它可以处理海量数据,并且支

    2024年02月03日
    浏览(47)
  • Java API批量操作Elasticsearch

    @Test public void batchAddIndex() throws IOException { BulkRequestBuilder bulkRequest = client .prepareBulk(); bulkRequest.add( client .prepareIndex( “batch_test1” , “batch” , “1” ) .setSource( jsonBuilder () .startObject() .field( “user” , “lzq” ) .field( “postDate” , new Date()) .field( “message” , “trying out Elasticsearch”

    2024年04月09日
    浏览(44)
  • Java 数据结构篇-实现双链表的核心API

    🔥博客主页:  小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍       文章目录         1.0 双链表的说明         1.1 双链表 - 创建         1.2 双链表 - 根据索引查找节点         1.3 双链表 - 根据索引插入节点         1.4 双链表 - 头插节点         1.5 双链表 - 尾插

    2024年02月04日
    浏览(58)
  • Elasticsearch批量插入数据 java api

    在java代码开发中一般通过client api来对es进行CRUD操作。在想es插入数据时,有时候需要对数据进行批量插入。这时候可以使用bulk来实习批量插入操作,创建一个BulkRequest,接着遍历数据列表,在BulkRequest中添加每一条数据的IndexRequest。由于IndexRequest是插入单条数据,因此每一次

    2024年02月11日
    浏览(54)
  • 在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行

    在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行。以下是使用HBase Shell进行查询的一些示例: 单行查询:获取指定行键的数据。 扫描表:按行范围获取表中的多个行的数据。 过滤器查询:使用过滤器指定查询条件来获取数据。 列族查询:获取指

    2024年01月21日
    浏览(46)
  • 【java安全扫描】 HCL AppScan Standard安全报告:API 成批分配问题

    API 成批分配说明 原因: 如果 API 端点自动将提供数据的客户机转换为内部对象属性,而不考虑这些属性的敏感度和暴露水平,则 API 端点容易受到成批分配攻击。 风险: API 成批分配利用可能导致特权升级、数据篡改、绕过安全机制。 修订建议: 常规 避免使用自动将客户机

    2024年02月11日
    浏览(36)
  • HBase 开发:使用Java操作HBase

    通过Java代码操作HBase数据库,包括创建表、添加数据、获取数据和删除表等操作。学习如何使用HBaseConfiguration和ConnectionFactory连接HBase数据库,以及如何使用Admin对象创建表、Put对象添加数据、Get对象获取数据和删除表。

    2024年01月15日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包