Java 访问Hbase数据库

article/2025/10/11 5:44:39

须知

Hbase数据最终是在hdfs上的,具体来说应该是在hdfs上一个叫做/hbase的目录下。具体结构如下:


所以java访问Hbase其实就是访问hdfs,所以环境搭建跟hadoop开发环境使用没什么不同。

实战部分

1.导入需要的jar包,此处在java项目引入Hbase解压后lib目录下所有jar包即可。里面提供了访问Hbase的api接口,也有与hadoop集成的客户端jar包。

2.将hbase-site.xml拷贝到classpath根目录下,这样,hbase在创建configuration对象会自动加载,hbase源码此部分:

 public static Configuration addHbaseResources(Configuration conf){conf.addResource("hbase-default.xml");conf.addResource("hbase-site.xml");checkDefaultsVersion(conf);checkForClusterFreeMemoryLimit(conf);return conf;}

hbase-site.xml,注意里面主机名要跟core-site.xml一致,另外还需要在hosts文件加一行主机名和hbase服务器ip地址的映射。(windows下面的hosts文件在:C:\Windows\System32\drivers\etc)

具体文件hbase-site.xml参照内容如下:

<configuration>
<property><name>hbase.rootdir</name><value>hdfs://chidianwei-VirtualBox:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>chidianwei-VirtualBox</value></property><property><name>dfs.replication</name><value>1</value></property>
</configuration>

3.下面我们就可以写一个初始化表测试类,创建了两张表,word和stat。(其中的HbaseUtil类代码见最后一步)代码如下:

public class InitData {public static void main(String[] args) throws IOException {//创建一个word表,只有一个列族contentHBaseUtil.createTable("word","content");//获取word表HTable htable = HBaseUtil.getHTable("word");htable.setAutoFlush(false);//创建测试数据List<Put> puts = new ArrayList<Put>();Put put1 = HBaseUtil.getPut("1","content",null,"The Apache Hadoop software library is a framework");Put put2 = HBaseUtil.getPut("2","content",null,"The common utilities that support the other Hadoop modules");Put put3 = HBaseUtil.getPut("3","content",null,"Hadoop by reading the documentation");Put put4 = HBaseUtil.getPut("4","content",null,"Hadoop from the release page");Put put5 = HBaseUtil.getPut("5","content",null,"Hadoop on the mailing list");puts.add(put1);puts.add(put2);puts.add(put3);puts.add(put4);puts.add(put5);//提交测试数据htable.put(puts);htable.flushCommits();htable.close();//创建stat表,只有一个列祖resultHBaseUtil.createTable("stat","result");}
}

4.hbase工具类,里面涉及到java对hbase数据库创建表,删除表,常见的crud操作等等。具体参照代码:

package com.oracle.hbase.weifenbushi;import java.io.IOException;
import java.util.Arrays;import org.apache.hadoop.conf.Configuration;
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.ZooKeeperConnectionException;
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.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;public class HBaseUtil {/*** 初始化HBase的配置文件* @return*/public static Configuration getConfiguration(){Configuration conf = HBaseConfiguration.create();//和hbase-site.xml中配置的一致conf.set("hbase.zooker.quorum", "192.168.10.127");
//        conf.set("hbase.zooker.quorum", "oraclehadoop1");return conf;}/*** 实例化HBaseAdmin,HBaseAdmin用于对表的元素据进行操作* @return* @throws MasterNotRunningException* @throws ZooKeeperConnectionException*/public static HBaseAdmin getHBaseAdmin() throws MasterNotRunningException, ZooKeeperConnectionException{HBaseAdmin a=null;try {a= new HBaseAdmin(getConfiguration());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return a;}/*** 创建表* @param tableName            表名* @param columnFamilies    列族* @throws IOException*/public static void createTable(String tableName,String...columnFamilies) throws IOException {HTableDescriptor htd = new HTableDescriptor(tableName.getBytes());//for(String fc : columnFamilies) {htd.addFamily(new HColumnDescriptor(fc));}getHBaseAdmin().createTable(htd);}/*** 获取HTableDescriptor* @param tableName* @return* @throws IOException*/public static HTableDescriptor getHTableDescriptor(byte[] tableName) throws IOException{return getHBaseAdmin().getTableDescriptor(tableName); }/*** 获取表* @param tableName 表名* @return* @throws IOException*/public static HTable getHTable(String tableName) throws IOException{return new HTable(getConfiguration(),tableName);}/*** 获取Put,Put是插入一行数据的封装格式* @param tableName* @param row* @param columnFamily* @param qualifier* @param value* @return* @throws IOException*/public static Put getPut(String row,String columnFamily,String qualifier,String value) throws IOException{Put put = new Put(row.getBytes());if(qualifier==null||"".equals(qualifier)) {put.add(columnFamily.getBytes(), null, value.getBytes());}else {put.add(columnFamily.getBytes(), qualifier.getBytes(), value.getBytes());}return put;}/*** 查询某一行的数据* @param tableName    表名* @param row        行键* @return* @throws IOException*/public static Result getResult(String tableName,String row) throws IOException {Get get = new Get(row.getBytes());HTable htable  = getHTable(tableName);Result result = htable.get(get);htable.close();return result;}/*** 条件查询* @param tableName        表名* @param columnFamily    列族* @param queryCondition    查询条件值* @param begin                查询的起始行* @param end                查询的终止行* @return* @throws IOException*/public static ResultScanner getResultScanner(String tableName,String columnFamily,String queryCondition,String begin,String end) throws IOException{Scan scan = new Scan();//设置起始行scan.setStartRow(Bytes.toBytes(begin));//设置终止行scan.setStopRow(Bytes.toBytes(end));//指定要查询的列族scan.addColumn(Bytes.toBytes(columnFamily),null);//查询列族中值等于queryCondition的记录Filter filter1 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),null,CompareOp.EQUAL,Bytes.toBytes(queryCondition));//Filter filter2 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),null,CompareOp.EQUAL,Bytes.toBytes("chuliuxiang"));FilterList filterList = new FilterList(Operator.MUST_PASS_ONE,Arrays.asList(filter1));scan.setFilter(filterList);HTable htable  = getHTable(tableName);ResultScanner rs = htable.getScanner(scan);htable.close();return rs;}public static void main(String[] args) {try {Result result = getResult("word", "1");System.out.println(new String(result.list().get(0).getValue()));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

总结:

以上就是java对hbase伪分布式的访问,对集群的访问也是一样,api是不会变的,变化的是配置文件,对应的quorum是zookeeper集群,配置变为: conf.set("hbase.zookeeper.quorum", "weekend05:2181,weekend06:2181,weekend07:2181");

ok,希望对大家会有帮助。



http://chatgpt.dhexx.cn/article/9O6xWufY.shtml

相关文章

大数据之HBase数据库

一、了解HBase 1.1 HBase简介 HBase是Apache的Hadoop项目的子项目 HBase不同于一般的关系数据库&#xff0c;它是一个适合于非结构化数据存储的数据库 建立在Hadoop文件系统之上的分布式面向列的数据库 属于开源项目&#xff0c;可以进行横向扩展 适用于需要实时地随机访问…

pinpoint的Hbase数据库的数据优化

pinpoint的Hbase数据库的数据优化 写的原因&#xff1a; 因为是测试服务器&#xff0c;在运行测试项目时&#xff0c;需要日志的打印输出&#xff0c;由于发现磁盘空间不足&#xff0c;想删除些东西&#xff0c;释放空间&#xff0c;然后发现pinpoint服务的Hbase数据库占据了1…

2.使用HBase数据库操作_实验环境Ubuntu

实验前期准备 ssh localhost //检测自己的ssh服务器设置 cd /usr/local/hadoop ./sbin/start-dfs.sh //启动Hadoop jps //查看hadoop是否启动成功 cd /usr/local/hbase bin/start-hbase.sh //启动hbase jps //查看hadoop是否启动成功 bin/hbase shell //打开hbase的…

猿如意工具Redis数据库,Memcached数据库,MongoDB数据库,HBase数据库等等

按照参考样例&#xff1a; 安装教程 在电脑上安装好猿如意之后。因为第一次使用就搜了下各种数据库使用的方式 猿如意工具 Redis数据库Memcached数据库MongoDB数据库HBase数据库MySQL WorkbenchDBeaverNavicat Lite Redis数据库 点击搜索了下Redis数据库&#xff0c;可看到以…

hbase数据库详解

本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理存储、HBase系统架构&#xff0c;HBase调优、HBase Shell访问等。 不过在此之前&#xff0c;你可以先了解 Hadoop生态系统 &#xff0c;若想运行HBase&#xff0c;则需要先搭建…

Java连接HBASE数据库

HBASE是建立在Hadoop分布式系统基础之上的列模式数据库&#xff0c;Java连接HBASE需要如下几个jar包&#xff1a;hadoop-common、hadoop-mapreduce-client-core、hbase-common、hbase-client。这些jar包在maven仓库里都有&#xff0c;地址&#xff1a;https://mvnrepository.co…

Hbase数据库

第一关&#xff1a;Hbase数据库的安装 任务描述 本关任务&#xff1a;安装与配置HBase数据库。 相关知识 在安装HBase之前你需要先安装Hadoop和Zookeeper&#xff0c;如果你还没有安装可以通过这两个实训来学习&#xff1a;Hadoop安装与配置&#xff0c;Zookeeper安装与配置…

Hbase

Hbase 简介hadoop的局限HBase与NoSQLHBase的数据模型HBase的逻辑架构HBase物理存储结构数据模型Hbase基本结构&#xff08;不完整版&#xff09; 简介 hadoop的局限 hadoop主要实现批量数据的处理&#xff0c;并且通过顺序方式访问数据 要查找数据必须搜索整个数据库&#xf…

HBase介绍

第1章 HBase简介 1.1 HBase定义 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。 1.2 HBase数据模型 逻辑上&#xff0c;HBase的数据模型同关系型数据库很类似&#xff0c;数据存储在一张表中&#xff0c;有行有列。但从HBase的底层物理存储结构&#xff08;K…

hbase数据库介绍,HBASE的特点,表结构逻辑视图,Row Key,列族,时间戳,Cell

HBASE数据库 1. Hbase基础 1.1 hbase数据库介绍 1、简介nosql hbase是bigtable的开源java版本。是建立在hdfs之上&#xff0c;提供高可靠性、高性能、列存储、可伸缩、实时读写nosql的数据库系 统。 它介于nosql和RDBMS之间&#xff0c;仅能通过主键(row key)和主键的ran…

大数据工具——HBASE数据库(一)

一、HBASE基础概念 1.HBASE概念 HBASE是一个数据库----可以提供数据的实时随机读写。HBASE与mysql、oralce、db2、sqlserver等关系型数据库不同&#xff0c;它是一个NoSQL数据库&#xff08;非关系型数据库&#xff09; 2.HBase特性 - HBase的表模型与关系型数据库的表模型…

HBase详细总结

1 HBase 浅析 1.1 HBase 是啥 HBase 是一款面向列存储&#xff0c;用于存储处理海量数据的 NoSQL 数据库。它的理论原型是Google 的 BigTable 论文。你可以认为 HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。 HBase 的存储是基于HDFS的&#xff0c;HDFS 有…

HBase详细概述

本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理存储、HBase系统架构&#xff0c;HBase调优、HBase Shell访问等。 不过在此之前&#xff0c;你可以先了解 Hadoop生态系统 &#xff0c;若想运行HBase&#xff0c;则需要先搭建…

JPG,PNG,BMP图片无损压缩软件

怎么压缩图片文件的大小呢&#xff1f;现在的科技发展迅速&#xff0c;手机或者摄像机拍摄的图片的像素很高&#xff0c;这样也就导致了图片比较大&#xff0c;我们想要将图片上传作为网站的头像或者其他网站平台都会对图片文件大小进行限制&#xff0c;今天教给大家一种压缩图…

深入前端图片压缩

前言 任何研究都不是凭空产生&#xff0c;至少博主是这样的。 在手机端拍照后图片很大&#xff0c;有的甚至有 10M 多。这个时候再去上传图片&#xff0c;可想而知&#xff0c;速度是很慢的。正因如此&#xff0c;便有了前端图片压缩这个需求。 图片格式 传统的图片格式有 gi…

html图片无损压缩,有损压缩和无损压缩的区别是什么

区别:无损压缩是可以完全还原的;而有损压缩还原后不能和原来文件一样,是有一定损耗的。有损压缩两种的基本机制(有损变换编解码和预测编解码);而无损压缩原理有行程编码、霍夫曼编码和算术编码等。 本教程操作环境:windows10系统、thinkpad t480电脑。 有损压缩是利用了人…

6种比较好的“在线图片无损压缩工具”+PDF转换工具

目录 第一&#xff1a;Tinypng 第二&#xff1a;Compressor.io 第三&#xff1a;Kraken.io 第四&#xff1a;Giftofspeed 第五&#xff1a; OptimiZilla 第六&#xff1a;Imagerecycle 第七&#xff1a;&#xff08;PDF转换工具&#xff09;ToePub 第一&#xff1a;Tiny…

Android图片无损压缩库ImageCompress使用(最新优化OOM问题的1.0.10版本)

转载请注明出处&#xff1a;https://blog.csdn.net/hh7181521/article/details/81014839 图片压缩一直是Android的一个痛点&#xff0c;相比较于iOS的效果&#xff0c;Android的压缩简直可以用惨不忍睹来形容&#xff01; 开源库ImageCompress是基于libjpeg-turbo来进行图片的压…

无损压缩技术

一个视频经过有损压缩完成后&#xff0c;会再进行无损压缩&#xff0c;让视频进一步变小。 DCT 变化 DCT 变化的过程又叫量化&#xff0c;经过有损压缩后&#xff0c;数据分散在二维图标中的各个节点上&#xff0c;经过 DCT 变化&#xff0c;会将所有数据集中到某一块。 转换…

使用Tuimgs在线工具对图片无损压缩教程

正文: 图片体积压缩是很多设计师都不陌生的事情&#xff0c;在多数情况下&#xff0c;即使你并不是一位设计师&#xff0c;但是你也可能需要使用到图片压缩&#xff0c;就例如:我们需要存储一张图片到手机的时候&#xff0c;但是这张图片的体积实在是太大了&#xff0c;会占用…