HBase 基本操作与api

基本操作

1.进入HBase客户端命令行
[atguigu@cm1 hbase]$ bin/hbase shell
2.查看帮助命令
hbase(main):001:0> help
3.查看当前数据库中有哪些表
hbase(main):002:0> list

表的操作

1.创建表
hbase(main):002:0> create ‘student’,‘info’
2.插入数据到表
hbase(main):003:0> put ‘student’,‘1001’,‘info:sex’,‘male’
hbase(main):004:0> put ‘student’,‘1001’,‘info:age’,‘18’
hbase(main):005:0> put ‘student’,‘1002’,‘info:name’,‘Janna’
hbase(main):006:0> put ‘student’,‘1002’,‘info:sex’,‘female’
hbase(main):007:0> put ‘student’,‘1002’,‘info:age’,‘20’
3.扫描查看表数据
hbase(main):008:0> scan ‘student’
hbase(main):009:0> scan ‘student’,{STARTROW => ‘1001’, STOPROW => ‘1001’}
hbase(main):010:0> scan ‘student’,{STARTROW => ‘1001’}
4.查看表结构
hbase(main):011:0> describe ‘student’
5.更新指定字段的数据
hbase(main):012:0> put ‘student’,‘1001’,‘info:name’,‘Nick’
hbase(main):013:0> put ‘student’,‘1001’,‘info:age’,‘100’
6.查看“指定行”或“指定列族:列”的数据
hbase(main):014:0> get ‘student’,‘1001’
hbase(main):015:0> get ‘student’,‘1001’,‘info:name’
7.统计表数据行数
hbase(main):021:0> count ‘student’
8.删除数据
删除某rowkey的全部数据:
hbase(main):016:0> deleteall ‘student’,‘1001’
删除某rowkey的某一列数据:
hbase(main):017:0> delete ‘student’,‘1002’,‘info:sex’
9.清空表数据
hbase(main):018:0> truncate ‘student’
提示:清空表的操作顺序为先disable,然后再truncate。
10.删除表
首先需要先让该表为disable状态:
hbase(main):019:0> disable ‘student’
然后才能drop这个表:
hbase(main):020:0> drop ‘student’
提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.
11.变更表信息
将info列族中的数据存放3个版本:
hbase(main):022:0> alter ‘student’,{NAME=>‘info’,VERSIONS=>3}
hbase(main):022:0> get ‘student’,‘1001’,{COLUMN=>‘info:name’,VERSIONS=>3}

基本api (java)

pom.xml

	<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<classifier>jdk15</classifier>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.4.10</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.6</version>
		</dependency>

		<dependency>
			<groupId>org.apache.axis</groupId>
			<artifactId>axis</artifactId>
			<version>1.4</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.kylin</groupId>
			<artifactId>kylin-jdbc</artifactId>
			<version>2.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-nop</artifactId>
			<version>1.7.2</version>
		</dependency>


		<dependency>
			<groupId>net.iharder</groupId>
			<artifactId>base64</artifactId>
			<version>2.3.8</version>
		</dependency>
package com.zzti.Hbase01;

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

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.Admin;
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.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;

public class HBaseapi {
	public static Configuration conf;
	static {
		// 使用HBaseConfiguration的单例方法实例化
		conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "222.22.91.81");
		// conf.set("hbase.zookeeper.property.clientPort", "2181");
	}

	/**
	 * 
	 * @param tableName
	 * @return boolean 判断表是否存在
	 * @throws Exception
	 */
	public static boolean isTableExist(String tableName) throws IOException {
		// 在HBase中管理、访问表需要先创建HBaseAdmin对象
		// Connection connection = ConnectionFactory.createConnection(conf);
		// HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
		HBaseAdmin admin = new HBaseAdmin(conf);
		return admin.tableExists(tableName);
	}

	/**
	 * 
	 * @param tableName
	 * @param columnFamily 创建表 创建列族
	 * @throws Exception shell creat 'tablename' 'columnfamily'
	 */
	public static void createTable(String tableName, String... columnFamily) throws Exception {
		HBaseAdmin admin = new HBaseAdmin(conf);
		// 判断表是否存在
		if (isTableExist(tableName)) {
			System.out.println("表" + tableName + "已存在");
			// System.exit(0);
		} else {
			// 创建表属性对象,表名需要转字节
			HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));
			// 创建多个列族
			for (String cf : columnFamily) {
				descriptor.addFamily(new HColumnDescriptor(cf));
			}
			// 根据对表的配置,创建表
			admin.createTable(descriptor);
			System.out.println("表" + tableName + "创建成功!");
		}
	}

	/**
	 * 
	 * @param tableName 删除表
	 * @throws MasterNotRunningException
	 * @throws ZooKeeperConnectionException
	 * @throws IOException                  shell(不可以直接删除) disable 'tablename' drop
	 *                                      'tablename'
	 */
	public static void dropTable(String tableName)
			throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
		HBaseAdmin admin = new HBaseAdmin(conf);
		if (isTableExist(tableName)) {
			admin.disableTable(tableName);
			admin.deleteTable(tableName);
			System.out.println("表" + tableName + "删除成功!");
		} else {
			System.out.println("表" + tableName + "不存在!");
		}
	}

	/**
	 * 
	 * @param tableName      表名
	 * @param rowKey         行建
	 * @param columnFamily列族
	 * @param column列
	 * @param value值
	 * @throws IOException shell put
	 *                     'tablename','roowkey','columnfamily:coumn','value'
	 */
	public static void addRowData(String tableName, String rowKey, String columnFamily, String column, String value)
			throws IOException {
		// 创建HTable对象
		HTable hTable = new HTable(conf, tableName);
		// 向表中插入数据
		Put put = new Put(Bytes.toBytes(rowKey));
		// 向Put对象中组装数据
		put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
		hTable.put(put);
		hTable.close();
		System.out.println("插入数据成功");
	}

	/**
	 * 
	 * @param tableName 查看表的数据
	 * @throws IOException shell scan 'tablename'
	 */
	public static void getAllRows(String tableName) throws IOException {
		HTable hTable = new HTable(conf, tableName);
		// 得到用于扫描region的对象
		Scan scan = new Scan();
		// 使用HTable得到resultcanner实现类的对象
		ResultScanner resultScanner = hTable.getScanner(scan);
		for (Result result : resultScanner) {
			Cell[] cells = result.rawCells();
			for (Cell cell : cells) {
				// 得到rowkey
				System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell)));
				// 得到列族
				System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));
				System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
				System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
			}
		}
	}

	/**
	 * 
	 * @param tableName
	 * @param rowKey    根据行键查询,将行键所在的列的所有内容输出
	 * @throws IOException shell get 'student','1001'
	 */
	public static void getRow(String tableName, String rowKey) throws IOException {
		HTable table = new HTable(conf, tableName);
		Get get = new Get(Bytes.toBytes(rowKey));
		// get.setMaxVersions();显示所有版本
		// get.setTimeStamp();显示指定时间戳的版本
		Result result = table.get(get);
		for (Cell cell : result.rawCells()) {
			System.out.println("行键:" + Bytes.toString(result.getRow()));
			System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));
			System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
			System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
			System.out.println("时间戳:" + cell.getTimestamp());
		}
	}

	/**
	 * 
	 * @param tableName
	 * @param rowKey
	 * @param family
	 * @param qualifier 获取某一行指定“列族:列”的数据
	 * @throws IOException shell get 'student','1001','info:age'
	 */
	public static void getRowQualifier(String tableName, String rowKey, String family, String qualifier)
			throws IOException {
		HTable table = new HTable(conf, tableName);
		Get get = new Get(Bytes.toBytes(rowKey));
		get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
		Result result = table.get(get);
		for (Cell cell : result.rawCells()) {
			System.out.println("行键:" + Bytes.toString(result.getRow()));
			System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));
			System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
			System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
		}
	}

	/**
	 * 
	 * @param tableName
	 * @param rows      刪除表一行或多行刪除数据
	 * @throws IOException
	 */
	public static void deleteMultiRow(String tableName, String... rows) throws IOException {
		HTable hTable = new HTable(conf, tableName);
		List<Delete> deleteList = new ArrayList<Delete>();
		for (String row : rows) {
			Delete delete = new Delete(Bytes.toBytes(row));
			deleteList.add(delete);
		}
		hTable.delete(deleteList);
		hTable.close();
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			// System.out.println(isTableExist("demo"));
			// createTable("demo","frist");
			// dropTable("demo");
			// getAllRows("student");
			getRowQualifier("student", "1001", "info", "age");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值