温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HBase如何进行编程

发布时间:2021-12-08 14:16:38 来源:亿速云 阅读:170 作者:小新 栏目:云计算

这篇文章主要介绍了HBase如何进行编程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、使用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;
/*
 * @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如何进行编程

HBase如何进行编程

感谢你能够认真阅读完这篇文章,希望小编分享的“HBase如何进行编程”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI