• 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

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/libin2015/p/9506558.html
Copyright © 2020-2023  润新知