Java操作HBase表入门

原创 2015年11月18日 20:41:41
package com.sse.hbase.Test;

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

import org.apache.hadoop.conf.Configuration;
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.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 com.sse.hbase.db.HBaseConfig;


public class FirstHBase {
	
	static Configuration conf = null;
	public FirstHBase(){
		conf = HBaseConfig.conf;//设置好Configuration对象
	}
	/**
	 * @throws IOException 
	 * @date 2015-11-18 创建hbase的表
	 */
	public void createHBaseTable() throws IOException{
		String tableName = "Student";
		HBaseAdmin admin = new HBaseAdmin(conf);//HBaseAdmin负责管理HBase集群,添加和丢弃表。
		if (admin.tableExists(tableName)){
        	//表不存在
        	System.out.println("表已存在,不需要新建表~~");
        	return ;
        }
		HTableDescriptor desc = new HTableDescriptor(tableName);//HBase中表的名字
		desc.addFamily(new HColumnDescriptor("Name"));//创建列族,名字是Name
		desc.addFamily(new HColumnDescriptor("Address"));//创建列族,名字是Address
		admin.createTable(desc);//新建表
	}
	
	/**@author 
	 * @throws IOException 
	 * @date 2015-11-18 往HBase指定表中插入记录
	 */
	public void insertHBase() throws IOException{
		HTable table = new HTable(conf, Bytes.toBytes("Student"));//HTabel负责跟记录相关的操作如增删改查等
		Put put = new Put(Bytes.toBytes("firstRow"));//设置行键,插入相应的一行记录
			put.add(Bytes.toBytes("Name"), Bytes.toBytes("firstname"), Bytes.toBytes("zhang"));
			put.add(Bytes.toBytes("Name"), Bytes.toBytes("secondname"), Bytes.toBytes("liang"));
			put.add(Bytes.toBytes("Address"), Bytes.toBytes("province"), Bytes.toBytes("henan"));
			put.add(Bytes.toBytes("Address"), Bytes.toBytes("city"), Bytes.toBytes("puyang"));
			put.add(Bytes.toBytes("Address"), Bytes.toBytes("county"), Bytes.toBytes("puyang"));
		table.put(put);
	}
	
	/**
	 * 根据行键查该行存储的记录信息.
	 */
	public void selectHBaseByRowkey() throws IOException{
		HTable table = new HTable(conf, Bytes.toBytes("Student"));//HTabel负责跟记录相关的操作如增删改查等
		Get get = new Get(Bytes.toBytes("firstRow")); 
		Result result = table.get(get);
		for(KeyValue kv :result.list()){
		  System.out.println("family:" +Bytes.toString(kv.getFamily()));//所属列族名
		  System.out.println("qualifier:" +Bytes.toString(kv.getQualifier()));//列名字
		  System.out.println("value:" +Bytes.toString(kv.getValue()));//存储的值
		  System.out.println("Timestamp:" +kv.getTimestamp());//时间戳
		}
	}
	
	/**
	 * 遍历HBase表. 
	 */
	public void selectHBaseScann() throws IOException{
		HTable table = new HTable(conf, Bytes.toBytes("Student"));//HTabel负责跟记录相关的操作如增删改查等
		/**=========遍历查询=========*/
		Scan scan = new Scan();
		ResultScanner rs =null;
		try {
		  rs = table.getScanner(scan);
		  for (Result r : rs) {
		    for(KeyValue kv :r.list()){
		      System.out.println("family:" +Bytes.toString(kv.getFamily()));
		      System.out.println("qualifier:" +Bytes.toString(kv.getQualifier()));
		      System.out.println("value:" +Bytes.toString(kv.getValue()));
		    }
		  }
		} finally {
		  rs.close();
		}
	}
	
	/**
	 * 更新HBase中某张表的一个记录. 
	 * @throws IOException 
	 */
	public void updateHBase() throws IOException{
		HTable table = new HTable(conf, Bytes.toBytes("Student"));//HTabel负责跟记录相关的操作如增删改查等
		Put put = new Put(Bytes.toBytes("firstRow")); //设置行键
		put.add(Bytes.toBytes("Address"), Bytes.toBytes("city"), Bytes.toBytes("shanghai"));//更新的时候找对族名和列名,再给定新的value值就可以了
		table.put(put);
	}
	
	/**
	 * 查询nickname的多个(本示例为2个)版本值.
	 */
	public void selectSomeVersion() throws IOException{
		HTable table = new HTable(conf, Bytes.toBytes("Student"));//HTabel负责跟记录相关的操作如增删改查等
		Get get = new Get(Bytes.toBytes("firstRow"));
		get.addColumn(Bytes.toBytes("Address"), Bytes.toBytes("city"));
		get.setMaxVersions(2);
		List<KeyValue> results = table.get(get).list();
		int total = results.size();
		System.out.println("Address 列族中 city 列的各个版本值");
		for(int i=0;i<total;i++){
			System.out.println(Bytes.toString(results.get(i).getValue()));
		}
	}
	/**
	 * 删除指定的某一行中的指定column.
	 * @throws IOException 
	 */
	public void deleteColumn() throws IOException{
		HTable table = new HTable(conf, Bytes.toBytes("Student"));//HTabel负责跟记录相关的操作如增删改查等
		Delete deleteColumn = new Delete(Bytes.toBytes("firstRow"));
		deleteColumn.deleteColumns(Bytes.toBytes("Address"),Bytes.toBytes("city"));
		table.delete(deleteColumn);
	}
	
	/**
	 * 删除指定的某一行.
	 * @throws IOException 
	 */
	public void deleteAll() throws IOException{
		HTable table = new HTable(conf, Bytes.toBytes("Student"));//HTabel负责跟记录相关的操作如增删改查等
		Delete deleteAll = new Delete(Bytes.toBytes("firstRow"));
		table.delete(deleteAll);
	}
	
	/**
	 * HBase中的整张表.
	 */
	public void deleteTable() throws IOException{
		HBaseAdmin admin = new HBaseAdmin(conf);//HBaseAdmin负责管理HBase集群,添加和丢弃表。
		admin.disableTable("Student");//首先禁用表,然后删除它
		admin.deleteTable("Student");
	}
	
	public static void main(String[] args) throws IOException {

		FirstHBase f = new FirstHBase();
		f.createHBaseTable();
//		System.out.println("往表中插入数据");
//		f.insertHBase();
//		System.out.println("往表中插入数据结束");
//		
//		System.out.println("查询指定行的值");
//		f.selectHBaseByRowkey();
		
//		System.out.println("遍历查询某张表");
//		f.selectHBaseScann();
		
//		System.out.println("更新指定表的指定行的指定列族的指定列的某个值");
//		f.updateHBase();
		
//		System.out.println("查看更新的那一个列对应的各个版本的值");
//		f.selectSomeVersion();
		
//		System.out.println("删除指定表的指定行的指定列族的指定列");
//		f.deleteColumn();
		
//		System.out.println("删除指定行");
//		f.deleteAll();
		
//		System.out.println("删除整张表");
//		f.deleteTable();
	
	}
}
package com.sse.hbase.db;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;


public class HBaseConfig {
	public static Configuration conf = null;
	public static String CONFIG_FILE=System.getProperty("user.dir")+File.separator+"config"+File.separator+"config.properties";
    static {
    	Properties p = new Properties();
    	try {
    		InputStream in = new BufferedInputStream(new FileInputStream(CONFIG_FILE));//读进来配置文件中的信息,设置conf对象
			p.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
    	
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", p.getProperty("hbasenodes"));// 使用eclipse时须添加这个,否则无法定位master需要配置hosts
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.master", p.getProperty("hbasemaster"));

    }

}

配置文件内容如下:

hbasemaster=192.168.0.120
hbasenodes=192.168.0.120,192.168.0.121,192.168.0.122,192.168.0.123,192.168.0.124,192.168.0.125,192.168.0.126,192.168.0.127,192.168.0.128,,192.168.0.129,192.168.0.130

版权声明:本文为博主原创文章,未经博主允许不得转载。

HBase总结(十二)Java API 与HBase交互实例

HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要...

HBase总结(十一)hbase Java API 介绍及使用示例

问题导读 1.java api与数据模型是如何对应的? 2.那两个类与HBase数据库有关系? 3.HTable可以用来做什么? 4.如何添加列族、列、列值? 5.hbase查询有几种方式? ...

JAVA操作HBASE数据操作详解

Hbase对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空间创建表,也可以直接创建表,进入default表空间。 对于数据操作,HBase支持四类主要的数据操作,分别...

Java在HBase数据库创建表

Java在HBase数据库创建表作者:chszs,版权所有,未经同意,不得转载。博主主页:http://blog.csdn.net/chszs要通过Java在HBase中创建一个数据表,首先需要导入h...
  • chszs
  • chszs
  • 2015年08月21日 16:38
  • 7943

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...

CT图像重建技术

由于csdn贴图不方便,并且不能上传附件,我把原文上传到了资源空间CT图像重建技术 1.引言 计算机层析成像(Computed Tomography,CT)是通过对物体进行不同角度的射线投影测量而...

Matlab绘图-很详细,很全面

Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串  find .|xargs grep -ri "IBM"  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名  find .|xargs g...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java操作HBase表入门
举报原因:
原因补充:

(最多只允许输入30个字)