hbase thrift java util

转载:https://github.com/ssw239/java-thrift-hbase-io/blob/master/HBaseThriftClient.java

pom.xml

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-thrift</artifactId>
    <version>1.3.1</version>
</dependency>

ThriftUtil.java

package hbase;

import java.lang.Object;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.hadoop.hbase.thrift.generated.BatchMutation;
import org.apache.hadoop.hbase.thrift.generated.Hbase;
import org.apache.hadoop.hbase.thrift.generated.IOError;
import org.apache.hadoop.hbase.thrift.generated.Mutation;
import org.apache.hadoop.hbase.thrift.generated.TCell;
import org.apache.hadoop.hbase.thrift.generated.TRowResult;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

public class ThriftUtil {
    protected Hbase.Client hbaseClient = null;
    private String hbaseAddr = "";
    private Integer hbasePort = 0;
    private TTransport socket = null;
    private TProtocol protocol = null;
    protected static final String CHAR_SET = "UTF-8";

    public ThriftUtil(String addr, Integer port) {
        hbaseAddr = addr;
        hbasePort = port;
        socket = new TSocket(hbaseAddr, hbasePort);
        protocol = new TBinaryProtocol(socket, true, true);
        hbaseClient = new Hbase.Client(protocol);
    }

    public static void main(String[] args) throws TTransportException {
        ThriftUtil hbaseClient = null;
        try {
            hbaseClient = new ThriftUtil("192.168.101.144", 9090);
            hbaseClient.openTransport();

            doSomeTest(hbaseClient);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            hbaseClient.closeTransport();
        }
    }

    public static void doSomeTest(ThriftUtil client) throws TException {
        String tableName = "test5";
        testScanTable(tableName, "", 1000, client);

        String rowKey_R1 = "r1";
        Map<String, String> kvpUpdate_r1 = new HashMap<String, String>();
        kvpUpdate_r1.put("cf:name", "val_20150618_0920_1");
        kvpUpdate_r1.put("cf:age", "12");
//        client.updateRow(tableName, rowKey_R1, kvpUpdate_r1);

        String rowKey_R2 = "r2";
        Map<String, String> kvpUpdate_r2 = new HashMap<String, String>();
        kvpUpdate_r2.put("cf:name", "val_201505181028_r2c1");
        kvpUpdate_r2.put("cf:age", "13");

        Map<String, Map<String, String>> rowBatchData = new HashMap<String, Map<String, String>>();
        rowBatchData.put(rowKey_R1, kvpUpdate_r1);
        rowBatchData.put(rowKey_R2, kvpUpdate_r2);
//        client.updateRows(tableName, rowBatchData);
        Map<String, String> attributes = new HashMap<String, String>();
//        List<TRowResult> rowRslts = client.getRow("test5", "r2", attributes);

        Map<String, String> kvpUpdate_bs = new HashMap<String, String>();
        kvpUpdate_bs.put("cf:name", "val_20150519_1352");
        kvpUpdate_bs.put("cf:age", "14");

//        client.updateRow(tableName, "r2", kvpUpdate_bs);

//        client.deleteCell(tableName, "r2", "cf:name");

        List<String> columns = new ArrayList<String>();
        columns.add("cf:name");
        columns.add("cf:age");
//        client.deleteCells(tableName, "r1", columns);


        client.deleteRow(tableName, "r1");

        testScanTable(tableName, "", 1000, client);
        System.out.println("Done.");
    }

    public static void testIterateRow(String tableName, String rowKey, ThriftUtil client) throws TException {
        Map<String, String> attributes = new HashMap<String, String>();
        List<TRowResult> results = client.getRow(tableName, rowKey, attributes);
        for (TRowResult rslt : results) {
            client.iterateResults(rslt);
        }
    }

    public static void testScanTable(String tableName, String startRow, int rowCnt, ThriftUtil client) throws TException {
        List<String> columns = new ArrayList<String>(0);
        Map<String, String> attributesTest = new HashMap<String, String>();
        int scannerID = client.scannerOpen(tableName, startRow, columns, attributesTest);
        try {
            List<TRowResult> scanResults = client.scannerGetList(scannerID,    rowCnt);
            while (scanResults != null && !scanResults.isEmpty()) {
                for (TRowResult rslt : scanResults) {
                    client.iterateResults(rslt);
                }
                scanResults = client.scannerGetList(scannerID, rowCnt);
            }
        } finally {
            client.scannerClose(scannerID);
        }
    }

    public void listTableNames(ThriftUtil client) throws TTransportException {
        List<String> tblNames = client.getTableNames();
        for (String name : tblNames) {
            System.out.println(">> " + name);
        }
    }

    public void deleteRow(String table, String rowKey) throws TException {
        ByteBuffer tableName = getByteBuffer(table);
        ByteBuffer row = getByteBuffer(rowKey);
        hbaseClient.deleteAllRow(tableName, row, getAttributesMap(new HashMap<String, String>()));
    }

    public void deleteCell(String table, String rowKey, String column) throws TException {
        List<String> columns = new ArrayList<String>(1);
        columns.add(column);
        deleteCells(table, rowKey, columns);
    }

    public void deleteCells(String table, String rowKey, List<String> columns) throws TException {
        boolean writeToWal = false;
        List<Mutation> mutations = new ArrayList<Mutation>();
        for (String column : columns) {
            mutations.add(new Mutation(false, getByteBuffer(column), null, writeToWal));
        }
        ByteBuffer tableName = getByteBuffer(table);
        ByteBuffer row = getByteBuffer(rowKey);
        hbaseClient.mutateRow(tableName, row, mutations, getAttributesMap(new HashMap<String, String>()));
    }

    public void updateRow(String table, String rowKey, Map<String, String> rowData) throws TException {
        boolean writeToWal = false;
        Map<String, String> attributes = new HashMap<String, String>();
        List<Mutation> mutations = new ArrayList<Mutation>();

        for(Map.Entry<String, String> entry : rowData.entrySet()) {
            mutations.add(new Mutation(false, getByteBuffer(entry.getKey()), getByteBuffer(entry.getValue()), writeToWal));
        }
        Map<ByteBuffer, ByteBuffer> wrappedAttributes = getAttributesMap(attributes);
        ByteBuffer tableName = getByteBuffer(table);
        ByteBuffer row = getByteBuffer(rowKey);
        hbaseClient.mutateRow(tableName, row, mutations, wrappedAttributes);
    }

    public void updateRows(String table, Map<String, Map<String, String>> rowBatchData) throws TException {
        boolean writeToWal = false;
        Map<String, String> attributes = new HashMap<String, String>();
        Map<ByteBuffer, ByteBuffer> wrappedAttributes = getAttributesMap(attributes);
        ByteBuffer tableNameByte = getByteBuffer(table);
        List<BatchMutation> rowBatches = new ArrayList<BatchMutation>();

        for(Entry<String, Map<String, String>> batchEntry : rowBatchData.entrySet()) {
            List<Mutation> mutations = new ArrayList<Mutation>();
            for (Map.Entry<String, String> rowData : batchEntry.getValue().entrySet()) {
                mutations.add(new Mutation(false, getByteBuffer(rowData.getKey()), getByteBuffer(rowData.getValue()), writeToWal));
            }
            BatchMutation batchMutation = new BatchMutation(getByteBuffer(batchEntry.getKey()), mutations);
            rowBatches.add(batchMutation);
        }
        hbaseClient.mutateRows(tableNameByte, rowBatches, wrappedAttributes);
    }

    public void iterateResults(TRowResult result) {
        Iterator<Entry<ByteBuffer, TCell>> iter = result.columns.entrySet().iterator();
        System.out.println("RowKey:" + new String(result.getRow()));
        while (iter.hasNext()) {
            Entry<ByteBuffer, TCell> entry = iter.next();
            System.out.println("\tCol=" + new String(toBytes(entry.getKey())) + ", Value=" + new String(entry.getValue().getValue()));
        }
    }

    public List<TRowResult> scannerGetList(int id, int nbRows)throws TException {
        return hbaseClient.scannerGetList(id, nbRows);
    }

    public List<TRowResult> scannerGet(int id) throws TException {
        return hbaseClient.scannerGetList(id, 1);
    }

    public int scannerOpen(String table, String startRow, String stopRow, List<String> columns,  Map<String, String> attributes) throws TException {
        ByteBuffer tableName = getByteBuffer(table);
        List<ByteBuffer> blist = getColumnsByte(columns);
        Map<ByteBuffer, ByteBuffer> wrappedAttributes = getAttributesMap(attributes);
        return hbaseClient.scannerOpenWithStop(tableName, getByteBuffer(startRow), getByteBuffer(stopRow), blist, wrappedAttributes);
    }

    public int scannerOpen(String table, String startRow, List<String> columns, Map<String, String> attributes) throws TException {
        ByteBuffer tableName = getByteBuffer(table);
        List<ByteBuffer> blist = getColumnsByte(columns);
        Map<ByteBuffer, ByteBuffer> wrappedAttributes = getAttributesMap(attributes);
        return hbaseClient.scannerOpen(tableName, getByteBuffer(startRow), blist, wrappedAttributes);
    }

    public void scannerClose(int id) throws TException {
        hbaseClient.scannerClose(id);
    }

    public List<ByteBuffer> getColumnsByte(List<String> columns) {
        List<ByteBuffer> blist = new ArrayList<ByteBuffer>();
        for(String column : columns) {
            blist.add(getByteBuffer(column));
        }
        return blist;
    }

    protected byte[] toBytes(ByteBuffer buffer) {
        byte[] bytes = new byte[buffer.limit()];
        for (int i = 0; i < buffer.limit(); i++) {
            bytes[i] = buffer.get();
        }
        return bytes;
    }

    public List<TRowResult> getRow(String table, String row, Map<String, String> attributes) throws TException {
        ByteBuffer tableName = getByteBuffer(table);
        Map<ByteBuffer, ByteBuffer> wrappedAttributes = getAttributesMap(attributes);
        return hbaseClient.getRow(tableName, getByteBuffer(row), wrappedAttributes);
    }

    public List<String> getTableNames() throws TTransportException {
        ArrayList<String> tableNames = new ArrayList<String>();
        try {
            for (ByteBuffer name : hbaseClient.getTableNames()) {
                tableNames.add(byteBufferToString(name));
            }
            return tableNames;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    private static Map<ByteBuffer, ByteBuffer> getAttributesMap(Map<String, String> attributes) {
        Map<ByteBuffer, ByteBuffer> attributesMap = null;
        if(attributes != null && !attributes.isEmpty()) {
            attributesMap = new HashMap<ByteBuffer, ByteBuffer>();
            for(Map.Entry<String, String> entry : attributes.entrySet()) {
                attributesMap.put(getByteBuffer(entry.getKey()), getByteBuffer(entry.getValue()));
            }
        }
        return attributesMap;
    }

    public static String byteBufferToString(ByteBuffer buffer) {
        CharBuffer charBuffer = null;
        try {
            Charset charset = Charset.forName(CHAR_SET);
            CharsetDecoder decoder = charset.newDecoder();
            charBuffer = decoder.decode(buffer);
            buffer.flip();
            return charBuffer.toString();
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public static ByteBuffer getByteBuffer(String str) {
        return ByteBuffer.wrap(str.getBytes());
    }

    public void openTransport() throws TTransportException {
        if (socket != null) {
            socket.open();
        }
    }

    public void closeTransport() throws TTransportException {
        if (socket != null) {
            socket.close();
        }
    }
}

demo:
https://github.com/ssw239/java-thrift-hbase-io/blob/master/HBaseThriftClient.java
https://github.com/randomtask1155/HbaseThriftTest/blob/master/src/main/java/io/pivotal/support/HbaseThriftTest.java
https://github.com/mypgether/study-demo
https://github.com/apache/hbase/blob/master/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java
https://github.com/randomtask1155/HbaseThriftTest/blob/master/src/main/java/io/pivotal/support/HbaseThriftTest.java

相关资料:
https://wiki.apache.org/hadoop/Hbase/ThriftApi
https://thrift.apache.org/
https://hbase.apache.org/1.2/apidocs/org/apache/hadoop/hbase/thrift/package-summary.html
https://blog.csdn.net/power0405hf/article/details/50068901
https://blog.csdn.net/guxch/article/details/12163047

猜你喜欢

转载自www.cnblogs.com/libin2015/p/9506558.html
今日推荐