原文转载自:
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简单实例
- 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;
-
-
-
-
- public class HBaseTest {
-
- static Configuration cfg = HBaseConfiguration.create();
-
-
- 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");
- }
- }
-
-
- 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");
- }
-
-
- 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);
- }
-
-
- 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) {
-
- 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) {
-
- e.printStackTrace();
- }
- }
- }
将Delete的步骤注释掉的运行结果截图:
四、 总结
HBase与Java API的交互目前表现良好,在今后的hadoop编程中,可以根据HBase的情况适当利用,提高整体水平。
转载请注明出处: http://www.ming-yue.cn/hbase-program-examples/