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的更多相关文章

  1. HBase学习(二) 基本命令 Java api

    一.Hbase shell 1.Region信息观察 创建表指定命名空间 在创建表的时候可以选择创建到bigdata17这个namespace中,如何实现呢? 使用这种格式即可:'命名空间名称:表名' ...

  2. HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码

    版本 HDP:3.0.1.0 HBase:2.0.0 一.前言 之前的文章也提到过,最近工作中需要对HBase进行二次开发(参照HBase的AES加密方法,为HBase增加SMS4数据加密类型).研究 ...

  3. Ubuntu下搭建Hbase单机版并实现Java API访问

    工具:Ubuntu12.04 .Eclipse.Java.Hbase 1.在Ubuntu上安装Eclipse,可以在Ubuntu的软件中心直接安装,也可以通过命令安装,第一次安装失败了,又试了一次,开 ...

  4. HBase 增删改查Java API

    1. 创建NameSpaceAndTable package com.HbaseTest.hdfs; import java.io.IOException; import org.apache.had ...

  5. ElasticSearch7.3学习(二十三)----RestHighLevelClient Java api实现match_all、ids、match、term、multi_match、bool、filter、sort等不同的搜索方式

    1.数据准备 首先创建book索引 PUT /book/ { "settings": { "number_of_shards": 1, "number ...

  6. hadoop学习记录(二)HDFS java api

    FSDateinputStream 对象 FileSystem对象中的open()方法返回的是FSDateInputStream对象,改类继承了java.io.DateInoutStream接口.支持 ...

  7. python开发初期及二次开发C api

    1,python2 or python 区别, https://wiki.python.org/moin/Python2orPython3 python software foundation 2,p ...

  8. HBase里的官方Java API

    见 https://hbase.apache.org/apidocs/index.html

  9. ElasticSearch排序Java api简单Demo

    代码: String time1 = ConstValue.GetCurrentDate(); SortBuilder sortBuilder = SortBuilders.fieldSort(&qu ...

随机推荐

  1. 字符集导致乱码问题,gi安装问题

    今天是2014-4-24,今天中午收到一个天津网友问的一个安装gi的问题,和一个网友问的字符集问题:在此整理一下 问题一: gi安装问题: 问题描写叙述: 在安装gi的时候提示:"INS-2 ...

  2. 70个shell经常使用操作

    1) 怎样向脚本传递參数 ? ./script argument 样例: 显示文件名脚本 ./show.sh file1.txt cat show.sh #!/bin/bash echo $1 2) ...

  3. I2C和SPI

    I2C(Inter-Integrated Circuit)总线 两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同步通信的一种特殊形式,具有接口线少,控制 ...

  4. 为什么逻辑斯特回归(logistic regression)是线性模型

    一个典型的logistic regression模型是: 这里明明用了非线性函数,那为什么logistic regression还是线性模型呢? 首先,这个函数不是f(y,x)=0的函数,判断一个模型 ...

  5. JAVA 并发编程-多个线程之间共享数据(六)

    多线程共享数据的方式: 1.假设每一个线程运行的代码同样.能够使用同一个Runnable对象,这个Runnable对象中有那个共享数据,比如,卖票系统就能够这么做. 2,假设每一个线程运行的代码不同. ...

  6. MyBitis(iBitis)系列随笔之三:简单实现CRUD

    Mybitis(iBitis)实现对对象增删改查操作要借助<select/>查询,<insert/>增加,<update/>更新,<delete/>删除 ...

  7. zookeeper配置详解

    原文地址: http://itindex.net/detail/40187-zookeeper-%E7%AE%A1%E7%90%86%E5%91%98-%E7%AE%A1%E7%90%86 参数名 说 ...

  8. 编程之美 set 4 找到符合条件的数

    题目 任意给定一个正整数 N, 求一个最小的正整数 M (M > 1), 使得 N*M 的十进制表达式中只有 0 和 1. 解法 1. 枚举0,1能够组成的数字, 可以组成一颗二叉树 然后由 B ...

  9. ASp.Net控件的生命周期

    服务端事件 页面生命周期 描述 Init Initialization 初始化控件树 LoadViewState Unpack ViewState 从ViewState里提取出状态信息 LoadCon ...

  10. Entity Framework 学习建议及教学PPT

    EntityFramework(EF)是微软平台主流的数据存取技术.为了给学生介绍这一技术,我制作了三讲Entity Framework 5.0教学PPT,包括相应源码及示例数据库. 教学内容主要参考 ...