• 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("	Col=" + 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

  • 相关阅读:
    Silverlight Toolkit ListBoxDragDropTarget学习笔记
    函数指针和指针函数(转)
    面试题_反转链表
    C++中的异或运算符^
    面试题_旋转字符串
    面试题_寻找丑数
    模拟一个简单的基于tcp的远程关机程序
    管理指针成员
    赫夫曼树编码问题
    堆的基本操作
  • 原文地址:https://www.cnblogs.com/libin2015/p/9506558.html
Copyright © 2020-2023  润新知