`
zhang_xzhi_xjtu
  • 浏览: 538727 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hbase的基本操作

 
阅读更多
本文列举一些hbase的基本操作代码。

package allen.studyhbase;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTableInterface;
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;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;

public class BaseTest {
	protected static Log log = LogFactory.getLog(BaseTest.class);

	protected static HBaseAdmin hbaseAdmin;
	protected static HTablePool pool;
	protected static String TableName = "allen_test";
	protected static byte[] TableNameBytes = Bytes.toBytes(TableName);
	protected static byte[] ColumnFamilyName = Bytes.toBytes("cf");

	protected static String QNameStr1 = "q1";
	protected static String QNameStr2 = "q2";
	protected static String QNameStr3 = "q3";

	protected static byte[] QName1 = Bytes.toBytes(QNameStr1);
	protected static byte[] QName2 = Bytes.toBytes(QNameStr2);
	protected static byte[] QName3 = Bytes.toBytes(QNameStr3);

	protected HTableInterface table;

	@BeforeClass
	public static void beforeClass() throws Exception {
		hbaseAdmin = CommonConfig.getHBaseAdmin();
		deleteTable();
		createTable();
	}

	@AfterClass
	public static void afterClass() throws Exception {
		deleteTable();
	}

	@Before
	public void before() throws Throwable {
		pool = CommonConfig.getHTablePool();
		table = pool.getTable(TableName);
		fillData();
	}

	@After
	public void after() throws Exception {
		try {
			// full scan.
			Scan scan = new Scan();
			ResultScanner resultScanner = table.getScanner(scan);

			List<byte[]> rows = new LinkedList<byte[]>();
			for (Result result = resultScanner.next(); result != null; result = resultScanner
					.next()) {
				rows.add(result.getRow());
			}

			for (byte[] row : rows) {
				table.delete(new Delete(row));
				log.info("delete " + Bytes.toString(row));
			}

			// return table to pool.
			table.close();

		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	private static void createTable() throws Exception {
		// create new table.
		HTableDescriptor tableDescriptor = new HTableDescriptor(TableName);
		tableDescriptor.addFamily(new HColumnDescriptor(ColumnFamilyName));
		hbaseAdmin.createTable(tableDescriptor);
	}

	private static void deleteTable() throws Exception {
		// delete table if table exist.
		if (hbaseAdmin.tableExists(TableName)) {
			// disable table before delete it.
			hbaseAdmin.disableTable(TableName);
			hbaseAdmin.deleteTable(TableName);
		}
	}

	String rowKeyStr1 = "allen_test_row1";
	String rowKeyStr2 = "allen_test_row2";
	String rowKeyStr3 = "allen_test_row3";
	String rowKeyStr4 = "allen_test_row4";

	byte[] rowKey1 = Bytes.toBytes(rowKeyStr1);
	byte[] rowKey2 = Bytes.toBytes(rowKeyStr2);
	byte[] rowKey3 = Bytes.toBytes(rowKeyStr3);
	byte[] rowKey4 = Bytes.toBytes(rowKeyStr4);

	private void fillData() throws Throwable {

		Put put = new Put(rowKey1);
		put.add(ColumnFamilyName, QName1, Bytes.toBytes(100L));
		put.add(ColumnFamilyName, QName2, Bytes.toBytes(100L));
		table.put(put);

		put = new Put(rowKey2);
		put.add(ColumnFamilyName, QName1, Bytes.toBytes(20L));
		put.add(ColumnFamilyName, QName2, Bytes.toBytes(200L));
		table.put(put);

		// set null case.
		put = new Put(rowKey3);
		put.add(ColumnFamilyName, QName1, null);
		put.add(ColumnFamilyName, QName2, null);
		table.put(put);

		// empty case.
		put = new Put(rowKey4);
		put.add(ColumnFamilyName, QName3, Bytes.toBytes("test"));
		table.put(put);
	}

}


package allen.studyhbase;



import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

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

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



/**

 * CommonConfig.

 * */

public class CommonConfig {



	private static HTablePool pool;

	private static HBaseAdmin hbaseAdmin;

	private static Configuration conf;



	static {

		try {

			conf = HBaseConfiguration.create();

			pool = new HTablePool(conf, 50);

			hbaseAdmin = new HBaseAdmin(conf);

		} catch (Exception e) {

			throw new RuntimeException(e);

		}

	};



	public static Configuration getConfiguration() {

		return conf;

	}



	public static HBaseAdmin getHBaseAdmin() {

		return hbaseAdmin;

	}



	public static HTablePool getHTablePool() {

		return pool;

	}

}



package allen.studyhbase;

import java.util.HashSet;
import java.util.Set;

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

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;

import org.junit.Assert;

import org.junit.Test;

public class TestHbaseOp extends BaseTest {

	@Test
	public void testDelete() throws Exception {

		Get get = new Get(rowKey1);
		Result result = table.get(get);
		Assert.assertTrue(!result.isEmpty());

		Delete delete = new Delete(rowKey1);
		table.delete(delete);

		get = new Get(rowKey1);
		result = table.get(get);
		Assert.assertTrue(result.isEmpty());

	}

	@Test
	public void testDeleteNotExistRow() throws Exception {
		byte[] rowKey = Bytes.toBytes("allen_test_row");
		Delete delete = new Delete(rowKey);
		table.delete(delete);
	}

	@Test
	public void testScan_01() throws Exception {

		Set<String> resultRowKeys = new HashSet<String>();
		Scan scan = new Scan(rowKey1, rowKey2);
		ResultScanner resultScanner = table.getScanner(scan);
		for (Result result = resultScanner.next(); result != null; result = resultScanner
				.next()) {
			resultRowKeys.add(Bytes.toString(result.getRow()));
		}

		Assert.assertTrue(resultRowKeys.size() == 1);
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr1));
	}

	@Test
	public void testScan_02() throws Exception {
		Set<String> resultRowKeys = new HashSet<String>();

		Scan scan = new Scan(rowKey1);
		ResultScanner resultScanner = table.getScanner(scan);
		for (Result result = resultScanner.next(); result != null; result = resultScanner
				.next()) {
			resultRowKeys.add(Bytes.toString(result.getRow()));
		}

		Assert.assertTrue(resultRowKeys.size() == 4);
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr1));
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr2));
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr3));
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr4));
	}

	@Test
	public void testScan_03() throws Exception {
		Set<String> resultRowKeys = new HashSet<String>();

		Scan scan = new Scan(rowKey1);
		scan.addColumn(ColumnFamilyName, QName1);
		ResultScanner resultScanner = table.getScanner(scan);
		for (Result result = resultScanner.next(); result != null; result = resultScanner
				.next()) {
			resultRowKeys.add(Bytes.toString(result.getRow()));
		}

		Assert.assertTrue(resultRowKeys.size() == 3);
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr1));
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr2));
		Assert.assertTrue(resultRowKeys.contains(rowKeyStr3));

	}

	@Test
	public void testCheckAndPut() throws Exception {
		byte[] rowKey = Bytes.toBytes("allen_test_row");
		Put put = new Put(rowKey);
		put.add(ColumnFamilyName, QName1, Bytes.toBytes("a"));
		put.add(ColumnFamilyName, QName2, Bytes.toBytes("b"));

		boolean result = false;

		result = table.checkAndPut(rowKey, ColumnFamilyName, QName2,
				Bytes.toBytes("b"), put);
		// check fail, put fail.
		Assert.assertFalse(result);

		result = table.checkAndPut(rowKey, ColumnFamilyName, QName2, null, put);
		// check ok, put ok.
		Assert.assertTrue(result);

		result = table.checkAndPut(rowKey, ColumnFamilyName, QName2, null, put);
		// check fail, put fail.
		Assert.assertFalse(result);

		result = table.checkAndPut(rowKey, ColumnFamilyName, QName2,
				Bytes.toBytes("b"), put);
		// check ok, put ok.
		Assert.assertTrue(result);
	}

	@Test
	public void testPutAndGet() throws Exception {
		byte[] rowKey = Bytes.toBytes("allen_test_row");
		Put put = new Put(rowKey);
		put.add(ColumnFamilyName, QName1, Bytes.toBytes("a"));
		put.add(ColumnFamilyName, QName3, null);
		table.put(put);

		Get get = new Get(rowKey);
		Result result = table.get(get);

		byte[] q1 = result.getValue(ColumnFamilyName, QName1);
		byte[] q2 = result.getValue(ColumnFamilyName, QName2);
		byte[] q3 = result.getValue(ColumnFamilyName, QName3);

		Assert.assertEquals("a", Bytes.toString(q1));
		// we get null byte array here.
		Assert.assertEquals(null, Bytes.toString(q2));
		// we get empty byte array here. not a null.
		Assert.assertEquals("", Bytes.toString(q3));

		// get a row doesn't exist.
		byte[] rowKey2 = Bytes.toBytes("allen_test_row_not_exist");
		get = new Get(rowKey2);
		result = table.get(get);
		Assert.assertTrue(result.isEmpty());
	}

	@Test
	public void testPutWithoutColumn() throws Exception {
		byte[] rowKey = Bytes.toBytes("allen_test_row");
		Put put = new Put(rowKey);
		try {
			table.put(put);
			Assert.fail();
		} catch (IllegalArgumentException e) {
			// ignore.
		}
	}
}
1
7
分享到:
评论

相关推荐

    HBase基本操作 Java代码

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

    Hbase 基本操作类

    Hbase 基本操作类 static { //此处可以使用hbase的配置文件,也可以通过代码来实例化hbase连接 /* * Configuration HBASE_CONFIG = new Configuration(); * HBASE_CONFIG.set("hbase.zookeeper.quorum", ...

    HBase基本操作.pdf

    ### HBase Shell命令基本操作步骤 #### 1. 启动HBase Shell 首先需要确保HBase服务已启动。在命令行输入`hbase shell`,按回车键进入HBase Shell环境。 #### 2. 查看帮助文档 在HBase Shell中,使用`help`命令可以...

    HBase基本操作-大数据实验一

    使用场景及目标:本实验旨在让学生在实践中学习HBase的核心特性和基本操作,提升解决实际问题的能力。具体目标包括熟悉HBase的分布式特性、理解其数据模型及工作机制,并能独立完成HBase环境配置、表管理和数据操作...

    Hbase 安装与基本使用

    **四、HBase基本操作** 1. **创建表**:使用HBase shell或Java API,通过`create '表名', '列族'`命令创建表,例如`create 'users', 'info'`创建名为users的表,列族为info。 2. **插入数据**:插入数据通过`put '...

    HBase基本操作(实验)2018年7月31日-(肖光鼎)

    在本实验中,我们将深入探讨HBase的基本操作,由肖光鼎指导,日期为2018年7月31日。这个实验将帮助我们理解如何在Java环境下与HBase进行交互。 首先,要开始使用HBase,我们需要安装并配置Hadoop和HBase环境。...

    Hbase的安装过程及基本操作

    在本文中,我们将详细讲解Hbase的安装过程以及基本操作,特别针对在Linux环境下使用清华大学镜像进行下载的情况。Hbase是一个分布式的、面向列的数据库,常用于大数据存储,是Apache Hadoop生态系统的一部分。以下是...

    hbase 开源数据库的安装和基本操作.zip

    **五、HBase基本操作** 1. **创建表**:使用`hbase shell`进入HBase交互式命令行,然后执行`create 'table_name', 'family_name'`创建表,如`create 'users', 'info'`。 2. **插入数据**:在shell中,使用`put '...

    Hbase 的shell基本操作

    下面是基于标题“Hbase的shell基本操作”和描述“hadoop集群环境下hbase的shell基本操作命令”,结合给定的部分内容,所生成的详细知识点: 1. 进入HBase命令行: 通过命令`hbase shell`可以进入HBase的命令行界面...

    hbase的shell操作

    根据提供的文件信息,本文将详细介绍HBase的Shell操作及其应用场景,包括如何创建表、插入数据、查询数据等关键操作。 ### HBase Shell简介 HBase Shell是HBase提供的一种交互式命令行工具,用于执行HBase操作。它...

    实验三:熟悉常用的HBase操作

    实验的目标是让你理解HBase在Hadoop架构中的地位,以及掌握通过Shell命令和Java API进行基本操作的方法。 首先,让我们来看看实验的平台配置。实验要求的操作系统是Linux,这通常是大数据处理的首选平台,因为它...

    HBase基本数据操作详解.docx

    ### HBase基本数据操作详解 #### 一、命名空间 Namespace **1.1 命名空间概述** 在HBase中,命名空间(namespace)的概念类似于传统数据库中的模式(schema),它提供了一种对表进行逻辑分组的方式。这种分组不仅有助...

    Hadoop原理与技术Hbase的基本操作

    上机实操,熟悉指令操作Hbase和java代码操作Hbase 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 三、实验内容 1:指令操作Hbase (1):start-all.sh,启动所有进程 (2):start-hbase.sh...

    hbase shell操作指南

    以上是HBase Shell操作的基本知识点,通过这些知识点,用户可以在HBase Shell环境下方便地进行数据管理任务。需要注意的是,在实际操作过程中,应根据具体的HBase集群配置和需求进行相应的调整。

    hdfs,hbase命令原理介绍

    #### HBase 基本操作 - **创建表**:使用 `create` 命令创建一个新的 HBase 表。 - **插入数据**:使用 `put` 命令插入数据。 - **获取数据**:使用 `get` 或 `scan` 命令获取数据。 - **删除数据**:使用 `delete` ...

    大数据开发之Hbase基本使用及存储设计实战教程(视频+笔记+代码)

    │ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...

    HBASE教程内含源码以及说明书可以自己运行复现.zip

    "2.HBase基本操作.md"文件会涵盖HBase的基本操作,如创建表、插入数据、查询数据、删除数据等。这些操作通常通过HBase的命令行接口(HBase Shell)或者Java API完成。学习者将了解如何使用HBase的增删改查语句,这...

Global site tag (gtag.js) - Google Analytics