Hbase

Hbase是一种NoSql模式的数据库,采用了列式存储。而采用了列存储天然具备以下优势:

  1. 可只查涉及的列,且列可作为索引,相对高效
  2. 针对某一列的聚合及其方便
  3. 同一列的数据类型一致,方便压缩

同时由于列式存储将不同列分开存储,也造成了读取多列效率不高的问题

LSM Tree

说到HBase,我们不得不说其采用的LSM Tree。我们都知道关系数据库中常用的B+Tree,叶子节点有序,但写入时可能存在大量随机写入,因此形成了其读快写慢的特点。

而HBase采用了LSM Tree,在读写之间寻找了平衡,损失了部分读取的性能,实现了快速的写入。LSM具体实现如下:

  1. 写入WAL日志中(防止数据丢失),同时数据写入内存中,内存中构建一个有顺序的树,HBase采用跳表结构。
  2. 随着内存中数据逐渐增大,内存中flush到磁盘,形成一个个小树。
  3. 磁盘中的小树存在数据冗余,且查询时遍历多个小树效率低,LSM定期合并,实现数据合并,而合并的时候,会对数据重新排序,优化读取性能。

HBase架构

HBase中三个核心的Server形成其分布式存储架构。

  1. RegionServer:负责客户端读写请求,客户端直接与其通信
  2. HBaseMaser:负责维护RegionServer;表结构的维护
  3. Zookeeper:维护集群状态

HBase读写操作步骤

  1. 客户端从zookeeper获取哪台RegionServer存储MetaTable(一张特殊表,存储了所有region信息)。
  2. 客户端查询MetaTable所在的RegionServer,获取哪台RegionServer应负责此次操作的rowKey
  3. 客户端访问对应的RegionServer实现数据读取

RegionServer的组成

  1. WAL:Write Ahead Log,用于存储写操作的日志,用于故障恢复
  2. BlockCache:读缓存,用于缓存最常访问数据
  3. MemStore:写缓存,会定期flush到磁盘
  4. HFile:在HDFS上存储数据,以有序keyvalue形式存储

HBase存储机制

  1. 表是行的集合。
  2. 行是列家族的集合。
  3. 列家族是列的集合。
  4. 列是键值对的集合。

HBase安装

1.下载Hbase2.4.11

https://hbase.apache.org/downloads.html

2.解压

tar -zxvf hbase-2.4.11-bin.tar.gz

3.修改环境变量

cat conf/hbase-env.sh
export JAVA_HOME=/usr/local/java18/jdk1.8.0_331/

4.修改hbase存储位置

cat conf/hbase-site.xml
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>

5.启动Hbase

./bin/start-hbase.sh 

6.验证Hbase

http://192.168.43.50:16010/master-status

7.停止Hbase

./bin/stop-hbase.sh

HBase Shell访问HBase

官方文档:https://hbase.apache.org/book.html#shell

1.进入shell

./bin/hbase shell

2.查看表

hbase:001:0> list

3.创建表

#create ‘<table name>’,’<column family>’

hbase:001:0> create 'emp', 'personal data', 'professional data'
Created table emp
Took 3.4810 seconds
=> Hbase::Table - emp

4.创建/更新数据

#put ‘table name’,’row ’,'Column family:column name',’new value’

hbase:001:0> put 'emp','1','personal data:name','raju'
Took 1.1807 seconds

5.查看数据

hbase:001:0> scan 'emp'
ROW COLUMN+CELL
1 column=personal data:name, timestamp=2022-05-02T09:55:38.861, value=raju
1 row(s)
Took 1.1758 seconds
#get ’<table name>’,’row1’

hbase:002:0>  get 'emp', '1'
COLUMN CELL
personal data:name timestamp=2022-05-02T09:55:38.861, value=raju
1 row(s)
Took 1.3090 seconds

6.删除数据

#delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’

hbase:001:0> deleteall 'emp','1'
Took 0.9424 seconds

C#访问Hbase

C#访问Hbase可以根据thrift文件自己生成响应rpc client代码,通过rpc方式访问。

https://github.com/apache/hbase/tree/master/hbase-thrift/src/main/resources/org/apache/hadoop/hbase

也可以启动rest server通过微软的Microsoft.Hbase.Client访问,我们这次使用rest方式访问。

1.启动与关闭rest server

./bin/hbase-daemon.sh start rest
./bin/hbase-daemon.sh stop rest

可通过访问http://192.168.43.50:8080/version/cluster验证rest是否启动成功

2.新增console项目,引入Microsoft.Hbase.Client包

https://github.com/hdinsight/hbase-sdk-for-net

3.编写测试demo

using Microsoft.HBase.Client;
using Microsoft.HBase.Client.LoadBalancing;
using org.apache.hadoop.hbase.rest.protobuf.generated; var scanOptions = RequestOptions.GetDefaultOptions();
scanOptions.Port = 8080;
scanOptions.AlternativeEndpoint = "/";
var nodeIPs = new List<string>();
nodeIPs.Add("192.168.43.50");
var client = new HBaseClient(null, scanOptions, new LoadBalancerRoundRobin(nodeIPs));
var version = client.GetVersionAsync().Result;
Console.WriteLine(version); var testTableSchema = new TableSchema();
testTableSchema.name = "mytablename";
testTableSchema.columns.Add(new ColumnSchema() { name = "d" });
testTableSchema.columns.Add(new ColumnSchema() { name = "f" });
client.CreateTableAsync(testTableSchema).Wait();

通过hbase shell验证表是mytablename否创建成功

hbase:001:0> list
TABLE
emp
mytablename

Hadoop(四)C#操作Hbase的更多相关文章

  1. 吴裕雄--天生自然HADOOP操作实验学习笔记:使用hive操作hbase

    实验目的 熟悉hive和hbase的操作 熟悉hadoop.hbase.hive.zookeeper的关系 熟练大数据环境的搭建 学会分析日志排除问题 实验原理 1.hive整合hbase原理 前面大 ...

  2. 大数据入门第十四天——Hbase详解(三)hbase基本原理与MR操作Hbase

    一.基本原理 1.hbase的位置 上图描述了Hadoop 2.0生态系统中的各层结构.其中HBase位于结构化存储层,HDFS为HBase提供了高可靠性的底层存储支持, MapReduce为HBas ...

  3. 使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法:

     使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法: 1.错误详情: Excepti ...

  4. 基于jython操作hbase

    一.前言 关于jython介绍,直接上官网www.jython.org,可以得到详细资料,这里只介绍一下jython操作hbase的一些方法,本质上和用java操作hbase差不多,只不过语法换成了p ...

  5. Spark操作hbase

    于Spark它是一个计算框架,于Spark环境,不仅支持单个文件操作,HDFS档,同时也可以使用Spark对Hbase操作. 从企业的数据源HBase取出.这涉及阅读hbase数据,在本文中尽快为了尽 ...

  6. Hadoop集群(三) Hbase搭建

    前面已经完成Zookeeper和HDFS的安装,本文会详细介绍Hbase的安装步骤.以及安装过程中遇到问题的汇总. 系列文章:   Hadoop集群(一) Zookeeper搭建 Hadoop集群(二 ...

  7. HBase(六)HBase整合Hive,数据的备份与MR操作HBase

    一.数据的备份与恢复 1. 备份 停止 HBase 服务后,使用 distcp 命令运行 MapReduce 任务进行备份,将数据备份到另一个地方,可以是同一个集群,也可以是专用的备份集群. 即,把数 ...

  8. java操作Hbase实例

    所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.u ...

  9. Java 操作 HBase 教程

    Java 操作 HBase 教程 一.简介 二.hbase-client 引入 三.连接操作 四.表操作 五.运行测试 相关博文原文地址: 博客园:美码师:HBase(2) Java 操作 HBase ...

  10. phoenix操作HBase

    phoenix操作HBase 一.Phoenix简介 Phoenix,由saleforce.com 开源的一个项目,后又捐给了Apache. 它相当于一个Java 中间件,帮助开发者,像使用jdbc ...

随机推荐

  1. 学习GlusterFS(九)

    环境说明: 3台机器安装 GlusterFS 组成一个集群. 使用 docker volume plugin GlusterFS 服务器: 10.6.0.140 10.6.0.192 10.6.0.1 ...

  2. 前后端分离项目部署到Linux虚拟机

    最近做了一个springboot+vue的前后端分离项目,把它部署到Linux虚拟机上.下面是我的步骤和遇到的问题,需要的朋友可以看下(看的时候注意要全部看完到底部,因为我习惯是把我遇到的问题放到最后 ...

  3. ACM - 动态规划 - UVA437 The Tower of Babylon

    UVA437 The Tower of Babylon 题解 初始时给了 \(n\) 种长方体方块,每种有无限个,对于每一个方块,我们可以选择一面作为底.然后用这些方块尽可能高地堆叠成一个塔,要求只有 ...

  4. DASCTF Oct吉林工师web

    迷路的魔法少女 进入环境给出源码 <?php highlight_file('index.php'); extract($_GET); error_reporting(0); function ...

  5. PID算法原理 一图看懂PID的三个参数

    找了好久这一篇算是很容易看懂的了  推荐给大家   写的十分清楚   原文作者DF创客社区virtualwiz LZ以前有个小小的理想,就是让手边的MCU自己"思考"起来,写出真正 ...

  6. JavaScript实现科学计算器

    运行效果: 可实现科学计算器的功能,如:PI,sin,cos,tan等 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> ...

  7. 通过uniCloud白捡一个在线图库管理工具,可支持图床外链

    喜欢写文章的技术大佬们,应该都有一个自己的在线图片管理工具吧. 尤其是在写markdown时,为了让我们的文章"图文并茂",显得不那么枯燥,就经常需要在合适的地方插入一些关联性的图 ...

  8. 在 M1 Mac 上开发 .NET MAUI (iOS)

    在 M1 Mac 上开始使用 .NET MAUI 开发 (iOS) 的最简单方法. .NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动 ...

  9. 蓝桥杯 贪吃蛇长度java实现

    小明在爷爷的私人收藏馆里找到一台老式电脑.居然没有图形界面,只能用控制台编程. 如上图,是游戏时画面截图. 其中,H表示蛇头,T表示蛇尾.#表示蛇的身体,@表示身体交叉重叠的地方. 你能说出现在的贪吃 ...

  10. findmnt、lsblk、mount 命令查看磁盘、目录挂载、挂载点以及文件系统格式等情况

    findmnt 展示出了目标挂载点( TARGET ).源设备( SOURCE ).文件系统类型( FSTYPE )以及相关的挂载选项( OPTIONS ),例如文件系统是否是可读可写或者只读的.根( ...