Hbase关于Java常用API举例

摘要:
1.HBase相关对Admin操作的的API封装在HBaseAdmin中,封装了HBase常用操作的API使用方法:pom.xml˂!

1. HBase相关对Admin操作的的API封装在HBaseAdmin中,封装了HBase常用操作的API

使用方法:

pom.xml

  <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
      <dependency>
          <groupId>org.apache.hbase</groupId>
          <artifactId>hbase-client</artifactId>
          <version>0.98.5-hadoop2</version>
      </dependency>
1 packagecom.qunar.demo.hbase;
2 
3 importcom.google.common.base.Preconditions;
4 importcom.google.common.base.Strings;
5 importcom.google.common.collect.Lists;
6 importorg.apache.hadoop.conf.Configuration;
7 importorg.apache.hadoop.hbase.HBaseConfiguration;
8 importorg.apache.hadoop.hbase.HColumnDescriptor;
9 importorg.apache.hadoop.hbase.HTableDescriptor;
10 importorg.apache.hadoop.hbase.TableName;
11 importorg.apache.hadoop.hbase.client.HBaseAdmin;
12 importorg.junit.Test;
13 importorg.slf4j.Logger;
14 importorg.slf4j.LoggerFactory;
15 
16 importjava.io.IOException;
17 importjava.util.Iterator;
18 importjava.util.List;
19 
20 /**
21 * author: 龚细军
22 * class-aim:
23  */
24 public classCreateHBaseTable {
25 
26     private static Logger logger = LoggerFactory.getLogger(CreateHBaseTable.class);
27 
28     /*创建表单*/
29     public voidcreateTable(HBaseAdmin admin, String tableName,
30                             List<String> columnNames) throwsIOException {
31 
32 
33         Preconditions.checkArgument(!Strings.isNullOrEmpty(tableName), "table name is not allowed null or empty !");
34         Preconditions.checkArgument((null != columnNames && columnNames.size() > 0), "colume is not allowed empty !");
35         if (null ==admin) {
36             throw new IllegalStateException("admin is empty !");
37 }
38 
39         HTableDescriptor hTableDescriptor = newHTableDescriptor(TableName.valueOf(tableName));
40         for(String colName : columnNames) {
41             hTableDescriptor.addFamily(newHColumnDescriptor(colName));
42 }
43 admin.createTable(hTableDescriptor);
44 }
45 
46 @Test
47     public void _createMain() throwsIOException {
48 
49         Configuration conf =HBaseConfiguration.create();
50         HBaseAdmin admin = newHBaseAdmin(conf);
51         List list =Lists.newArrayList();
52         list.add("emp_col");
53         list.add("emp_col1");
54         list.add("emp_col2");
55         list.add("emp_col3");
56         this.createTable(admin, "emp", list);
57 }
58 
59     /*查询所有表单*/
60     public List<String>scanTables(HBaseAdmin admin) {
61 
62         HTableDescriptor[] hTableDescriptors = new HTableDescriptor[0];
63         if (null ==admin) {
64             throw new IllegalStateException("admin is empty !");
65 }
66         try{
67             hTableDescriptors =admin.listTables();
68         } catch(IOException e) {
69             logger.error("获取表单异常", e);
70 }
71         List<String> tmpList =Lists.newArrayList();
72         for(HTableDescriptor hTableDescriptor : hTableDescriptors) {
73 tmpList.add(String.valueOf(hTableDescriptor.getNameAsString()));
74 }
75         returntmpList;
76 }
77 
78 @Test
79     public void _scanTables() throwsIOException {
80         Configuration conf =HBaseConfiguration.create();
81         HBaseAdmin admin = newHBaseAdmin(conf);
82         List<String> tableNames = this.scanTables(admin);
83         Iterator iterator =tableNames.iterator();
84         while(iterator.hasNext()) {
85             //日志被收集了,使用下面方式打出
86             //logger.info(String.valueOf(iterator.next()));
87 System.out.println(String.valueOf(iterator.next()));
88 }
89 }
90 
91 
92 }

HBase对于客户端封装在client调用:

1 packagecom.qunar.demo.hbase;
2 
3 importcom.google.common.base.Strings;
4 importorg.apache.hadoop.conf.Configuration;
5 importorg.apache.hadoop.hbase.HBaseConfiguration;
6 importorg.apache.hadoop.hbase.client.Get;
7 importorg.apache.hadoop.hbase.client.HTable;
8 importorg.apache.hadoop.hbase.client.Put;
9 importorg.apache.hadoop.hbase.client.Result;
10 importorg.apache.hadoop.hbase.util.Bytes;
11 importorg.junit.Test;
12 importorg.slf4j.Logger;
13 importorg.slf4j.LoggerFactory;
14 
15 importjava.io.IOException;
16 
17 import staticcom.google.common.base.Preconditions.checkArgument;
18 
19 /**
20 * author: 龚细军
21 * class-aim: HBase客户端操作API使用
22  */
23 
24 public classHBaseClientDemo {
25 
26     private Logger logger = LoggerFactory.getLogger(HBaseClientDemo.class);
27     privateConfiguration configuration;
28 
29     /**
30 * 插入数据
31 *
32 * @paramconfiguration
33      */
34     public voidInsertData(Configuration configuration,
35 String table_Name, String row,
36 String col, String col_name, String value) {
37 
38         checkArgument(configuration != null, "configuration is null ");
39         checkArgument(!Strings.isNullOrEmpty(table_Name), "tableName is empty");
40         checkArgument(!Strings.isNullOrEmpty(row), "row is empty");
41         checkArgument(!Strings.isNullOrEmpty(col), "col is empty");
42         checkArgument(!Strings.isNullOrEmpty(col_name), "col_name is empty");
43         checkArgument(!Strings.isNullOrEmpty(value), "value is empty");
44         HTable hTable = null;
45 
46         try{
47             hTable = newHTable(configuration, table_Name);
48             Put put = newPut(Bytes.toBytes(row));
49 put.add(Bytes.toBytes(col), Bytes.toBytes(col_name), Bytes.toBytes(value));
50 hTable.put(put);
51         } catch(IOException e1) {
52             logger.error("put data Exception", e1);
53         } finally{
54             try{
55                 if (hTable != null) hTable.close();
56             } catch(IOException e) {
57                 logger.error("close HTable Exception", e);
58 }
59 }
60 }
61 
62     /**
63 * 获取数据
64      */
65     publicResult getData(Configuration configuration,
66 String table_Name, String row) {
67 
68         checkArgument(configuration != null, "configuration is null ");
69         checkArgument(!Strings.isNullOrEmpty(table_Name), "tableName is empty");
70         checkArgument(!Strings.isNullOrEmpty(row), "row is empty");
71         HTable hTable = null;
72         Result result = null;
73         try{
74             hTable = newHTable(configuration, table_Name);
75             Get get = newGet(Bytes.toBytes(row));
76             result =hTable.get(get);
77         } catch(IOException e1) {
78             logger.error("put data Exception", e1);
79         } finally{
80             try{
81                 if (hTable != null) hTable.close();
82             } catch(IOException e) {
83                 logger.error("close HTable Exception", e);
84 }
85 }
86         returnresult;
87 }
88 
89     /**
90 * 获取数据
91      */
92     publicResult getData(Configuration configuration,
93 String table_Name, String row,
94 String col) {
95 
96         checkArgument(configuration != null, "configuration is null ");
97         checkArgument(!Strings.isNullOrEmpty(table_Name), "tableName is empty");
98         checkArgument(!Strings.isNullOrEmpty(row), "row is empty");
99         checkArgument(!Strings.isNullOrEmpty(col), "col is empty");
100         HTable hTable = null;
101         Result result = null;
102         try{
103             hTable = newHTable(configuration, table_Name);
104             Get get = newGet(Bytes.toBytes(row));
105             result =hTable.get(get.addFamily(Bytes.toBytes(col)));
106         } catch(IOException e1) {
107             logger.error("put data Exception", e1);
108         } finally{
109             try{
110                 if (hTable != null) hTable.close();
111             } catch(IOException e) {
112                 logger.error("close HTable Exception", e);
113 }
114 }
115         returnresult;
116 }
117 
118 
119     /**
120 * 获取数据
121      */
122     publicResult getData(Configuration configuration,
123 String table_Name, String row,
124 String col, String col_name) {
125 
126         checkArgument(configuration != null, "configuration is null ");
127         checkArgument(!Strings.isNullOrEmpty(table_Name), "tableName is empty");
128         checkArgument(!Strings.isNullOrEmpty(row), "row is empty");
129         checkArgument(!Strings.isNullOrEmpty(col), "col is empty");
130         checkArgument(!Strings.isNullOrEmpty(col_name), "col_name is empty");
131         HTable hTable = null;
132         Result result = null;
133         try{
134             hTable = newHTable(configuration, table_Name);
135             Get get = newGet(Bytes.toBytes(row));
136             result =hTable.get(get.addColumn(Bytes.toBytes(col),
137 Bytes.toBytes(col_name)));
138         } catch(IOException e1) {
139             logger.error("put data Exception", e1);
140         } finally{
141             try{
142                 if (hTable != null) hTable.close();
143             } catch(IOException e) {
144                 logger.error("close HTable Exception", e);
145 }
146 }
147         returnresult;
148 }
149 
150 
151 @Test
152     public void_testPut() {
153         configuration =HBaseConfiguration.create();
154         this.InsertData(configuration, "emp", "2", "emp_col1", "name", "gongxijun");
155 }
156 
157 @Test
158     public void_testGet() {
159         configuration =HBaseConfiguration.create();
160         System.out.println(this.getData(configuration, "emp", "1","emp_col","name"));
161 }
162 
163 }

结果:

1 /home/gongxijun/java/jdk1.7.0_40/bin/java -ea -Didea.launcher.port=7535 -Didea.launcher.bin.path=/home/gongxijun/Qunar/idea-IU-139.1117.1/bin -Dfile.encoding=UTF-8 -classpath /home/gongxijun/Qunar/idea-IU-139.1117.1/lib/idea_rt.jar:/home/gongxijun/Qunar/idea-IU-139.1117.1/plugins/junit/lib/junit-rt.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/jfxrt.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/jce.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/jsse.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/javaws.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/rt.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/deploy.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/resources.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/management-agent.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/jfr.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/plugin.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/charsets.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/ext/sunec.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/ext/zipfs.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/ext/localedata.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/ext/sunjce_provider.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/ext/dnsns.jar:/home/gongxijun/java/jdk1.7.0_40/jre/lib/ext/sunpkcs11.jar:/home/gongxijun/gitlab/flume/target/classes:/home/gongxijun/.m2/repository/org/apache/flume/flume-ng-sdk/1.5.0.1/flume-ng-sdk-1.5.0.1.jar:/home/gongxijun/.m2/repository/org/apache/avro/avro/1.7.3/avro-1.7.3.jar:/home/gongxijun/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.8.8/jackson-core-asl-1.8.8.jar:/home/gongxijun/.m2/repository/com/thoughtworks/paranamer/paranamer/2.3/paranamer-2.3.jar:/home/gongxijun/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/snappy-java-1.0.4.1.jar:/home/gongxijun/.m2/repository/org/apache/avro/avro-ipc/1.7.3/avro-ipc-1.7.3.jar:/home/gongxijun/.m2/repository/org/mortbay/jetty/jetty/6.1.26/jetty-6.1.26.jar:/home/gongxijun/.m2/repository/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26.jar:/home/gongxijun/.m2/repository/org/apache/velocity/velocity/1.7/velocity-1.7.jar:/home/gongxijun/.m2/repository/io/netty/netty/3.5.12.Final/netty-3.5.12.Final.jar:/home/gongxijun/.m2/repository/org/apache/thrift/libthrift/0.7.0/libthrift-0.7.0.jar:/home/gongxijun/.m2/repository/org/apache/flume/flume-ng-sinks/flume-ng-elasticsearch-sink/1.5.0/flume-ng-elasticsearch-sink-1.5.0.jar:/home/gongxijun/.m2/repository/org/apache/flume/flume-ng-core/1.5.0/flume-ng-core-1.5.0.jar:/home/gongxijun/.m2/repository/org/apache/flume/flume-ng-configuration/1.5.0/flume-ng-configuration-1.5.0.jar:/home/gongxijun/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar:/home/gongxijun/.m2/repository/commons-cli/commons-cli/1.2/commons-cli-1.2.jar:/home/gongxijun/.m2/repository/joda-time/joda-time/2.1/joda-time-2.1.jar:/home/gongxijun/.m2/repository/org/mortbay/jetty/servlet-api/2.5-20110124/servlet-api-2.5-20110124.jar:/home/gongxijun/.m2/repository/com/google/code/gson/gson/2.2.2/gson-2.2.2.jar:/home/gongxijun/.m2/repository/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar:/home/gongxijun/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar:/home/gongxijun/.m2/repository/org/apache/httpcomponents/httpclient/4.2.1/httpclient-4.2.1.jar:/home/gongxijun/.m2/repository/org/apache/httpcomponents/httpcore/4.2.1/httpcore-4.2.1.jar:/home/gongxijun/.m2/repository/commons-lang/commons-lang/2.5/commons-lang-2.5.jar:/home/gongxijun/.m2/repository/org/apache/hbase/hbase-client/0.98.5-hadoop2/hbase-client-0.98.5-hadoop2.jar:/home/gongxijun/.m2/repository/org/apache/hbase/hbase-common/0.98.5-hadoop2/hbase-common-0.98.5-hadoop2.jar:/home/gongxijun/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar:/home/gongxijun/.m2/repository/org/apache/hbase/hbase-protocol/0.98.5-hadoop2/hbase-protocol-0.98.5-hadoop2.jar:/home/gongxijun/.m2/repository/commons-codec/commons-codec/1.7/commons-codec-1.7.jar:/home/gongxijun/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar:/home/gongxijun/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/home/gongxijun/.m2/repository/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar:/home/gongxijun/.m2/repository/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar:/home/gongxijun/.m2/repository/org/cloudera/htrace/htrace-core/2.04/htrace-core-2.04.jar:/home/gongxijun/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.8.8/jackson-mapper-asl-1.8.8.jar:/home/gongxijun/.m2/repository/org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0.jar:/home/gongxijun/.m2/repository/org/apache/commons/commons-math/2.1/commons-math-2.1.jar:/home/gongxijun/.m2/repository/xmlenc/xmlenc/0.52/xmlenc-0.52.jar:/home/gongxijun/.m2/repository/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar:/home/gongxijun/.m2/repository/commons-net/commons-net/3.1/commons-net-3.1.jar:/home/gongxijun/.m2/repository/com/sun/jersey/jersey-core/1.9/jersey-core-1.9.jar:/home/gongxijun/.m2/repository/com/sun/jersey/jersey-json/1.9/jersey-json-1.9.jar:/home/gongxijun/.m2/repository/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar:/home/gongxijun/.m2/repository/stax/stax-api/1.0.1/stax-api-1.0.1.jar:/home/gongxijun/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.3-1/jaxb-impl-2.2.3-1.jar:/home/gongxijun/.m2/repository/javax/xml/bind/jaxb-api/2.2.2/jaxb-api-2.2.2.jar:/home/gongxijun/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar:/home/gongxijun/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.8.3/jackson-jaxrs-1.8.3.jar:/home/gongxijun/.m2/repository/org/codehaus/jackson/jackson-xc/1.8.3/jackson-xc-1.8.3.jar:/home/gongxijun/.m2/repository/commons-el/commons-el/1.0/commons-el-1.0.jar:/home/gongxijun/.m2/repository/net/java/dev/jets3t/jets3t/0.6.1/jets3t-0.6.1.jar:/home/gongxijun/.m2/repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar:/home/gongxijun/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar:/home/gongxijun/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar:/home/gongxijun/.m2/repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar:/home/gongxijun/.m2/repository/com/jcraft/jsch/0.1.42/jsch-0.1.42.jar:/home/gongxijun/.m2/repository/org/apache/commons/commons-compress/1.4.1/commons-compress-1.4.1.jar:/home/gongxijun/.m2/repository/org/tukaani/xz/1.0/xz-1.0.jar:/home/gongxijun/.m2/repository/org/apache/hadoop/hadoop-auth/2.2.0/hadoop-auth-2.2.0.jar:/home/gongxijun/.m2/repository/org/apache/hadoop/hadoop-mapreduce-client-core/2.2.0/hadoop-mapreduce-client-core-2.2.0.jar:/home/gongxijun/.m2/repository/org/apache/hadoop/hadoop-yarn-common/2.2.0/hadoop-yarn-common-2.2.0.jar:/home/gongxijun/.m2/repository/org/apache/hadoop/hadoop-yarn-api/2.2.0/hadoop-yarn-api-2.2.0.jar:/home/gongxijun/.m2/repository/com/google/inject/guice/3.0/guice-3.0.jar:/home/gongxijun/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar:/home/gongxijun/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar:/home/gongxijun/.m2/repository/com/sun/jersey/jersey-server/1.9/jersey-server-1.9.jar:/home/gongxijun/.m2/repository/asm/asm/3.1/asm-3.1.jar:/home/gongxijun/.m2/repository/com/sun/jersey/contribs/jersey-guice/1.9/jersey-guice-1.9.jar:/home/gongxijun/.m2/repository/com/google/inject/extensions/guice-servlet/3.0/guice-servlet-3.0.jar:/home/gongxijun/.m2/repository/org/apache/hadoop/hadoop-annotations/2.2.0/hadoop-annotations-2.2.0.jar:/home/gongxijun/java/jdk1.7.0_40/lib/tools.jar:/home/gongxijun/.m2/repository/com/github/stephenc/findbugs/findbugs-annotations/1.3.9-1/findbugs-annotations-1.3.9-1.jar:/home/gongxijun/.m2/repository/com/google/guava/guava/18.0/guava-18.0.jar:/home/gongxijun/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/home/gongxijun/Qunar/idea-IU-139.1117.1/lib/junit-4.11.jar:/home/gongxijun/Qunar/idea-IU-139.1117.1/lib/hamcrest-core-1.3.jar:/home/gongxijun/Qunar/idea-IU-139.1117.1/lib/hamcrest-library-1.3.jar com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.qunar.demo.hbase.HBaseClientDemo,_testGet
2 log4j:WARN No appenders could be found forlogger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
3 log4j:WARN Please initialize the log4j system properly.
4 log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
5 keyvalues={1/emp_col:name/1467883522089/Put/vlen=8/mvcc=0}
6 
7 Process finished with exit code 0

免责声明:文章转载自《Hbase关于Java常用API举例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇socket网络编程(五)——粘包拆包问题CSS实例:图片导航块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RabbitMQ消息确定机制(自动ACK和手动ACK)

原文地址:https://blog.csdn.net/qq_29595463/article/details/109527115 文章目录1. 消息确定机制及其配置2. 自动确认和手动确认细节2.1 测试代码配置2.2 自动确认2.3 手动确认2.3.1 常用API2.3.2 代码案例3. 消息重回队列3.1 默认—消息nack后重回队头3.2 解决方案—...

【基础组件2】Flume入门(二)Agent

工作方式 Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。 Flume-ng最明显的改动...

Spring Boot中微信全局token的缓存实现

  为什么要缓存token? 这里的token指的是微信JSAPI中基础支持的ACCESS_TOKEN,并非网页授权ACCESS_TOKEN。网页授权Token每天的调用次数没有限制,不需要缓存。 接口 每日限额 获取access_token 2000 自定义菜单创建 1000 自定义菜单查询 10000 获取用户基本信息 5...

c#读入,写入文本文件

老师留下的作业最后一条题目用到了,就百度下找到了例子修改成两个函数子程序方便使用. //********************************************** //函数名:ReadFile //功能:把指定文本内的数据读出并返回 //参数: FileName文件名 //返...

Web前端开发工程师编程能力飞升之路

【背景】 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧;如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧;如果你是四五年的前端开发高手,没有难题能难得住你的寂寞高手,来看这篇文章吧; web前端研发工程师,在国内是一个朝阳职业,自07-08年正式有这个职业以来,也不过三四年的时间。这个领域没有学校的正规教育,没有...

Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理。 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下推崇最高的两种ORM工具。 1、EntityFramework是出自微软根正苗红的.net下的ORM工具,直接在Vs工具和Mvc框架中集成了,默认生成的项目就...