HBase API 操作范例

package com.test.hbase.api;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.*;

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

import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

/**

* Created by zsq.

* Date: 2017/6/14

* desc:Hbase api操作

*/

public class HBaseAPIDemo {

public static void main(String[] args) throws IOException {

Configuration conf = HBaseConfiguration.create();

//设置zk的地址

conf.set("hbase.zookeeper.quorum", Constants.hostNames);

//获取链接hbase数据的链接对象

Connection conn = ConnectionFactory.createConnection(conf);

//过去时接口

//  HBaseAdmin admin=new HBaseAdmin(conn);

//获取操作hbase数据库的对象

HBaseAdmin ha = (HBaseAdmin) conn.getAdmin();

//        createNamespace(ha);

//        listNamespace(ha);

//        createTables(ha);

//        listNamespaceTables(ha);

//        putDataToTables(ha, conn);

//        putMultilDataToTables(ha, conn);

//        scanTablesData(ha, conn);

//        getTablesData(ha, conn);

deleteNsAndTable(ha, conn);

}

/**

* shell操作:create_namespace ‘ns2‘

* 说明:创建命名空间

*

* @param ha

* @throws IOException

*/

public static void createNamespace(HBaseAdmin ha) throws IOException {

ha.createNamespace(NamespaceDescriptor.create("ns2").build());

ha.close();

System.out.println("-----createNamespace----over");

}

/**

* shell操作:list_namespace

* 描述: 查看所有命名空间

*

* @param ha

* @throws IOException

*/

public static void listNamespace(HBaseAdmin ha) throws IOException {

NamespaceDescriptor[] listns = ha.listNamespaceDescriptors();

for (NamespaceDescriptor ns : listns) {

System.out.println(ns.getName());

}

ha.close();

System.out.println("-----listNamespace----over");

}

/**

* 创建表:help ‘create‘

* shell操作: create ‘ns2:stu‘, ‘cf_info‘, ‘cf_beizhu‘

*

* @param ha

* @throws IOException

*/

public static void createTables(HBaseAdmin ha) throws IOException {

//先判断表是否存在

if (!ha.tableExists("ns2:stu")) {

HTableDescriptor htable = new HTableDescriptor(TableName.valueOf("ns2:stu"));

//创建一个表至少需要添加一个列族

htable.addFamily(new HColumnDescriptor("cf_info"));

htable.addFamily(new HColumnDescriptor("cf_beizhu"));

ha.createTable(htable);

}

ha.close();

System.out.println("-----createTables----over");

}

/**

* shell操作:

* 查看命名空下的表:

* list_namespace_tables ‘ns2‘

*

* @param ha

* @throws IOException

*/

public static void listNamespaceTables(HBaseAdmin ha) throws IOException {

HTableDescriptor[] htables = ha.listTableDescriptorsByNamespace("ns2");

for (HTableDescriptor tb : htables) {

System.out.println(tb.getTableName());

}

ha.close();

System.out.println("-----createTables----over");

}

/**

* 添加数据到表:help ‘put‘

* shell操作:put ‘ns1:t1‘, ‘r1‘, ‘c1‘, ‘value‘

*

* @param ha

* @param conn

* @throws IOException

*/

public static void putDataToTables(HBaseAdmin ha, Connection conn) throws IOException {

//判断表是否存在

if (ha.tableExists("ns2:stu")) {

Table mTable = conn.getTable(TableName.valueOf("ns2:stu"));

//创建Put对象并且添加rowkey

Put put = new Put("soft_20170101".getBytes());

//第一个参数是列族,第二个参数是列名,第三个参数是列的值

put.addColumn("cf_info".getBytes(), "name".getBytes(), "laowang".getBytes());

put.addColumn("cf_info".getBytes(), "age".getBytes(), "20".getBytes());

put.addColumn("cf_info".getBytes(), "sex".getBytes(), "nan".getBytes());

put.addColumn("cf_beizhu".getBytes(), "address".getBytes(), "fangshan".getBytes());

mTable.put(put);

}

ha.close();

System.out.println("-----putDataToTables----over");

}

/**

* 批量添加数据到Hbase表

*

* @param ha

* @param conn

* @throws IOException

*/

public static void putMultilDataToTables(HBaseAdmin ha, Connection conn) throws IOException {

//判断表是否存在

if (ha.tableExists("ns2:stu")) {

Table mTable = conn.getTable(TableName.valueOf("ns2:stu"));

List<Put> listput = new ArrayList<Put>();

for (int i = 0; i < 100; i++) {

//创建Put对象并且添加rowkey

Put put = new Put(("soft_20170101" + i).getBytes());

//第一个参数是列族,第二个参数是列名,第三个参数是列的值

put.addColumn("cf_info".getBytes(), "name".getBytes(), ("laowang" + i).getBytes());

put.addColumn("cf_info".getBytes(), "age".getBytes(), "20".getBytes());

if (i % 2 == 1) {

put.addColumn("cf_info".getBytes(), "sex".getBytes(), "nv".getBytes());

} else {

put.addColumn("cf_info".getBytes(), "sex".getBytes(), "nan".getBytes());

}

put.addColumn("cf_beizhu".getBytes(), "address".getBytes(), ("fangshan" + i).getBytes());

listput.add(put);

}

//批量插入

mTable.put(listput);

}

ha.close();

System.out.println("-----putMultilDataToTables----over");

}

/**

* 查看表数据:

* scan ‘ns2:stu‘

* 查看一个列族

* scan ‘ns2:stu‘,{COLUMNS => ‘cf_info‘}

* 查看多个列族

* scan ‘ns2:stu‘,{COLUMNS => [‘cf_info‘,‘cf_beizhu‘]}

* 查看某个列的数据:

* scan ‘ns2:stu‘,{COLUMNS => ‘cf_info:name‘}

*

* @param ha

* @param conn

* @throws IOException

*/

public static void scanTablesData(HBaseAdmin ha, Connection conn) throws IOException {

//判断表是否存在

if (ha.tableExists("ns2:stu")) {

Table mTable = conn.getTable(TableName.valueOf("ns2:stu"));

//扫描整张表

Scan scan = new Scan();

//scan.addFamily("cf_info".getBytes());

//            scan.addColumn("cf_info".getBytes(), "name".getBytes());

ResultScanner rs = mTable.getScanner(scan);

for (Result result : rs) {

System.out.println("name:" + Bytes.toString(result.getValue("cf_info".getBytes(), "name".getBytes())));

System.out.println("age:" + Bytes.toString(result.getValue("cf_info".getBytes(), "age".getBytes())));

System.out.println("sex:" + Bytes.toString(result.getValue("cf_info".getBytes(), "sex".getBytes())));

System.out.println("address:" + Bytes.toString(result.getValue("cf_beizhu".getBytes(), "address".getBytes())));

}

}

ha.close();

System.out.println("-----scanTablesData----over");

}

/**

* 查看某一行数据:help ‘get‘

* <p>

* get ‘ns1:stu‘,‘data_20170102‘

* <p>

* 查看某行的其中的一个列族的数据:

* get ‘ns1:stu‘,‘data_20170102‘,{COLUMN => ‘cf_info‘}

* <p>

* 查看某行的其中的多个列族的数据:

* get ‘ns1:stu‘,‘data_20170102‘,{COLUMN => [‘cf_info‘,‘cf_beizhu‘]}

* <p>

* 获取某一个列的值:

* get ‘ns1:stu‘,‘data_20170102‘,‘cf_info:name‘

*

* @param ha

* @param conn

* @throws IOException

*/

public static void getTablesData(HBaseAdmin ha, Connection conn) throws IOException {

//判断表是否存在

if (ha.tableExists("ns2:stu")) {

Table mTable = conn.getTable(TableName.valueOf("ns2:stu"));

//获取整行数据

Get get = new Get("soft_2017010196".getBytes());

//            get.addFamily("cf_info".getBytes());

get.addColumn("cf_info".getBytes(), "name".getBytes());

Result result = mTable.get(get);

System.out.println("name:" + Bytes.toString(result.getValue("cf_info".getBytes(), "name".getBytes())));

System.out.println("age:" + Bytes.toString(result.getValue("cf_info".getBytes(), "age".getBytes())));

System.out.println("sex:" + Bytes.toString(result.getValue("cf_info".getBytes(), "sex".getBytes())));

System.out.println("address:" + Bytes.toString(result.getValue("cf_beizhu".getBytes(), "address".getBytes())));

}

ha.close();

System.out.println("-----getTablesData----over");

}

/**

* 操作:删除命名空间和命名空间所有表

*

* @param ha

* @param conn

* @throws IOException

*/

public static void deleteNsAndTable(HBaseAdmin ha, Connection conn) throws IOException {

//遍历命名空间下所有表

HTableDescriptor[] htables = ha.listTableDescriptorsByNamespace("ns1");

for (HTableDescriptor tb : htables) {

System.out.println(tb.getTableName());

if (ha.isTableEnabled(tb.getTableName())) {

ha.disableTable(tb.getTableName());

}

ha.deleteTable(tb.getTableName());

}

ha.deleteNamespace("ns1");

ha.close();

System.out.println("-----deleteNsAndTable----over");

}

}

// HBase 的过滤器操作

public class HbaseAPIFilter {

public static void main(String[] args) throws Exception {

//        singleColumnValueFilter();

//        qualifierFilter();

familyFilter();

}

/**

* 1、单个列值过滤   SingleColumnValueFilter

*

* @throws IOException

*/

public static void singleColumnValueFilter() throws IOException {

Table mTable = TableUtils.getTable(Constants.tableName);

//如果匹配,那么可用获取行数据

//单个列值的匹配:比较基类为BinaryComparator   BinaryComparator 匹配完整字节数组

// SingleColumnValueFilter scvf = new SingleColumnValueFilter("cf_info".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "laowang88".getBytes());

SingleColumnValueFilter scvf = new SingleColumnValueFilter("cf_info".getBytes(), "name".getBytes(), CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator("laowang88".getBytes()));

//BinaryPrefixComparator 匹配开始的部分字节数组 name的值开始部分为"xiao"的行都过滤出来

SingleColumnValueFilter scvf2 = new SingleColumnValueFilter("cf_info".getBytes(), "name".getBytes(), CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryPrefixComparator("xiao".getBytes()));

//        Only EQUAL or NOT_EQUAL comparisons are valid with this comparator.

//        所以对于RegexStringComparator基类只能用EQUAL或者NOT_EQUAL

SingleColumnValueFilter scvf3 = new SingleColumnValueFilter("cf_info".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^[x].*$"));

//        Only EQUAL or NOT_EQUAL tests are valid with this comparator.

//        所以对于SubstringComparator基类只能用EQUAL或者NOT_EQUAL

SingleColumnValueFilter scvf4 = new SingleColumnValueFilter("cf_info".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, new SubstringComparator("bai"));

Scan scan = new Scan();

scan.setFilter(scvf4);

ResultScanner rs = mTable.getScanner(scan);

for (Result result : rs) {

System.out.println("name:" + Bytes.toString(result.getValue("cf_info".getBytes(), "name".getBytes())));

System.out.println("age:" + Bytes.toString(result.getValue("cf_info".getBytes(), "age".getBytes())));

System.out.println("sex:" + Bytes.toString(result.getValue("cf_info".getBytes(), "sex".getBytes())));

System.out.println("address:" + Bytes.toString(result.getValue("cf_beizhu".getBytes(), "address".getBytes())));

}

}

/**

* 2. 列过滤器(列过滤器表中存在该列的数据都出来)

* QualifierFilter

*

* @throws IOException

*/

public static void qualifierFilter() throws IOException {

Table mTable = TableUtils.getTable(Constants.tableName);

//列名过滤:

//比较基类为BinaryComparator   BinaryComparator 匹配完整字节数组

QualifierFilter columnsNameFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator("name".getBytes()));

QualifierFilter columnsNameFilter2 = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator("age".getBytes()));

//        Only EQUAL or NOT_EQUAL tests are valid with this comparator.

//        所以对于SubstringComparator基类只能用EQUAL或者NOT_EQUAL

QualifierFilter columnsNameFilter3 = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("a"));

//BinaryPrefixComparator 匹配开始的部分字节数组, (可能用)

// RegexStringComparator, 正则表达式匹配(可能用)

Scan scan = new Scan();

scan.setFilter(columnsNameFilter3);

ResultScanner rs = mTable.getScanner(scan);

for (Result result : rs) {

System.out.println("name:" + Bytes.toString(result.getValue("cf_info".getBytes(), "name".getBytes())));

System.out.println("age:" + Bytes.toString(result.getValue("cf_info".getBytes(), "age".getBytes())));

System.out.println("sex:" + Bytes.toString(result.getValue("cf_info".getBytes(), "sex".getBytes())));

System.out.println("address:" + Bytes.toString(result.getValue("cf_beizhu".getBytes(), "address".getBytes())));

}

}

/**

* 定义列族过滤器(表中存在该列族的数据都出来)

* FamilyFilter

*

* @throws IOException

*/

public static void familyFilter() throws IOException {

Table mTable = TableUtils.getTable(Constants.tableName);

//因为是根据列族的名称过滤,所以传入列族名称

FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryPrefixComparator("cf_i".getBytes()));

//        Only EQUAL or NOT_EQUAL tests are valid with this comparator.

//        所以对于RegexStringComparator基类只能用EQUAL或者NOT_EQUAL

FamilyFilter familyFilter2 = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^[a-z_]{3}[^b].+$"));

//        BinaryComparator 匹配完整字节数组, (可能用)

//        SubstringComparator 比配子串、大小写不敏感(可能用)

Scan scan = new Scan();

scan.setFilter(familyFilter2);

ResultScanner rs = mTable.getScanner(scan);

for (Result result : rs) {

System.out.println("name:" + Bytes.toString(result.getValue("cf_info".getBytes(), "name".getBytes())));

System.out.println("age:" + Bytes.toString(result.getValue("cf_info".getBytes(), "age".getBytes())));

System.out.println("sex:" + Bytes.toString(result.getValue("cf_info".getBytes(), "sex".getBytes())));

System.out.println("address:" + Bytes.toString(result.getValue("cf_beizhu".getBytes(), "address".getBytes())));

}

}

}

注意: 前提是保证集群正常运行和HBase集群正常工作。

时间: 2024-12-26 00:34:02

HBase API 操作范例的相关文章

hbase API操作范例

public class HbaseDemo { private Configuration conf = null; @Before public void init(){ conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "lp5,lp6,lp7"); } /* * 新建表 */ @Test public void create() throws Exception{ /

HBase API操作

1. 命名空间NameSpace 在关系数据库系统中,命名空间NameSpace指的是一个表的逻辑分组 ,同一分组中的各个表有类似的用途.命名空间的概念为即将到来的多租户特性打下基础:配额管理(Quota Management (HBASE-8410)):限制一个NameSpace可以使用的资源,资源包括region和table等命名空间安全管理(Namespace Security Administration (HBASE-9206)):提供了另一个层面的多租户安全管理Region服务器组(

HBase 6、用Phoenix Java api操作HBase

开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hbase-site.xml.hdfs-site.xml文件放到工程src下 2.把phoenix的phoenix-4.3.0-client.jar和phoenix-core-4.3.0.jar添加到工程classpath 3.配置集群中各节点的hosts文件,把客户端的hostname:IP添加进去

hbase简单操作

hbase有hbase shell以及hbase 客户端api两种方式进行hbase数据库操作: 首先,hbase shell是在linux命令行进行操作,输入hbase shell命令,进入shell命令行. 输入 help  可以看到命令分组 上面是hbase的一些操作,要查看具体某一个操作,例如scan的使用方法,在具体的某一个创建的实例后使用help参数 比如:create 't1' ,'ft:h1' scan 't1' help 后就可以显示相应的scan的操作,根据帮助提示信息即可查

2、通过HBase API进行开发

一.将HBase的jar包及hbase-site.xml添加到IDE 1.到安装HBase集群的任意一台机器上找到HBase的安装目录,到lib目录下下载HBase需要的jar包,然后再到conf目录下下载hbase-site.xml. 2.在ide中新建一个java项目,然后再右击"项目名",新建2个文件夹,分别是"lib"和"conf" 3.将1步骤中下载的jar包放到2步骤中的lib目录下,并且将hbase-site.xml放到conf目录

HBase Shell操作

Hbase 是一个分布式的.面向列的开源数据库,其实现是建立在google 的bigTable 理论之上,并基于hadoop HDFS文件系统.     Hbase不同于一般的关系型数据库(RDBMS).是一种适用于非结构化数据存储的数据库,且Hbase是基于列的数据库. 下面的内容基于我们已经安装好hadoop.hbase. 一.hbase shell 介绍 hbase shell是用户和hbase 交互的接口之一,当然还可以通过其它方式比如java api等 下表列出了 hbase 基本命令

【甘道夫】HBase基本数据操作详解【完整版,绝对精品】

引言 之前详细写了一篇HBase过滤器的文章,今天把基础的表和数据相关操作补上. 本文档参考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 所有代码均基于"hbase 0.96.2-hadoop2"版本编写,均实测通过. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37878701 概述 对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空

linux中mysql,mongodb,redis,hbase数据库操作

1.实验内容与完成情况:(实验具体步骤和实验截图说明) (一) MySQL 数据库操作 学生表 Student Name English Math Computer zhangsan 69 86 77 lisi 55 100 88 根据上面给出的 Student 表,在 MySQL 数据库中完成如下操作: (1)在 MySQL 中创建 Student 表,并录入数据: (2)用 SQL 语句输出 Student 表中的所有记录: (3)查询 zhangsan 的 Computer 成绩: (4)

HBase API 操 作

第 6 章 HBase API 操 作 6.1 环境准备       新建项目后在pom.xml 中添加依赖: 6.2 HBaseAPI 6.2.1       获取 Configuration 对象 6.2.2 判断表是否存在 6.2.3       创建表 —————————————————————————————                           6.2.4       删除表 6.2.5 向表中插入数据 6.2.6       删除多行数据 6.2.7       获取