HBase 二次开发 java api和demo

摘要:
因为hbaseclient需要连接到zookeeper以获取hbase的hmast信息——hbase集群中有多个hmast。在eclipse中构建一个java项目---------------------------------------packagehbasedemo;importjava.io.io异常;importorg.apach.hadoop.conf.Configuration;importorg.apach.hadoop.hbase.HBaseConfiguration;importorg.apach.hadoop.hbase.client.HBaseAdmin;importorg.apache.hadoop.hbase.HTableDescriptor;importorg.apach.hadoop.hbase.HC列描述符;importorg.apach.hadoop.hbase.TableName;PublicclassMain{publicstaticvoidmaintrowsIOException{Configurationhbase_conf=newConfiguration();hbase_conf.set;//brianxxxooo是A中动物管理员计算机的主机名hbase_conf/set;Configurationconf=HBaseConfiguration.create;Stringtablename=“scores”;String[]系列={“grade”,“course”};HBaseAdminadmin=newHBaseAdmin;如果{System.out.println(“tableexist,return!”);return;}HTableDescriptortd=newHTableDescriptor;对于{td.addFamily;}admin.createTable;System.out.println;}}-----------------------------------------9.注意,hbaseclient的版本号变化很大。详细的api调用应该基于版本号。有时需要引用多个版本号。例如,HTableDescriptor为0.96。x更接近http://hbase.apache.org/apidocs/index.html而不是0.94。然而,HBaseAdmin在0.94中有一个api,但在2.0.0中没有。
1. 试用thrift python/java以及hbase client api。结论例如以下:
    1.1 thrift的安装和公布繁琐。可能会遇到未知的错误,且hbase.thrift的版本号在变化中。

长处代码简单,须要打包的内容少。

    1.2 hbase client api,须要的jar非常多,公布版的容量也非常大。打包后近百兆。

长处是。明白。无歧义。


2. 推荐用hbase client api的方式搞定。

3. 下面均为技术细节。

4. 有一台机器/一个集群,在执行hadoop,也执行了基于这个hadoop集群的hbase集群,同一时候,也执行了一个zookeeper集群,我们统称它是A。


5. 有一台集群负责开发,我们在上面写代码。编译代码,执行代码。我们称它是B。

6. 在B上,要改动/etc/hosts,把A的随意一台zookeeperserver的hostname和相应的ip地址放进去。由于hbase client须要连接到zookeeper,以便获得hbase的hmast信息---hbase集群有多个hmast。一个是主hmast。其它是备用hmaster,假设主hmaster挂了,备用的会顶上,避免单点故障问题。

7. 在B上开发。在elipse建立一个java项目。加入一个lib文件夹,把A上的hadoop, hbase, zookeeper的全部jar包,注意。是全部jar包,各级子文件夹的也算在内,都拷贝到lib文件夹。大概有130个左右,90M。然后,再把它们加入到buildpath。这么做的优点是,不用一点点找到底哪个类在哪个包。生命短暂,不要把时间浪费在这里。浪费点磁盘空间没关系。

    假设hadoop,hbase, zookeeper都安装在一个文件夹下,能够用一个shell语句搞定:
    for i in `find . -name "*.jar"`;      do cp $i ~/alljars;    done;
    然后再把alljars下的jar包都拷贝到B的lib文件夹。

8. 写一个最简单的hbase demo。在hbase里检查一个表是否存在,假设不存在,就创建它。
-----------------------------------------
package hbasedemo;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.TableName;

public class Main {

public static void main(String[] args) throws IOException{
Configuration hbase_conf = new Configuration();
hbase_conf.set("hbase.zookeeper.quorum", "brianxxxooo"); //brianxxxooo是A里的zookeeper机器的hostname
hbase_conf.set("hbase.zookeeper.property.clientPort","2181");
Configuration conf = HBaseConfiguration.create(hbase_conf);

String tablename="scores";
String[] familys = {"grade", "course"};

HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists(tablename)){
System.out.println("table exist, return!");
return;
}

HTableDescriptor td = new HTableDescriptor(TableName.valueOf(tablename));
for(int i = 0; i < familys.length; i++){
td.addFamily(new HColumnDescriptor(familys[i]));
}
admin.createTable(td);
System.out.println("create table "+tablename+" ok.");

}
-----------------------------------------

9. 注意事项,hbase client的版本号变化甚多,详细api调用要依据版本号来,有时候须要參考多个版本号来。比方,0.96.x的HTableDescripter更接近http://hbase.apache.org/apidocs/index.html  , 而不是0.94的api。

但HBaseAdmin在0.94的api是有的,在2.0.0里没有。很混乱。

预计这个局面还要持续一段时间。


10. 更具体的样例
------------------------------------------
package hbasedemo;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

public class Main {

public static void main(String[] args) throws IOException{
Configuration hbase_conf = new Configuration();
hbase_conf.set("hbase.zookeeper.quorum", "brianvxxxxooooo");
hbase_conf.set("hbase.zookeeper.property.clientPort","2181");
Configuration conf = HBaseConfiguration.create(hbase_conf);

String tablename="scores";
String[] familys = {"grade", "course"};

HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists(tablename)){
System.out.println("table exist!");
}else{
HTableDescriptor td = new HTableDescriptor(TableName.valueOf(tablename));
for(int i = 0; i < familys.length; i++){
td.addFamily(new HColumnDescriptor(familys[i]));
}
admin.createTable(td);
System.out.println("create table "+tablename+" ok.");
}

HTable table = new HTable(conf, "scores");
Put put = new Put(Bytes.toBytes("row1"));

//create
put.add(Bytes.toBytes("grade"), Bytes.toBytes("g1"), Bytes.toBytes(781));
put.add(Bytes.toBytes("grade"), Bytes.toBytes("g2"), Bytes.toBytes("this is test"));
table.put(put);

//read
Get get = new Get(Bytes.toBytes("row1"));
get.addColumn(Bytes.toBytes("grade"), Bytes.toBytes("g1"));
Result result = table.get(get);
byte[] val = result.getValue(Bytes.toBytes("grade"), Bytes.toBytes("g1"));
System.out.println(Bytes.toInt(val));


}
------------------------------------------

其它各种操作于此相似,不再一一列出。

免责声明:文章转载自《HBase 二次开发 java api和demo》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇软件project--作图程序的思考之中的一个个能够检验你指针理解功力的程序下篇

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

相关文章

Hadoop(十七)之MapReduce作业配置与Mapper和Reducer类

阅读目录(Content) 一、作业的默认配置 二、作业的配置方式 三、Mapper类和Reducer类以及它们的子类(实现类) 3.1、Mapper概述 3.2、Reducer概述 3.2、写一个实例去使用 前言 前面一篇博文写的是Combiner优化MapReduce执行,也就是使用Combiner在map端执行减少reduce端的计算量。 回...

【Hadoop 分布式部署 四:配置Hadoop 2.x 中主节点(NN和RM)到从节点的SSH无密码登录】

******************* 一定要使这三台机器的用户名相同,安装目录相同 ************* SSH无密钥登录的简单介绍(之前再搭建本地伪分布式的时候,就生成了,现在这三台机器的公钥私钥都是一样的,所以下面这个不用配置) 单机操作: 生成密钥:命令ssh-keygen-trsa 然后四个回车 将密钥复制给本机...

SparkStreaming整合Kafka(Offset保存在Hbase上,Spark2.X + kafka0.10.X)

继续SparkStreaming整合Kafka 其实将offset保存在zookeeper上不适用于高并发的情况的,于是乎,借鉴上次的代码。将offset保存在Hbasea上的方法也大概写了一下,暂时运行起来是没有问题的。 直接上代码(代码比较粗糙,但是思路应该还算清晰): package com.kafka import scala.collectio...

Hadoop实战之二~ hadoop作业调度详解(1)

对Hadoop的最感兴趣的地方,也就在于Hadoop的作业调度了,在正式介绍如何搭建Hadoop之前,深入理解一下Hadoop的作业调度很有必要。我们不一定能用得上Hadoop,但是如果理通顺Hadoop的分布式调度原理,在有需要的时候未必不能自己写一个Mini Hadoop~: ) 开始 本文转载自:http://www.cnblogs.com/shipe...

【Hadoop离线基础总结】MapReduce 社交粉丝数据分析 求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?

MapReduce 社交粉丝数据分析 求出哪些人两两之间有共同好友,及他俩的共同好友都有谁? 用户及好友数据 A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D,E,F H:A,C,D,E,O I:...

python字符串str和字节数组相互转化

1 #bytes object 2 b = b"example" 3 4 #str object 5 s = "example" 6 7 #str to bytes 8 bytes(s, encoding = "utf8") 9 10 #bytes to str 11 str(b, encoding = "utf-8")...