9、HBase客户端程序开发

本文介绍HBase的Java API使用方法,包括开发步骤、表操作及数据的增删改查。并展示了如何通过MapReduce处理HBase数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发接口实现方式:
[color=green]Native Java API[/color] 最常规和高效的访问方式;Java API是访问Hbase最快的方式。
HBase Shell HBase的命令行工具,最简单的接口,适合HBase管理使用;
Thrift Gateway 利用Thrift序列化技术,支持C++, PHP, Python等多种语言。
REST Gateway 支持REST 风格的Http API访问HBase, 解除了语言限制;
[color=green]MapReduce[/color] 直接使用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句柄。
[img]http://dl2.iteye.com/upload/attachment/0107/0285/36c4a51a-3d27-305a-8413-1bc726352943.png[/img]


从Hbase中读取数据:
接口:
get.setTimeRange(minStamp, maxStamp)
get.setMaxVersions(maxVersions)
get.addFamily(family)
get.addColumn(family, column)
读取数据时注意事项:
只读取需要的数据
尽可能增加数据约束条件
可增加family, column(s), time range 和 max versions等约束条件
[img]http://dl2.iteye.com/upload/attachment/0107/0291/ec2c6e26-f522-33bd-b088-e05dcfcb67c2.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0107/0293/127d5d18-3b42-316f-b995-27e19c59495c.png[/img]

从Hbase中删除数据:
[img]http://dl2.iteye.com/upload/attachment/0107/0295/04f23412-a33a-3abe-8162-d903226bf72f.png[/img]

从Hbase中scan数据:
[img]http://dl2.iteye.com/upload/attachment/0107/0297/c81dc46c-1603-3cc9-a209-c52fe7e752d7.png[/img]


二、mapreduce开发
[img]http://dl2.iteye.com/upload/attachment/0107/0300/a8bc4d4e-2bf2-35f4-8524-64ce17d9a9de.png[/img]
创建Job对象,设置基本属性;
设置scan对象,指定扫描区间和数据列;
调用TableMapReduceUtil的initTableMapperJob和initTableReducerJob设置Mapper和Reducer等信息;
提交作业;
[img]http://dl2.iteye.com/upload/attachment/0107/0302/e1dcf004-8a6d-3200-8dfd-4cd2fa8d90ad.png[/img]

例:
[img]http://dl2.iteye.com/upload/attachment/0107/0307/c736af91-a501-3486-96c8-dd412d423e25.png[/img]


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);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值