9、HBase客户端程序开发

开发接口实现方式:
Native Java API   最常规和高效的访问方式;Java API是访问Hbase最快的方式。
HBase Shell       HBase的命令行工具,最简单的接口,适合HBase管理使用;
Thrift Gateway    利用Thrift序列化技术,支持C++, PHP, Python等多种语言。
REST Gateway      支持REST 风格的Http API访问HBase, 解除了语言限制;
MapReduce         直接使用MapReduce作业处理Hbase数据,使用Pig/hive处理Hbase数据。

一、java开发
步骤1:创建一个Configuration对象包含各种配置信息
       Configuration conf = HbaseConfiguration.create();
步骤2:构建一个HTable句柄,提供Configuration对象,提供待访问Table的名称(不支持多行事务或者表级别的事务,支持单行事务)
       org.apache.hadoop.hbase.client.HTable
       HTable table = new HTable(conf, tableName);
步骤3:执行相应的操作,执行put、 get、 delete、 scan等操作
       table.getTableName();
       table.put("str");
步骤4:关闭HTable句柄,将内存数据刷新到磁盘上,释放各种资源
       table.close();

Configuration对象包装了客户端程序连接Hbase服务所需的全部信息;
    Zookeeper位置
    Zookeeper连接超时时间
HbaseConfiguration.create()内部逻辑
1、从CLASSPATH中加载hbase-default.xml和hbase-site.xml两个文件
   在<hadoop_install>/conf/hadoop-env.sh中设置
   export HADOOP_CLASSPATH=$HBASE_HOME/*:$HBASE_HOME/conf:$HADOOP_CLASSPATH
   hadoop classpath | grep hbase
2、hbase-default.xml已经被打包到Hbase jar包中(hbase自带)
3、hbase-site.xml需添加到CLASSPATH中(自己配置)
4、hbase-site.xml将覆盖hbase-default.xml中的同名属性

HTable句柄的创建
创建HTable句柄代价很大
扫描.META.表等;
创建一次,以后尽可能复用;
如果需要创建多个Htable句柄,使用HTablePool;
HTable并非线程安全的:一个线程创建一个即可
Htable支持CRUD批处理:非线程安全,仅是为了提高性能

向HBase写入数据
步骤1:创建一个Put对象;
  Put put = new Put(Bytes.toBytes("rowkey"));//转化为byte
步骤2:设置cell值;
  Put.add(family, column, value)
  Put.add(family, column, timestamp, value)
  Put.add(KeyValue kv)
步骤3:调用HTable中的put方法,写入数据;
步骤4:关闭HTable句柄。
9、HBase客户端程序开发_第1张图片


从Hbase中读取数据:
接口:
get.setTimeRange(minStamp, maxStamp)
get.setMaxVersions(maxVersions)
get.addFamily(family)
get.addColumn(family, column)
读取数据时注意事项:
只读取需要的数据
尽可能增加数据约束条件
可增加family, column(s), time range 和 max versions等约束条件
9、HBase客户端程序开发_第2张图片
9、HBase客户端程序开发_第3张图片

从Hbase中删除数据:
9、HBase客户端程序开发_第4张图片

从Hbase中scan数据:
9、HBase客户端程序开发_第5张图片


二、mapreduce开发
9、HBase客户端程序开发_第6张图片
创建Job对象,设置基本属性;
设置scan对象,指定扫描区间和数据列;
调用TableMapReduceUtil的initTableMapperJob和initTableReducerJob设置Mapper和Reducer等信息;
提交作业;
9、HBase客户端程序开发_第7张图片

例:
9、HBase客户端程序开发_第8张图片



HBase建表
参看:http://www.ylzx8.cn/yidongkaifa/android/192868.html
java:
HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig); 
HTableDescriptor t = new HTableDescriptor(tableName); 
t.addFamily(new HColumnDescriptor(“f1″));
t.addFamily(new HColumnDescriptor(“f2″)); 
t.addFamily(new HColumnDescriptor(“f3″)); 
t.addFamily(new HColumnDescriptor(“f4″));
hAdmin.createTable(t);


HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);
if (hAdmin.tableExists(tableName)) {
       hAdmin.disableTable(tableName); 
       hAdmin.deleteTable(tableName);
 
}

你可能感兴趣的:(hbase)