Hbase基本操作

hbase shell操作

1.登录shell,退出

$HBASE_HOME/bin/hbase shell
quit

2.创建表

#create '表名', '列族名1','列族名2','列族名N'
create 'user','info1','info2'

3.查看所有表

list

4.查看表结构

#describe '表名'
describe 'user'

5.判断表是否存在

exists 'user'

6.是否禁用或启用表

is_enabled 'user'
is_disabled 'user'

7.添加记录

#put '表名','rowkey','列族:列名','列值'
put 'user','1','info1:name','zhangsan'

8.查看记录

#get '表名','rowkey'
get 'user','1'

9.查看表中的记录总数

#一个cell表示一个记录
count 'user'

10.获取某个列族下的数据

#get '表名','rowkey','列族'
get 'user','1','info1'

11.获取某个列族下的某个列

#get '表名','rowkey','列族:列’
get 'user','1','info1:age'

12.删除某个列数据

#delete  ‘表名’ ,‘rowkey’ , ‘列族:列'
delete 'user','1','info1:age'

13.删除一条记录

#deleteall '表名','rowkey'
deleteall 'user','2'

14.删除表

先要屏蔽该表,才能对该表进行删除
第一步 disable ‘表名’ ,第二步  drop '表名'

15.清空表

truncate '表名'

16.查看所有记录

scan "表名"  

17.查看某个表中某个列的所有数据

scan 'user',{COLUMNS => 'info1:age'}

18.更新操作

hbase没有更新操作,覆盖原数据即可实现更新操作。

java api操作

pom文件

<properties>
	<slf4j.version>1.7.7</slf4j.version>
	<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
	<!-- <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> 
		<version>0.98.6-hadoop2</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> 
		<artifactId>hbase-client</artifactId> <version>0.98.6-hadoop2</version> </dependency> 
		<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-examples</artifactId> 
		<version>0.98.6-hadoop2</version> </dependency> -->

	<dependency>
		<groupId>org.apache.hbase</groupId>
		<artifactId>hbase-it</artifactId>
		<version>1.1.2</version>
	</dependency>

	<!-- <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> 
		<version>4.10</version> </dependency> -->
	<dependency>
		<groupId>org.apache.hadoop</groupId>
		<artifactId>hadoop-common</artifactId>
		<version>2.6.5</version>
	</dependency>

	<dependency>
		<groupId>org.apache.hadoop</groupId>
		<artifactId>hadoop-client</artifactId>
		<version>2.6.5</version>
	</dependency>
	<dependency>
		<groupId>org.apache.hadoop</groupId>
		<artifactId>hadoop-hdfs</artifactId>
		<version>2.6.5</version>
	</dependency>
	<dependency>
		<groupId>jdk.tools</groupId>
		<artifactId>jdk.tools</artifactId>
		<version>1.7</version>
		<scope>system</scope>
		<systemPath>/home/miao/apps/install/jdk1.7.0_45/lib/tools.jar</systemPath>
	</dependency>

	<!-- 日志文件管理包 -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>${log4j.version}</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>${slf4j.version}</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>${slf4j.version}</version>
	</dependency>
</dependencies>

java api

package com.xiaojie;

import java.util.ArrayList;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
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.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
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.client.Table;
import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HbaseTest {

/**
 * 配置ss
 */
static Configuration config = null;
private Connection connection = null;
private Table table = null;

@Before
public void init() throws Exception {
	config = HBaseConfiguration.create();// 配置
	config.set("hbase.zookeeper.quorum", "mini1,mini2,mini3");// zookeeper地址
	config.set("hbase.zookeeper.property.clientPort", "2181");// zookeeper端口
	connection = ConnectionFactory.createConnection(config);
	table = connection.getTable(TableName.valueOf("test"));
}

/**
 * 创建一个表
 * 
 * @throws Exception
 */
@Test
public void createTable() throws Exception {
	// 创建表管理类
	HBaseAdmin admin = new HBaseAdmin(config); // hbase表管理
	// 创建表描述类
	TableName tableName = TableName.valueOf("test"); // 表名称
	HTableDescriptor desc = new HTableDescriptor(tableName);
	// 创建列族的描述类
	HColumnDescriptor family = new HColumnDescriptor("info1"); // 列族
	// 将列族添加到表中
	desc.addFamily(family);
	HColumnDescriptor family2 = new HColumnDescriptor("info2"); // 列族
	// 将列族添加到表中
	desc.addFamily(family2);
	// 创建表
	admin.createTable(desc); // 创建表
}

	//删除表
@Test
@SuppressWarnings("deprecation")
public void deleteTable() throws MasterNotRunningException,
		ZooKeeperConnectionException, Exception {
	HBaseAdmin admin = new HBaseAdmin(config);
	admin.disableTable("test");
	admin.deleteTable("test");
	admin.close();
}

/**
 * 向hbase中增加数据
 * 
 * @throws Exception
 */
@SuppressWarnings({ "deprecation", "resource" })
@Test
public void insertData() throws Exception {
//		table.setAutoFlushTo(false);
//		table.setWriteBufferSize(534534534);
//		ArrayList<Put> arrayList = new ArrayList<Put>();
//		for (int i = 21; i < 50; i++) {
//			Put put = new Put(Bytes.toBytes("1234"+i));
//			put.add(Bytes.toBytes("info1"), Bytes.toBytes("name"), Bytes.toBytes("wangwu"+i));
//			put.add(Bytes.toBytes("info1"), Bytes.toBytes("password"), Bytes.toBytes(1234+i));
//			arrayList.add(put);
//		}

	Put put = new Put(Bytes.toBytes("11"));
	put.add(Bytes.toBytes("info1"), Bytes.toBytes("name"), Bytes.toBytes("wangwu"));
	put.add(Bytes.toBytes("info1"), Bytes.toBytes("password"), Bytes.toBytes("11"));

	
	//插入数据
	table.put(put);
	//提交
	table.flushCommits();
}

/**
 * 修改数据
 * 
 * @throws Exception
 */
@Test
public void uodateData() throws Exception {
	Put put = new Put(Bytes.toBytes("1234"));
	put.add(Bytes.toBytes("info"), Bytes.toBytes("namessss"), Bytes.toBytes("lisi1234"));
	put.add(Bytes.toBytes("info"), Bytes.toBytes("password"), Bytes.toBytes(1234));
	//插入数据
	table.put(put);
	//提交
//		table.flushCommits();
    }

    /**
     * 删除数据
     * 
     * @throws Exception
     */
    @Test
    public void deleteDate() throws Exception {
        Delete delete = new Delete(Bytes.toBytes("1234"));
        table.delete(delete);
//		table.flushCommits();
    }

/**
 * 单条查询
 * 
 * @throws Exception
 */
@Test
public void queryData() throws Exception {
	Get get = new Get(Bytes.toBytes("1234"));
	Result result = table.get(get);
	System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password"))));
	System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("namessss"))));
	System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex"))));
}

/**
 * 全表扫描
 * 
 * @throws Exception
 */
@Test
public void scanData() throws Exception {
	Scan scan = new Scan();
	//scan.addFamily(Bytes.toBytes("info"));
	//scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("password"));
	scan.setStartRow(Bytes.toBytes("wangsf_0"));
	scan.setStopRow(Bytes.toBytes("wangwu"));
//		设置只扫描info1下的name列,速度会更快
        scan.addColumn(Bytes.toBytes("info1"), Bytes.toBytes("name"));
	
	ResultScanner scanner = table.getScanner(scan);
	

	for (Result result : scanner) {
		System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password"))));
		System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"))));
		//System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("password"))));
		//System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name"))));
	}
}

/**
 * 全表扫描的过滤器
 * 列值过滤器
 * 
 * @throws Exception
 */
@Test
public void scanDataByFilter1() throws Exception {

	// 创建全表扫描的scan
	Scan scan = new Scan();
	//过滤器:列值过滤器
	SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("info"),
			Bytes.toBytes("name"), CompareFilter.CompareOp.EQUAL,
			Bytes.toBytes("zhangsan2"));
	// 设置过滤器
	scan.setFilter(filter);

	// 打印结果集
	ResultScanner scanner = table.getScanner(scan);
	for (Result result : scanner) {
		System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password"))));
		System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"))));
		//System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("password"))));
		//System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name"))));
	}

}
/**
 * rowkey过滤器
 * @throws Exception
 */
@Test
public void scanDataByFilter2() throws Exception {
	
	// 创建全表扫描的scan
	Scan scan = new Scan();
	//匹配rowkey以wangsenfeng开头的
	RowFilter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^12341"));
	// 设置过滤器
	scan.setFilter(filter);
	// 打印结果集
	ResultScanner scanner = table.getScanner(scan);
	for (Result result : scanner) {
		System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password"))));
		System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"))));
		//System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("password"))));
		//System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name"))));
	}

	
}

/**
 * 匹配列名前缀  列名过滤器
 * @throws Exception
 */
@Test
public void scanDataByFilter3() throws Exception {
	
	// 创建全表扫描的scan
	Scan scan = new Scan();
	//匹配以na开头的列
	ColumnPrefixFilter filter = new ColumnPrefixFilter(Bytes.toBytes("na"));
	// 设置过滤器
	scan.setFilter(filter);
	// 打印结果集
	ResultScanner scanner = table.getScanner(scan);
	for (Result result : scanner) {
		System.out.println("rowkey:" + Bytes.toString(result.getRow()));
		System.out.println("info:name:"
				+ Bytes.toString(result.getValue(Bytes.toBytes("info"),
						Bytes.toBytes("name"))));
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age")) != null) {
			System.out.println("info:age:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info"),
							Bytes.toBytes("age"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex")) != null) {
			System.out.println("infi:sex:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info"),
							Bytes.toBytes("sex"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name")) != null) {
			System.out
			.println("info2:name:"
					+ Bytes.toString(result.getValue(
							Bytes.toBytes("info2"),
							Bytes.toBytes("name"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("age")) != null) {
			System.out.println("info2:age:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info2"),
							Bytes.toBytes("age"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("sex")) != null) {
			System.out.println("info2:sex:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info2"),
							Bytes.toBytes("sex"))));
		}
	}
	
}
/**
 * 过滤器集合
 * @throws Exception
 */
@Test
public void scanDataByFilter4() throws Exception {
	
	// 创建全表扫描的scan
	Scan scan = new Scan();
	//过滤器集合:MUST_PASS_ALL(and),MUST_PASS_ONE(or)
	FilterList filterList = new FilterList(Operator.MUST_PASS_ONE); 
	//匹配rowkey以wangsenfeng开头的
	RowFilter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^wangsenfeng"));
	//匹配name的值等于wangsenfeng
	SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("info"),
			Bytes.toBytes("name"), CompareFilter.CompareOp.EQUAL,
			Bytes.toBytes("zhangsan"));
	filterList.addFilter(filter);
	filterList.addFilter(filter2);
	// 设置过滤器
	scan.setFilter(filterList);
	// 打印结果集
	ResultScanner scanner = table.getScanner(scan);
	for (Result result : scanner) {
		System.out.println("rowkey:" + Bytes.toString(result.getRow()));
		System.out.println("info:name:"
				+ Bytes.toString(result.getValue(Bytes.toBytes("info"),
						Bytes.toBytes("name"))));
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age")) != null) {
			System.out.println("info:age:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info"),
							Bytes.toBytes("age"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex")) != null) {
			System.out.println("infi:sex:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info"),
							Bytes.toBytes("sex"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name")) != null) {
			System.out
			.println("info2:name:"
					+ Bytes.toString(result.getValue(
							Bytes.toBytes("info2"),
							Bytes.toBytes("name"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("age")) != null) {
			System.out.println("info2:age:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info2"),
							Bytes.toBytes("age"))));
		}
		// 判断取出来的值是否为空
		if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("sex")) != null) {
			System.out.println("info2:sex:"
					+ Bytes.toInt(result.getValue(Bytes.toBytes("info2"),
							Bytes.toBytes("sex"))));
		}
	}
	
}

@After
public void close() throws Exception {
	table.close();
	connection.close();
}

}
posted @ 2018-06-09 09:50  py小杰  阅读(155)  评论(0)    收藏  举报