您的位置:首页 > 编程语言 > Java开发

HBase的JAVA API操作详解

2015-08-18 12:04 666 查看
hbase 伪 分 布 安 装参考:http://blog.csdn.net/gamer_gyt/article/details/47126961
hbase shell操作命令参考:http://blog.csdn.net/gamer_gyt/article/details/47131857
数 据 挖 掘 资源链接汇总:http://blog.csdn.net/gamer_gyt/article/details/47747857

其中用到的eclipse快捷键:

Alt+/   代码助手完成一些代码的插入,自动显示提示信息 

Alt+↓   当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)

Alt+↑  当前行和上面一行交互位置(同上)

Alt+←   前一个编辑的页面 

Alt+→   下一个编辑的页面(当然是针对上面那条来说了)

Alt+Shift+M   抽取方法

Alt+Shift+L   抽取本地变量 

Ctrl+1        快速修复 

一:API介绍

几个相关类与HBase数据模型之间的对应关系
java类HBase数据模型
HBaseAdmin数据库(DataBase)
HBaseConfiguration
HTable表(Table)
HTableDescriptor列族(Column Family)
Put列修饰符(Column Qualifier)
Get
Scanner
一、HBaseConfiguration

关系:org.apache.hadoop.hbase.HBaseConfiguration

作用:对HBase进行配置
返回值函数描述
voidaddResource(Path file)通过给定的路径所指的文件来添加资源
voidclear()清空所有已设置的属性
stringget(String name)获取属性名对应的值
StringgetBoolean(String name, boolean defaultValue)获取为boolean类型的属性值,如果其属性值类型部位boolean,则返回默认属性值
voidset(String name, String value)通过属性名来设置值
voidsetBoolean(String name, boolean value)设置boolean类型的属性值
用法示例:

HBaseConfiguration hconfig = new HBaseConfiguration();

hconfig.set("hbase.zookeeper.property.clientPort","2181");

复制代码

  该方法设置了"hbase.zookeeper.property.clientPort"的端口号为2181。一般情况下,HBaseConfiguration会使用构造函数进行初始化,然后在使用其他方法。

二、HBaseAdmin

关系:org.apache.hadoop.hbase.client.HBaseAdmin

作用:提供了一个接口来管理HBase数据库的表信息。它提供的方法包括:创建表,删除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。
返回值函数描述
      voidaddColumn(String tableName, HColumnDescriptor column)向一个已经存在的表添加咧
checkHBaseAvailable(HBaseConfiguration conf)静态函数,查看HBase是否处于运行状态
createTable(HTableDescriptor desc)创建一个表,同步操作
deleteTable(byte[] tableName)删除一个已经存在的表
enableTable(byte[] tableName)使表处于有效状态
disableTable(byte[] tableName)使表处于无效状态
HTableDescriptor[]listTables()列出所有用户控件表项
voidmodifyTable(byte[] tableName, HTableDescriptor htd)修改表的模式,是异步的操作,可能需要花费一定的时间
booleantableExists(String tableName)检查表是否存在
用法示例:

HBaseAdmin admin = new HBaseAdmin(config);

admin.disableTable("tablename")

复制代码

三、HTableDescriptor

关系:org.apache.hadoop.hbase.HTableDescriptor

作用:包含了表的名字极其对应表的列族
返回值函数描述
voidaddFamily(HColumnDescriptor)添加一个列族
HColumnDescriptorremoveFamily(byte[] column)移除一个列族
byte[]getName()获取表的名字
byte[]getValue(byte[] key)获取属性的值
voidsetValue(String key, String value)设置属性的值
用法示例:

HTableDescriptor htd = new HTableDescriptor(table);

htd.addFamily(new HcolumnDescriptor("family"));

复制代码

在上述例子中,通过一个HColumnDescriptor实例,为HTableDescriptor添加了一个列族:family

四、HColumnDescriptor

关系:org.apache.hadoop.hbase.HColumnDescriptor

作用:维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。列族被删除的时候,列族里面的数据也会同时被删除。
返回值函数描述
byte[]getName()获取列族的名字
byte[]getValue(byte[] key)获取对应的属性的值
voidsetValue(String key, String value)设置对应属性的值
用法示例:

HTableDescriptor htd = new HTableDescriptor(tablename);

HColumnDescriptor col = new HColumnDescriptor("content:");

htd.addFamily(col);

复制代码

此例添加了一个content的列族

五、HTable

关系:org.apache.hadoop.hbase.client.HTable

作用:可以用来和HBase表直接通信。此方法对于更新操作来说是非线程安全的。
返回值函数描述
voidcheckAdnPut(byte[] row, byte[] family, byte[] qualifier, byte[] value, Put put自动的检查row/family/qualifier是否与给定的值匹配
voidclose()释放所有的资源或挂起内部缓冲区中的更新
Booleanexists(Get get)检查Get实例所指定的值是否存在于HTable的列中
Resultget(Get get)获取指定行的某些单元格所对应的值
byte[][]getEndKeys()获取当前一打开的表每个区域的结束键值
ResultScannergetScanner(byte[] family)获取当前给定列族的scanner实例
HTableDescriptorgetTableDescriptor()获取当前表的HTableDescriptor实例
byte[]getTableName()获取表名
static booleanisTableEnabled(HBaseConfiguration conf, String tableName)检查表是否有效
voidput(Put put)向表中添加值
用法示例:

HTable table = new HTable(conf, Bytes.toBytes(tablename));

ResultScanner scanner =  table.getScanner(family);

复制代码

六、Put

关系:org.apache.hadoop.hbase.client.Put

作用:用来对单个行执行添加操作
返回值函数描述
Putadd(byte[] family, byte[] qualifier, byte[] value)将指定的列和对应的值添加到Put实例中
Putadd(byte[] family, byte[] qualifier, long ts, byte[] value)将指定的列和对应的值及时间戳添加到Put实例中
byte[]getRow()获取Put实例的行
RowLockgetRowLock()获取Put实例的行锁
longgetTimeStamp()获取Put实例的时间戳
booleanisEmpty()检查familyMap是否为空
PutsetTimeStamp(long timeStamp)设置Put实例的时间戳
用法示例:

HTable table = new HTable(conf,Bytes.toBytes(tablename));

Put p = new Put(brow);//为指定行创建一个Put操作

p.add(family,qualifier,value);

table.put(p);

复制代码

七、Get

关系:org.apache.hadoop.hbase.client.Get

作用:用来获取单个行的相关信息
返回值函数描述
GetaddColumn(byte[] family, byte[] qualifier)获取指定列族和列修饰符对应的列
GetaddFamily(byte[] family)通过指定的列族获取其对应列的所有列
GetsetTimeRange(long minStamp,long maxStamp)获取指定取件的列的版本号
GetsetFilter(Filter filter)当执行Get操作时设置服务器端的过滤器
用法示例:

HTable table = new HTable(conf, Bytes.toBytes(tablename));

Get g = new Get(Bytes.toBytes(row));

复制代码

八、Result

关系:org.apache.hadoop.hbase.client.Result

作用:存储Get或者Scan操作后获取表的单行值。使用此类提供的方法可以直接获取值或者各种Map结构(key-value对)
返回值函数描述
booleancontainsColumn(byte[] family, byte[] qualifier)检查指定的列是否存在
NavigableMap<byte[],byte[]>getFamilyMap(byte[] family)获取对应列族所包含的修饰符与值的键值对
byte[]getValue(byte[] family, byte[] qualifier)获取对应列的最新值
九、ResultScanner

关系:Interface

作用:客户端获取值的接口
返回值函数描述
voidclose()关闭scanner并释放分配给它的资源
Resultnext()获取下一行的值

二:代码草操作实例
package Hbase;

import java.io.IOException;
import java.io.InterruptedIOException;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException;
import org.apache.hadoop.hbase.client.Scan;

public class test {
private static final String Table_NAME =  "table1";         //表名称
private static final String FAMILY_NAME =  "family1"; //列族名称
private static final String ROW_KEY = "rowkey1";     //创建行健

//创建,插入,查询记录,遍历表,删除表
public static void main(String[] args) throws Exception {
Configuration conf=  HBaseConfiguration.create();
conf.set("hbase.rootdir","hdfs://localhost:9000/hbase");  //设置hbase再hdfs中的目录
conf.set("hbase.zookeeper.quorum", "localhost");        //使用zookeeper来进行定位
//创建删除表使用HBaseAdmin
HBaseAdmin hBaseAdmin = new HBaseAdmin(conf);
createTable(hBaseAdmin);            //创建表

//插入记录,查询一条记录,遍历所有的记录Table
final HTable hTable = new HTable(conf, Table_NAME);
putRecord(hTable);         //插入一条记录
getRecord(hTable);         //查询一条记录
scanTable(hTable);             //遍历所有的表的记录
hTable.close();          //关闭表
//deleteTable(hBaseAdmin);              //删除表
}

private static void scanTable(final HTable hTable) throws IOException {
Scan scan = new Scan();
final ResultScanner scanner = hTable.getScanner(scan);
for (Result result : scanner) {
final byte[] value = result.getValue(FAMILY_NAME.getBytes()	, "age".getBytes());
System.out.println(result+"\t" + new String(value));
}
}

private static void getRecord(final HTable hTable) throws IOException {
Get get = new Get(ROW_KEY.getBytes());
final Result result = hTable.get(get );
final byte[] value = result.getValue(FAMILY_NAME.getBytes()	, "age".getBytes());
System.out.println(result+"\t" + new String(value));
}

private static void putRecord(HTable hTable) throws InterruptedIOException,
RetriesExhaustedWithDetailsException {
Put put = new Put(ROW_KEY.getBytes());        //声明对象
put.add(FAMILY_NAME .getBytes(), "age".getBytes(),"	12".getBytes());   //添加记录
hTable.put(put );    //插入
}

private static void deleteTable(HBaseAdmin hBaseAdmin) throws IOException {
hBaseAdmin.disableTable(Table_NAME);        //关闭表
hBaseAdmin.deleteTable(Table_NAME);       //删除表
}

private static void createTable(HBaseAdmin hBaseAdmin) throws IOException {
if (!hBaseAdmin.tableExists(Table_NAME)){
HTableDescriptor tableDescriptor = new HTableDescriptor(Table_NAME);    //声明一个表
HColumnDescriptor family = new HColumnDescriptor(FAMILY_NAME);       //声明一个列族
tableDescriptor.addFamily(family );                                      //添加列族
hBaseAdmin.createTable(tableDescriptor );                                 //创建表
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hbase api java hadoop mapreduce