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

HBase编程实例

2015-11-26 23:04 435 查看

原文转载自:

http://blog.csdn.net/minglaihan/article/details/38781651



一、使用Eclipse开发HBase应用程序

1,在Eclipse中新建一个Java Project,命名为HBaseTest,然后右键Properties中选择Java Build Path,选择Add External Jars,将HBase/lib目录下的jar包导入进来。

2,在工程根目录下创建Conf文件夹,将HBase/Conf下的hbase-site.xml文件复制到该文件夹中,通过右键选择Properties->Java BuildPath->Libraries->Add Class Folder,然后选择Conf文件夹即可。

二、简要介绍HBaseJava API

1, HbaseConfiguration

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

作用:通过此类可以对HBase进行配置

2, HBaseAdmin

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

作用:提供一个接口来管理HBase数据库中的表信息。它提供创建表、删除表等方法。

3, HTableDescriptor

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

作用:包含了表的名字及其对应列族。 提供的方法有

void addFamily(HColumnDescriptor) 添加一个列族

HColumnDescriptor removeFamily(byte[] column) 移除一个列族

byte[] getName() 获取表的名字

byte[] getValue(byte[] key) 获取属性的值

void setValue(String key,Stringvalue) 设置属性的值

4, HColumnDescriptor

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

作用:维护关于列的信息。提供的方法有

byte[] getName() 获取列族的名字

byte[] getValue() 获取对应的属性的值

void setValue(String key,String value)设置对应属性的值

5, HTable

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

作用:用户与HBase表进行通信。此方法对于更新操作来说是非线程安全的,如果启动多个线程尝试与单个HTable实例进行通信,那么写缓冲器可能会崩溃。

6, Put

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

作用:用于对单个行执行添加操作

7, Get

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

作用:用于获取单个行的相关信息

8, Result

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

作用:存储Get或Scan操作后获取的单行值。

9, ResultScanner

关系:Interface

作用:客户端获取值的接口。

三、 HBase Java API简单实例

[java] view
plaincopyprint?

import java.io.IOException;

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.client.HBaseAdmin;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

/*

* @author minglaihan

*/

public class HBaseTest {

static Configuration cfg = HBaseConfiguration.create();

//通过HBaseAdmin HTableDescriptor来创建一个新表

public static void create(String tableName, String columnFamily) throws Exception{

HBaseAdmin admin = new HBaseAdmin(cfg);

if(admin.tableExists(tableName)){

System.out.println("Table exist");

System.exit(0);

}

else {

HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);

tableDescriptor.addFamily(new HColumnDescriptor(columnFamily));

admin.createTable(tableDescriptor);

System.out.println("Table create success");

}

}

//添加一条数据,通过HTable Put为已存在的表添加数据

public static void put(String tableName,String row,String columnFamily,String column,String data) throws IOException{

HTable table = new HTable(cfg, tableName);

Put put = new Put(Bytes.toBytes(row));

put.add(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(data));

table.put(put);

System.out.println("put success");

}

//获取tableName表里列为row的结果集

public static void get(String tableName,String row) throws IOException{

HTable table = new HTable(cfg, tableName);

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

Result result = table.get(get);

System.out.println("get "+ result);

}

//通过HTable Scan来获取tableName表的所有数据信息

public static void scan (String tableName) throws IOException{

HTable table = new HTable(cfg, tableName);

Scan scan = new Scan();

ResultScanner resultScanner = table.getScanner(scan);

for(Result s:resultScanner){

System.out.println("Scan "+ resultScanner);

}

}

public static boolean delete(String tableName) throws Exception{

HBaseAdmin admin = new HBaseAdmin(cfg);

if(admin.tableExists(tableName)){

try {

admin.disableTable(tableName);

admin.deleteTable(tableName);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

return false;

}

}

return true;

}

public static void main(String[] args) {

String tableName = "hbase_test";

String columnFamily = "c1";

try {

HBaseTest.create(tableName, columnFamily);

HBaseTest.put(tableName, "row1", columnFamily, "column1", "data1");

HBaseTest.get(tableName, "row1");

HBaseTest.scan(tableName);

if(HBaseTest.delete(tableName)==true){

System.out.println("delete table "+ tableName+"success");

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

}

将Delete的步骤注释掉的运行结果截图:





四、 总结

HBase与Java API的交互目前表现良好,在今后的hadoop编程中,可以根据HBase的情况适当利用,提高整体水平。


转载请注明出处: http://www.ming-yue.cn/hbase-program-examples/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: