Hbase之使用回调函数进行批处理操作

import org.apache.hadoop.conf.Configuration;
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;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;

/**
 使用回调函数进行批处理操作
 */
public class BatchOperationsWithCallbacks {
    public static void main(String[] args) throws IOException{
        Configuration configuration = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(configuration);
        //建立表的连接
        Table table = connection.getTable(TableName.valueOf("testtable"));
        List<Row> batch = new ArrayList<Row>();
        byte[] ROW= Bytes.toBytes("10000");
        byte[] ROW1=Bytes.toBytes("10000");
        byte[] ROW2=Bytes.toBytes("10000");
        byte[] COLFAM2=Bytes.toBytes("colfam1");
        byte[] COLFAM1=Bytes.toBytes("colfam1");
        byte[] QUAL1=Bytes.toBytes("company");
        byte[] QUAL2=Bytes.toBytes("company2");
        Put put = new Put(ROW2);
        put.addColumn(COLFAM2, QUAL1, 4, Bytes.toBytes("val5"));
        batch.add(put);
        Get get1 = new Get(ROW1);
        get1.addColumn(COLFAM1, QUAL1);
        batch.add(get1);
        Delete delete = new Delete(ROW1);
        delete.addColumns(COLFAM1, QUAL2);
        batch.add(delete);
        Get get2 = new Get(ROW2);
        get2.addFamily(Bytes.toBytes("BOGUS"));
        batch.add(get2);
        Object[] results = new Object[batch.size()];
        try {
            table.batchCallback(batch, results, new Batch.Callback<Result>() {
                @Override
                public void update(byte[] region, byte[] row, Result result) {
                    System.out.println("Received callback for row[" + Bytes.toString(row) + "] -> " + result);
                } });
        } catch (Exception e) {
            System.err.println("Error: " + e);
        }
        for (int i = 0; i < results.length; i++) {
            System.out.println("Result[" + i + "]: type = " +
                    results[i].getClass().getSimpleName() + "; " + results[i]);
        }
table.close();connection.close();
} }
时间: 2024-10-07 04:05:28

Hbase之使用回调函数进行批处理操作的相关文章

WCF 服务器调用回调函数 单程-双程操作模式:

服务器端Server 实现回调接口Interface定义.客户端实现回调接口Interface实现,从而实现服务器端通过 var channel = OperationContent.Current.GetCallbackChannel</*接口类名*/>(); 获取回调实例对象channel; 通过channel可以在服务器端调用客户端的实现相关回调接口. 在分布式服务器中 实现心跳包的方式绝大部分使用了这种方法. 可轻松 使用 基于双程模式 + delegate 实现 事件驱动型集群分布式

C++ 回调函数的定义与用法

一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢? 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数. 而 那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作.至于如何定义回调函数,跟具体使用的 A

回调函数以及钩子函数的概念

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统.每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权.这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递.对每种类型的钩子由系统来维护一个钩子链,最近安装的钩子放在链的开始,而最先安装的钩子放在最后,也就是后加入的先获得控制权.要实现Win32的系统钩子,必须调用SDK中的API函数SetWindowsHookEx来安装这个钩子函数,这个函数的原型是

使用回调函数处理数组的函数

函数的回调是PHP中的一种特殊机制,这种机制允许在函数的参数列表中,传入用户自定义的函数地址作为参数处理或完成一定的操作.使用回调函数可以很容易地显示一些所需的功能.以下将介绍主要的几个使用回调函数处理数组的函数. ①函数array_filter()array_filter函数用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组.该函数有两个参数,其函数的原型如下: array array_filter(array input [,callback callback]) 该函数的第一个

C++回调函数用法

一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢? 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数. 而 那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作.至于如何定义回调函数,跟具体使用的 A

回调函数案例(二)

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /**************************************** 5 * 函数指针结构体 6 ***************************************/ 7 typedef struct _OP 8 { 9 float (*p_add)(float, float); 10 float (*p_sub)(float, float); 11 float

CKFinder 弹出窗口操作并设置回调函数

CKFinder 弹出窗口操作并设置回调函数 官方例子参考CKFinderJava-2.4.1/ckfinder/_samples/popup.html 写一个与EXT集成的小例子 Ext.define("MyButton", { extend : "Ext.Button", text : "ckfinder", initComponent : function() { var me = this; Ext.apply(me, { handler

通过修改i8042prt端口驱动中类驱动Kbdclass的回调函数地址,达到过滤键盘操作的例子

同样也是寒江独钓的例子,但只给了思路,现贴出实现代码 原理是通过改变端口驱动中本该调用类驱动回调函数的地方下手 //替换分发函数 来实现过滤 #include <wdm.h> #include <ntddk.h> #include <Ntddkbd.h> #include <windef.h> // Kbdclass驱动的名字 #define KBD_DRIVER_NAME L"\\Driver\\Kbdclass" //ps2的端口驱动

python 文件操作,os.path.walk()的回调函数打印文件名

#coding=utf-8 import osdef find_file(arg,dirname,files):    #for i in arg:        #print i for file in files:        file_path=os.path.join(dirname,file)        print 'file_path:',file_path        if os.path.isfile(file_path) and (arg[0] in file or a