Hbase的Eclipse連接測試

1首先學習用maven創建hadoop項目以及鏈接Eclipse測試。這部分內容可以參考

    我的上篇博客http://blog.csdn.net/tryhl/article/details/44032687

2HbaseEclipse連接測試

 1)首先在源pom.xml文件中加入以下依賴

	<dependency>
	  <groupId>org.apache.hbase</groupId>
          <artifactId>hbase-client</artifactId>
          <version>0.98.6-hadoop2</version>
         </dependency>

  注:使用自己的maven服務器可能下載不了,如果下載不了的話,在maven配置文件中把自己的倉庫註釋掉,使用默認的。如果還是不能下載(最好翻牆以下)

  整個的pom文件依賴,如下圖

   


2)把集羣中的hbase-site.xml複製到項目的ClassPath路徑下

 

如下是我的項目結構

 

新創建一個source folder包,方法如下:

點擊項目名---->右鍵 new---> source folder---->輸入 src/main/resources/hbase

然後把hbase-site.xml複製到下面如上圖。

 

最後把下面的屬性加入到hbase-site.xml

   

   <property>
       <name>fs.hdfs.impl</name>
        <value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
   </property> 

 

3)測試代碼

 

package com.lh.test;

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.TableName;
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.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.filter.Filter;
import org.apache.hadoop.hbase.util.Bytes;

public class HBaseTest {

	static Configuration conf = HBaseConfiguration.create();

	/**
	 * create a table :table_name(columnFamily)
	 * 
	 * @param tablename
	 * @param columnFamily
	 * @throws Exception
	 */
	public static void createTable(String tablename, String columnFamily)
			throws Exception {
		HBaseAdmin admin = new HBaseAdmin(conf);
		if (admin.tableExists(tablename)) {
			System.out.println("Table exists!");
			System.exit(0);
		} else {
			HTableDescriptor tableDesc = new HTableDescriptor(
					TableName.valueOf(tablename));
			tableDesc.addFamily(new HColumnDescriptor(columnFamily));
			admin.createTable(tableDesc);
			System.out.println("create table success!");
		}
		admin.close();
	}

	/**
	 * delete table ,caution!!!!!! ,dangerous!!!!!!
	 * 
	 * @param tablename
	 * @return
	 * @throws IOException
	 */
	public static boolean deleteTable(String tablename) throws IOException {
		HBaseAdmin admin = new HBaseAdmin(conf);
		if (admin.tableExists(tablename)) {
			try {
				// 刪除之前 需要先disable表
				admin.disableTable(tablename);
				admin.deleteTable(tablename);
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
				admin.close();
				return false;
			}
		}
		admin.close();
		return true;
	}

	/**
	 * put a cell data into a row identified by rowKey,columnFamily,identifier
	 * 
	 * @param HTable
	 *            , create by : HTable table = new HTable(conf, "tablename")
	 * @param rowKey
	 * @param columnFamily
	 * @param identifier
	 * @param data
	 * @throws Exception
	 */
	public static void putCell(HTable table, String rowKey,
			String columnFamily, String identifier, String data)
			throws Exception {
		Put p1 = new Put(Bytes.toBytes(rowKey));
		p1.add(Bytes.toBytes(columnFamily), Bytes.toBytes(identifier),
				Bytes.toBytes(data));
		table.put(p1);
		System.out.println("put '" + rowKey + "', '" + columnFamily + ":"
				+ identifier + "', '" + data + "'");
	}

	/**
	 * get a row identified by rowkey
	 * 
	 * @param HTable
	 *            , create by : HTable table = new HTable(conf, "tablename")
	 * @param rowKey
	 * @throws Exception
	 */
	public static Result getCell(HTable table, String rowKey) throws Exception {
		Get get = new Get(Bytes.toBytes(rowKey));
		Result result = table.get(get);
		System.out.println("Get: " + result);
		return result;
	}

	/**
	 * delete a row identified by rowkey
	 * 
	 * @param HTable
	 *            , create by : HTable table = new HTable(conf, "tablename")
	 * @param rowKey
	 * @throws Exception
	 */
	public static void deleteCell(HTable table, String rowKey) throws Exception {
		Delete delete = new Delete(Bytes.toBytes(rowKey));
		table.delete(delete);
		System.out.println("Delete row: " + rowKey);
	}

	/**
	 * return all row from a table
	 * 
	 * @param HTable
	 *            , create by : HTable table = new HTable(conf, "tablename")
	 * @throws Exception
	 */
	public static ResultScanner scanAll(HTable table) throws Exception {
		Scan s = new Scan();
		ResultScanner rs = table.getScanner(s);
		return rs;
	}

	/**
	 * return a range of rows specified by startrow and endrow
	 * 
	 * @param HTable
	 *            , create by : HTable table = new HTable(conf, "tablename")
	 * @param startrow
	 * @param endrow
	 * @throws Exception
	 */
	public static ResultScanner scanRange(HTable table, String startrow,
			String endrow) throws Exception {
		Scan s = new Scan(Bytes.toBytes(startrow), Bytes.toBytes(endrow));
		ResultScanner rs = table.getScanner(s);
		return rs;
	}

	/**
	 * return a range of rows filtered by specified condition
	 * 
	 * @param HTable
	 *            , create by : HTable table = new HTable(conf, "tablename")
	 * @param startrow
	 * @param filter
	 * @throws Exception
	 */
	public static ResultScanner scanFilter(HTable table, String startrow,
			Filter filter) throws Exception {
		Scan s = new Scan(Bytes.toBytes(startrow), filter);
		ResultScanner rs = table.getScanner(s);
		return rs;
	}

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		// 創建一個名爲 booktable的表 author的列族
		// HBaseTest.createTable("bookTable", "author");

		// HTable table = new HTable(conf, "bookTable");

		// 插入數據
		// HBaseTest.putCell(table, "100001", "author", "name", "liuhuan");
		// HBaseTest.putCell(table,"100002", "author", "age", "23");

		// 刪除行
		// HBaseTest.deleteCell(table, "100002");

		// 得到行數據
		// HBaseTest.getCell(table, "100001");

		// keyrow範圍掃描
		// ResultScanner rs = HBaseTest.scanRange(table, "100001", "100003");
		// 全表掃描
		// ResultScanner rs = HBaseTest.scanAll(table);
		// for (Result r : rs) {
		// System.out.println("Scan: " + r);
		// }
		// table.close();

		// 刪除表
		// HBaseTest.deleteTable("bookTable");

	}
}

把上面的代碼複製到相應的包下,執行測試即可



此文章用於學習和交流轉載請註明

也可加入羣316297243交流學習


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章