CellUtil:createCell方法中的键类型

时间:2016-05-30 00:36:29

标签: java hadoop hbase

我正在使用 org.apache.hadoop.hbase 中打包的 CellUtil 类来创建 Cell 对象。函数标题如下所示:

public static Cell createCell(byte[] row, byte[] family, byte[] qualifier, long timestamp, byte type, byte[] value)

第五节是什么?参数字节类型表示?我查看了KeyValueType类,它引用了一个名为Type的枚举,其定义如下:

public static enum Type {
Minimum((byte)0),
Put((byte)4),

Delete((byte)8),
DeleteFamilyVersion((byte)10),
DeleteColumn((byte)12),
DeleteFamily((byte)14),

// Maximum is used when searching; you look from maximum on down.
Maximum((byte)255);

private final byte code;

Type(final byte c) {
  this.code = c;
}

public byte getCode() {
  return this.code;
}

我的问题是,什么类型的最小值,放置等与我想要创建的单元格类型有关?

1 个答案:

答案 0 :(得分:3)

沙林, 请参阅69.7.6. KeyValue

在某些情况下,您将使用这些枚举。例如,我正在写下面的协处理器然后我将使用KeyValue.Type.Put.getCode() 类似地,其他枚举也可以像这样使用。 请参阅下面的协处理器使用示例...

package getObserver;

import java.io.IOException;
import java.util.List;
import java.util.NavigableSet;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;

public class Observer extends BaseRegionObserver{

    private boolean isOewc;

    @Override
    public void preGetOp(ObserverContext<RegionCoprocessorEnvironment> arg0,
            Get arg1, List<Cell> arg2) throws IOException {
        NavigableSet<byte[]> qset = arg1.getFamilyMap().get("colfam1".getBytes());
        if(qset==null){//do nothing

        }else{

            String message = "qset.size() = "+String.valueOf(qset.size());
            String m = "isOewc = "+String.valueOf(isOewc);
            this.isOewc = true;
            Cell cell = CellUtil.createCell(
                    "preGet Row".getBytes(), 
                    m.getBytes(), 
                    message.getBytes(), 
                    System.currentTimeMillis(), 
                    KeyValue.Type.Put.getCode(), 
                    "preGet Value".getBytes());
            arg2.add(cell);
        }
    }

    @Override
    public void postGetOp(ObserverContext<RegionCoprocessorEnvironment> arg0,
            Get arg1, List<Cell> arg2) throws IOException {
        String m = "isOewc = "+String.valueOf(isOewc);
        Cell cell = CellUtil.createCell(
                "postGet Row".getBytes(), 
                m.getBytes(), 
                "postGet Qualifier".getBytes(), 
                System.currentTimeMillis(), 
                KeyValue.Type.Put.getCode(), 
                "postGet Value".getBytes());
        arg2.add(cell);
    }
}
  

如果您不知道哪个,可以使用EnumTypes以下的其他内容   您要在协处理器事件上执行的操作..

enter image description here

programcreek examples清楚地解释了Put,Delete(准备突变的键值对)最大值,最小值(用于范围检查)的用法。以上示例的协处理器使用Put。