欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

hbase连接设置密码(hbase教程菜鸟教程)

程序员文章站 2023-12-04 13:11:52
hbase采用java实现,其中 java api 是原生支持的,其它编程语言接口需要通过 thrift 协议支持。在hbase 官方代码包里含有java实现的原生访问客户端,相关的类在 org.ap...

hbase采用java实现,其中 java api 是原生支持的,其它编程语言接口需要通过 thrift 协议支持。在hbase 官方代码包里含有java实现的原生访问客户端,相关的类在 org.apache.hadoop.hbase.client 包中,都是与 hbase 数据存储管理相关的 api。

基本操作有:hbase 的配置、hbase 表的管理、列族的管理、列的管理、数据操作等。

相关依赖

官方的jar包在hbase 安装目录下的 lib 子目录。但是一般还是使用maven管理jar依赖。主要用到hbase-client-x.x.x.jar和hbase-common-x.x.x.jar。

maven管理依赖,在项目的pom.xml加:

<dependency>
    <groupid>org.apache.hbase</groupid>
    <artifactid>hbase-client</artifactid>
    <version>2.4.1</version>
</dependency>
<dependency>
    <groupid>org.apache.hbase</groupid>
    <artifactid>hbase-common</artifactid>
    <version>2.4.1</version>
</dependency>

导入的基本类有:

import org.apache.hadoop.conf.configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.bytes;

api的类

管理 hbase,则用 admin 接口来创建、删除、更改表。数据的crud,则使用 table 接口等。主要是admin 和 table 接 口以及 hbaseconfiguration、htabledescriptor、hclounmdescriptor、put、get、result、scan 这些类。

  • admin、管理hbase数据库的表信息的接口。
  • hbaseconfiguration、hbase的配置类。
  • htabledescriptor、表的描述类,包含了表的名字及其对应表的列族。
  • hclounmdescriptor、列族描述类,维护着关于列族的信息,例如版本号,压缩设置等。
  • htable、表的管理类,和hbase表直接通信。
  • put、数据新增修改管理类,对单个行执行添加操作。
  • get、数据获取管理类,对单个行执行查询操作。
  • result、结果类,存储get或者scan操作后获取表的单行值。
  • scan、限定查找类,对多个行执行查询操作。
  • resultscanner、获取scan值的接口类。

java客户端程序

  • 建立连接,在分布式环境下,客户端访问 hbase 需要通过 zookeeper 的地址和端口来获取当前活跃的 master 和所需的 regionserver 地址。在hbase3.0+中,可以直接使用master地址。
configuration cf = hbaseconfiguration.create();
//默认也是2181
// configuration.set("hbase.zookeeper.property.clientport", "2181");
cf.set("hbase.zookeeper.quorum", "10.0.3.71");
// v3.0可只配置master地址。
// cf.set("hbase.master", "10.0.3.71:16000");
connection conn = connectionfactory.createconnection(cf);
//使用完后,需要关闭连接
void close();
  • 表操作,都是使用 admin 接口,必须调用 connection.getadmin() 方法返回一个子对象。
string tablename = "tablename";
tablename tablename = tablename.valueof(tablename);
admin admin = conn.getadmin();
//admin常用的接口如下:
//表是否存在
boolean tableexists(tablename tablename);
//列出所有表
list<tabledescriptor> listtabledescriptors();
//删除表,先禁用表,再删除
void disabletable(tablename tablename);
void deletetable(tablename tablename);
//启用已禁用的表
void enabletable(tablename tablename);
//给表加字段
void addcolumnfamily(tablename tablename, columnfamilydescriptor columnfamily);
//创建表,需要指定列族
string columnname = "cf";
list<columnfamilydescriptor> families = new arraylist<>();
columnfamilydescriptor cfdesc = columnfamilydescriptorbuilder.newbuilder(columnname.getbytes()).build();
families.add(cfdesc);
tabledescriptor tabdesc = tabledescriptorbuilder.newbuilder(tablename).setcolumnfamilies(families).build();
admin.createtable(tabdesc);
admin.getconnection().close();
  • 数据访问,通过table对象连接到hbase进行操作。新增数据如下:
//需要先有table与tablename实例
table table = conn.gettable(tablename);
//一行,参数是rowkey
put put = new put ("rowkeyname".getbytes());
//加字段值:参数分别是列族,列,值
put.add("cfname".getbytes(),"colname".getbytes(),"value001".getbytes());
table.put(put);

获取单行数据如下:

get get = new get("rowkeyname".getbytes());
result result = table.get(get);
//从结果中拿到单元值
for (cell cell : result.rawcells()) {
    //列族名 cell.getfamilyarray()
    //列名 cell.getqualifierarray()
    //值 cell.getvaluearray()
    s
}

限定查找,可指定版本号、起始行号、终止行号、列族、列限定符、返回值的数量的上限等:

scan scan = new scan();
//可以指定scan参数:addcolumn、settimerange、setbatch
resultscanner resutscanner = table.getscanner(scan);
//拿到结果集
for(result result: resutscanner){
    //对结果进行列值提取 result.rawcells()
}

客户端连接时可能的报错

  • nonode for /hbase/master master没有正常启动,将hbase的master节点重启一下。
  • master is initializing master在zookeeper中的数据不正常,删除后,重启一下hbase。hdfs中的文件也要删除一下。