`
cooliufang
  • 浏览: 129682 次
社区版块
存档分类
最新评论

【Hbase】Java对hbase的操作

阅读更多
HBase提供了Java API对其进行管理,包括对表的管理、数据的操作等。
1. HBaseAdmin —— 对表的创建、删除、显示以及修改等;
  
2. HTable —— 通过HTable的实例来访问表并进行数据的操作,获取表实例如下两种方法:
   方法一:直接获取
   HTable table = new HTable(config, tableName);
   方法二:用表连接池的方式
   HTablePool pool = new HTablePool(config,1000);
   HTable table = (HTable) pool.getTable(tableName);

3.插入数据:
创建一个Put对象,并指定参数为一个行(Row)值(即指定给哪一列增加数据以及当前的时间戳等值),然后调用HTable.put(Put)。

4.获取数据
创建一个Get对象,在构造的时候传入行值,表示取第几行的数据,然后调用HTable.get(Get)。

5.删除数据
创建一个Delete对象,参数为一个行(Row)值,然后调用HTable.delete(Delete)。

6. 浏览数据
通过Scan可以对表中的行进行浏览,得到每一行的信息,比如列名,时间戳等,Scan相当于一个游标,通过next()来浏览下一个。
通过调用HTable.getScanner(Scan)来返回一个ResultScanner对象。
HTable.get(Get)和HTable.getScanner(Scan)都是返回一个Result。
Result是一个KeyValue的链表,遍历过程当中保存当前行信息。

以下是一个java对hbase的基本操作实例(hadoop-1.0.3 && hbase-0.90.3)
package tool;

import java.io.IOException;
import java.util.Scanner;

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.Delete;
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.HTablePool;
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.Scan;
import org.apache.hadoop.hbase.util.Bytes;

public class Hbase {
	//initial
	static Configuration config = null;
	static {
		config = HBaseConfiguration.create();
		config.set("hbase.zookeeper.quorum", "192.168.21.20, 192.168.21.21, 192.168.21.22");
		config.set("hbase.zookeeper.property.clientPort", "2181");
	}
	
	//create a new table
	public void createTable(String tableName, String[] familys) throws IOException {
		HBaseAdmin admin = new HBaseAdmin(config);
		if (admin.tableExists(tableName)) {
			System.out.println(tableName + " is already exists,Please create another table!");
		} else {
			HTableDescriptor  desc = new HTableDescriptor(tableName);
			for (int i = 0; i < familys.length; i++) {
				HColumnDescriptor family = new HColumnDescriptor(familys[i]);			
				desc.addFamily(family);
			}
			admin.createTable(desc);
			System.out.println("Create table \'" + tableName + "\' OK!");
		}
		
	}

	//delete a table
	public void deleteTable(String tableName) throws IOException {
		HBaseAdmin admin = new HBaseAdmin(config);
		if (!admin.tableExists(tableName)) {
			System.out.println(tableName + " is not exists!");
		} else {
			Scanner s = new Scanner(System.in);
			System.out.print("Are you sure to delete(y/n)?");
			String str = s.nextLine();
			if (str.equals("y") || str.equals("Y")) {
				admin.disableTable(tableName);
				admin.deleteTable(tableName);
				System.out.println(tableName + " is delete!");
			} else {
				System.out.println(tableName + " is not delete!");
			}
		}		
	}
	
	//Get table example
	public void getTable(String tableName) throws IOException {
		//Method I:
//		HTable table = new HTable(config, tableName);
		//Method II: better than I.
		HTablePool pool = new HTablePool(config,1000);
		@SuppressWarnings("unused")
		HTable table = (HTable) pool.getTable(tableName);
	}

	//add a data
	public void insertData(String tableName, String rowKey, String family, String qualifier, String value) {
		try {
			HTablePool pool = new HTablePool(config, 1000);
			HTable table = (HTable)pool.getTable(tableName);
			Put put = new Put(Bytes.toBytes(rowKey));
			put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
			table.put(put);
			System.out.println("insert a data successful!");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	//delete a data
	public void deleteData(String tableName, String rowKey) {
		try {
			HTablePool pool = new HTablePool(config, 1000);
			HTable table = (HTable)pool.getTable(tableName);
			Delete del = new Delete(Bytes.toBytes(rowKey));
			table.delete(del);
			System.out.println("delete a data successful");
			table.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	//Query all data
	public void queryAll(String tableName) {
		try {
			HTablePool pool = new HTablePool(config, 1000);
			HTable table = (HTable) pool.getTable(tableName);
			Scan scan = new Scan();
			ResultScanner scanner = table.getScanner(scan);

			for (Result row : scanner) {
				System.out.println("\nRowkey: " + new String(row.getRow()));
				for (KeyValue kv : row.raw()) {
					System.out.print(new String(kv.getRow()) + " ");	//same as above
					System.out.print(new String(kv.getFamily()) + ":");
					System.out.print(new String(kv.getQualifier()) + " = ");
					System.out.print(new String(kv.getValue()));
					System.out.print(" timestamp = " + kv.getTimestamp() + "\n");
				}
			}
			table.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	//query by rowkey
	public void queryByRowKey(String tableName, String rowKey) {
		try {
			HTablePool pool = new HTablePool(config, 1000);
			HTable table = (HTable)pool.getTable(tableName);
			Get get = new Get(rowKey.getBytes());
			Result row = table.get(get);
			for (KeyValue kv : row.raw()) {
				System.out.print(new String(kv.getRow()) + " ");	
				System.out.print(new String(kv.getFamily()) + ":");
				System.out.print(new String(kv.getQualifier()) + " = ");
				System.out.print(new String(kv.getValue()));
				System.out.print(" timestamp = " + kv.getTimestamp() + "\n");
			}
			table.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/************************************************************/
	public static void main(String[] args) throws IOException {
		Hbase hbase = new Hbase();
		//Create a new table
		String tableName = "test";
		System.out.println("=======delete table======");
		hbase.deleteTable(tableName);
		
		System.out.println("=======create table======");
		String[] familys = {"info", "scores"};		
		hbase.createTable(tableName, familys);
		
		System.out.println("=======insert data=======");
		//insert Jim
		hbase.insertData(tableName, "Jim", "info", "sex", "male");
		hbase.insertData(tableName, "Jim", "info", "age", "18");
		hbase.insertData(tableName, "Jim", "scores", "Chinese", "98");
		hbase.insertData(tableName, "Jim", "scores", "English", "90");
		hbase.insertData(tableName, "Jim", "scores", "Math", "100");
		//insert Ann
		hbase.insertData(tableName, "Ann", "info", "sex", "female");
		hbase.insertData(tableName, "Ann", "info", "age", "18");
		hbase.insertData(tableName, "Ann", "scores", "Chinese", "97");
		hbase.insertData(tableName, "Ann", "scores", "Math", "95");		

		System.out.println("=======query all data=======");
		hbase.queryAll(tableName);
		
		System.out.println("=======query by rowkey=======");
		String rowKey = "Ann";
		hbase.queryByRowKey(tableName, rowKey);
		
		System.out.println("=======delete a data=======");
		hbase.deleteData(tableName, rowKey);
		hbase.queryAll(tableName);		
	}
	
}




程序运行结果:
=======delete table======
Are you sure to delete(y/n)?y
test is delete!
=======create table======
Create table 'test' OK!
=======insert data=======
insert a data successful!
=======query all data=======
Rowkey: Ann
Ann info:age = 18 timestamp = 1349857967109
Ann info:sex = female timestamp = 1349857967080
Ann scores:Chinese = 97 timestamp = 1349857967134
Ann scores:Math = 95 timestamp = 1349857967160

Rowkey: Jim
Jim info:age = 18 timestamp = 1349857966936
Jim info:sex = male timestamp = 1349857966908
Jim scores:Chinese = 98 timestamp = 1349857966961
Jim scores:English = 90 timestamp = 1349857967002
Jim scores:Math = 100 timestamp = 1349857967052
=======query by rowkey=======
Ann info:age = 18 timestamp = 1349857967109
Ann info:sex = female timestamp = 1349857967080
Ann scores:Chinese = 97 timestamp = 1349857967134
Ann scores:Math = 95 timestamp = 1349857967160
=======delete a data=======
delete a data successful
Rowkey: Jim
Jim info:age = 18 timestamp = 1349857966936
Jim info:sex = male timestamp = 1349857966908
Jim scores:Chinese = 98 timestamp = 1349857966961
Jim scores:English = 90 timestamp = 1349857967002
Jim scores:Math = 100 timestamp = 1349857967052
分享到:
评论
1 楼 903855066 2014-07-11  
请问楼主,你输出的没有大量的zookeeper日志么

相关推荐

    HBase基本操作 Java代码

    HBase基本操作 增删改查 java代码 要使用须导入对应的jar包

    hbase java api 访问 查询、分页

    总之,HBase的Java API提供了丰富的功能,使得开发人员能够灵活地对HBase进行操作。理解并熟练掌握这些API,对于开发高效、稳定的数据处理系统至关重要。在具体实践中,应根据业务需求选择合适的查询策略,以充分...

    Hbase JAVA编程开发实验

    Hbase JAVA编程开发实验报告以及代码,1 按照“Hbase应用开发实验1.pdf”中给出的说明,完成相关相关实验及JAVA程序的编写、调试和运行,提交JAVA源程序(AccessObject.java, HBaseTester.java, User.java)及运行...

    Hbase调用JavaAPI实现批量导入操作

    这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase中批量导入数据。在这个过程中,我们将探讨以下几个关键知识点: 1. **HBase架构**: HBase是基于列族的存储模型,数据被...

    HBase Java API类介绍

    ### HBase Java API类介绍 #### 一、概述 HBase是一个分布式的、面向列的开源数据库,基于Google的Bigtable论文实现。它适合于非结构化数据存储,并且能够实时处理PB级别的数据。HBase提供了Java API供开发者使用...

    Hbase Java API

    HBase 的 Java API 是通过 HBaseConfiguration 对象来操作的。HBaseConfiguration 代表的是 HBase 配置信息,可以通过两个构造方式来创建:public HBaseConfiguration() 和 public HBaseConfiguration(final ...

    java代码使用thrift2操作hbase示例

    在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...

    Hbase java DBHelper CRUD等通用方法

    节制2013年12月23日最新的hadoop和hbase兼容版本搭建 hadoop-2.2.0 hbase-0.96.1.1 java Hbase java DBHelper CRUD等通用方法 花了两天时间整理的,含有lib包 & 源码

    hbase java api 所需最精简 jar

    使用HBase进行Java开发时,通常需要依赖特定的JAR包来支持HBase的操作。"hbase java api 所需最精简 jar"这个标题意味着我们将探讨的是为了在Java环境中最小化依赖,但仍能实现基本HBase操作所需的JAR文件。 首先,...

    hbase java api 访问 增加修改删除(一)

    实际应用中,可能需要处理更复杂的场景,如批量操作、扫描、过滤等,这都需要对HBase的API有深入的理解。记住,始终确保正确管理和关闭资源,以避免内存泄漏和性能问题。在实际项目中,还可以考虑使用HBase的客户端...

    Java操作Hbase进行建表、删表以及对数据进行增删改查

    Java 操作 Hbase 进行建表、删表以及对数据进行增删改查 一、Hbase 简介 Hbase 是一个开源的、分布式的、基于 column-family 的 NoSQL 数据库。它是基于 Hadoop 的,使用 HDFS 作为其存储层。Hbase 提供了高性能、...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...

    hbase常用JAVA API

    HBase是一种分布式、高性能、基于列族的NoSQL数据库,主要设计用于处理大规模数据存储。在Java中,我们可以使用HBase的Java API来与HBase...通过熟练掌握这些API,你可以灵活地在Java应用程序中实现对HBase的数据操作。

    HbaseTemplate 操作hbase

    而Spring Data Hadoop是Spring框架的一部分,它提供了与Hadoop生态系统集成的工具,包括对HBase的操作支持。本篇文章将详细讲解如何利用Spring Data Hadoop中的HbaseTemplate来操作HBase。 首先,我们需要理解...

    Hadoop+HBase+Java API

    **Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...

    java链接及操作hbase实例代码

    这个名为“Hbasetest”的压缩包文件很可能包含了上述操作的完整示例代码,你可以通过查看和运行代码来加深对Java操作HBase的理解。务必注意,根据你的HBase集群配置,可能需要调整代码中的连接参数,以确保正确连接...

    java从本地读文件并上传Hbase

    整个流程就是这样,它涉及到了Java I/O操作、HBase连接与表操作、以及数据的读取和写入。在实际应用中,可能还需要考虑错误处理、性能优化、并发控制等问题。对于大型文件,可能需要使用多线程或者Hadoop MapReduce...

    使用Java API连接虚拟机HBase并进行数据库操作,Java源代码

    在本文中,我们将深入探讨如何使用Java API连接到运行在虚拟机上的HBase数据库,并进行相关的数据操作。HBase是一个分布式的、版本化的、基于列族的NoSQL数据库,它构建于Hadoop之上,适用于处理大规模的数据存储和...

    java-hbase开发包

    6. **安全性与权限**:Java-HBase开发包也支持HBase的安全特性,包括认证、授权和审计,这使得开发者可以控制对HBase数据的访问。 7. **异步API**:除了传统的同步API,1.2版本可能引入了异步操作接口,如`...

    Hbase的JavaAPI

    在Java环境中,HBase提供了丰富的Java API供开发者进行数据操作,包括创建表、删除表、更新表以及查询表等基本功能。下面我们将深入探讨HBase的Java API及其在实际应用中的使用。 1. **HBase连接** 在Java中使用...

Global site tag (gtag.js) - Google Analytics