HBase 部署及shell操作
HBase 数据库
- 一、HBase 概述
- 1.1 HBase 是什么
- HBase 的特点
- 二、HBase 模型及架构
- 2.1 HBase 逻辑模型
- 2.2 HBase 数据模型
- 2.3 HBase 物理模型
- 2.3.1 列簇物理模型
- 2.3.2 Rowkey 字段排序
- 2.3.3 Region 存储到不同节点
- 2.3.4 Region 结构
- 2.4 HBase 基本架构
- 三、搭建 HBase 分布式集群
- 3.1 HBase 集群规划
- 3.1.1 主机规划
- 3.1.2 软件规划
- 3.1.3 用户规划
- 3.1.4 数据目录规划
- 3.2 HBase 集群安装配置
- 3.2.1 下载上传解压
- 3.2.2 修改配置文件
- 3.2.2.1 修改hbase-site.xml配置文件
- 3.2.2.2 修改regionservers配置文件
- 3.2.2.3 修改backup-masters配置文件
- 3.2.2.4 修改hbase-env.sh配置文件
- 3.2.3 配置 HBase 环境变量
- 3.2.4 配置文件同步到集群其他节点
- 3.3 启动 HBase 集群服务
- 3.3.1 启动 Zookeeper 集群
- 3.3.2 启动 HDFS 集群
- 3.3.3 启动 HBase 集群
- 3.3.5 HBase Web 界面
- 四、HBase shell 操作
一、HBase 概述
1.1 HBase 是什么
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,利用HBase技术可在廉价的PC Server上搭建大规模结构化存储集群。
HBase是Google BigTable的开源实现,与Google的BigIable利用GFS作为其文件存储系统类似,HBase则利用Hadoop的HDFS作为其文件存储系统。Google运行 MapReduce 来处理Bigtable中的海量数据,而HBase则利用 Hadoop的MapReduce来处理HBase中的海量数据Google Bigtable利用Chubby作为协同服务,而HBase则利用Zookeeper作为协同服务。
HBase 的特点
- 容量巨大:单表可以有百亿行、数百万列。
- 无模式:同一个表的不同行可以有截然不同的列。
- 面向列:HBase是面向列的存储和权限控制,并支持列独立索引。
- 稀疏性:表可以设计得非常稀疏,值为空的列并不占用存储空间。
- 扩展性:HBase底层文件存储依赖HDFS,它天生具备可扩展性。
- 高可靠性:HBase提供了预写日志(WAL)和副本(Replication)机制,防止数据丢失。
- 高性能:底层的LSM(Log-Structured Merge Tree)数据结构和RowKey有序排列等架构上的独特设计,使得HBase具备非常高的写入性能。
二、HBase 模型及架构
2.1 HBase 逻辑模型
2.2 HBase 数据模型
-
表
HBase是一种列式存储的分布式数据库,其核心概念是表(Table)。与传统关系型数据库一样,HBase 的表也是由行和列组成,但 Hase同一列可以存储不同时刻的值,同时多个列可以组成一个列簇(Column Family),这种组织形式主要是出于HBase存取性能的考虑。 -
行键
Rowkey 既是 HBase 表的行键,也是 HBase 表的主键。HBase 表中的记录是按照RowKey的字典顺序进行存储的。在HBase中,为了高效地检索数据,需要设计良好的Rowkey来提高查询性能。因为Rowkey 会被几余存储,所以长度不宜过长,Rowkey 过长将会占用大量的存储空间同时会降低检索效率。其次 Rowkey 应该尽量均匀分布,避免产生热点问题(大量用户访问集中在一个或极少数节点,从而造成单台节点超出自身承受能力)。另外需要保证Rowkey的唯一性。
-
列簇
HBase表中的每个列都归属于某个列簇,一个列簇中的所有列成员有着相同的前缀。比如,列anchor:cnnsi.com和anchor:my.look.ca都是列簇anchor的成员。列簇是表的schema的-部分,必须在使用表之前定义列簇,但列却不是必需的,写数据的时候可以动态加入。一般将经常一起查询的列放在一个列簇中,合理划分列簇将减少查询时加载到缓存的数据,提高查询效率,但也不能有太多的列簇,因为跨列簇访问是非常低效的。 -
单元格
HBase中通过RowKey和Column确定的一个存储单元称为单元格(Ce11)。每个单元格都保存着同一份数据的多个版本,不同时间版本的数据按照时间顺序倒序排序,最新时间的数据排在最前面,时间截是 64 位的整数,可以由客户端在写入数据时赋值,也可以由RegionServer自动赋值。
2.3 HBase 物理模型
2.3.1 列簇物理模型
2.3.2 Rowkey 字段排序
2.3.3 Region 存储到不同节点
一个表包含不同的Region,一个 Region 包含不同列簇,一个列簇包含不同的列
2.3.4 Region 结构
在 Region 中,数据先写在内存 memStore,然后再保存在磁盘文件(HDFS)中;一个 Store 表示一个列簇
2.4 HBase 基本架构
- HMaster:管理表的增删改查、负责负载均衡
- Zookeeper:监听HRegionServer的上下线,HMaster主备切换
- HRegionServer:负载客户端的读写请求、预写日志、管理 HRegion
- HRegion:管理 Store,写入内存,写入磁盘文件
- HFile:内容写入 HDFS
三、搭建 HBase 分布式集群
3.1 HBase 集群规划
HBase底层数据存储在HDFS之上,所以构建HBase集群之前需要确保HDFS集群正常运行。为了确保数据的本地性,HBase集群安装选择跟HDFS集群共享节点。
3.1.1 主机规划
仍然选择hadoop1、hadoop2和hadoop3节点安装部署HBase集群,那么相关角色规划如下:
hadoop1 | hadoop2 | hadoop3 | |
---|---|---|---|
NameNode | 是 | 是 | |
DataNode | 是 | 是 | 是 |
Zookeeper | 是 | 是 | 是 |
Hmaster | 是 | 是 | |
HRegionServer | 是 | 是 | 是 |
3.1.2 软件规划
HBase集群的安装需要考虑与Hadoop版本的兼容性问题,否则HBase可能无法正常运行,其相关软件版本如下:
软件 | 版本 | 位数 | 说明 |
---|---|---|---|
JDK | 1.8 | 64 | 稳定 |
Zookeeper | 3.8.4 | 稳定 | |
hadoop | 2.10.2 | 稳定 | |
HBase | 2.1.0 | 与Hadoop兼容 |
3.1.3 用户规划
HBase集群安装用户保持与Hadoop集群安装用户一致即可,其用户规划如下:
节点 | 用户组 | 用户 |
---|---|---|
hadoop1 | root | root |
hadoop2 | root | root |
hadoop3 | root | root |
3.1.4 数据目录规划
在正式安装HBase之前,需要规划好所有的软件目录和数据存放目录,便于后期的管理与维护。HBase目录规划如下:
目录名称 | 目录路径 |
---|---|
HBase 软件安装目录 | /usr/local |
RegionServer 共享目录 | hdfs://mycluster/hbase |
Zookeeper 数据目录 | /usr/local/data/zookeeper |
3.2 HBase 集群安装配置
3.2.1 下载上传解压
下载地址:https://archive.apache.org/dist/hbase/
上传:
解压:
[root@hadoop1 local]# tar -zxvf hbase-2.1.0-bin.tar.gz
创建软连接:
[root@hadoop1 local]# ln -s hbase-2.1.0 hbase
3.2.2 修改配置文件
进入hadoop1节点的conf目录,修改HBase集群相关配置文件
3.2.2.1 修改hbase-site.xml配置文件
通过修改hbase-site.xml配置文件进行个性化配置,修改内容如下所示
[root@hadoop1 hbase]# vim /usr/local/hbase/conf/hbase-site.xml
添加如下内容(记得把注释去掉,以免不能正常启动
):
<configuration><property><name>hbase.zookeeper.quorum</name><value>hadoop1,hadoop2,hadoop3</value><description>指定Zookeeper集群节点</description></property><property><name>hbase.zookeeper.property.dataDir</name><value>/usr/local/zookeeper/data/zkdata</value><description>指定Zookeeper数据存储目录</description></property><property><name>hbase.zookeeper.property.clientPort</name><value>2181</value><description>指定Zookeeper端口号</description></property><property><name>hbase.rootdir</name><value>hdfs://mycluster/hbase</value><description>指定HBase在HDFS上的根目录</description></property><property><name>hbase.cluster.distributed</name><value>true</value><description>指定true为分布式集群部署</description></property><property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value><description>使用本地文件系统设置为false,使用hdfs设置为true</description></property>
</configuration>
3.2.2.2 修改regionservers配置文件
修改regionservers配置文件添加RegionServer节点角色,修改内容如下:
[root@hadoop1 hbase]# vim /usr/local/hbase/conf/regionservers
添加如下内容(不要添加空格或最后加换行
):
hadoop1
hadoop2
hadoop3
3.2.2.3 修改backup-masters配置文件
修改backup-masters配置文件(可能不存在此文件
)添加备用节点,修改内容如下:
[root@hadoop1 hbase]# vim /usr/local/hbase/conf/backup-masters
添加内容如下:
hadoop2
因为HBase的HMaster角色需要配置高可用,所以这里选择hadoop2为备用节点。
3.2.2.4 修改hbase-env.sh配置文件
修改hbase-env.sh配置文件添加相关环境变量,修改内容如下:
[root@hadoop1 hbase]# vim /usr/local/hbase/conf/hbase-env.sh
修改如下内容(注释部分记得去掉
):
# 配置jdk安装路径
export JAVA_HOME=/usr/local/jdk
# 使用独立的Zookeeper集群
export HBASE_MANAGES_ZK=false
3.2.3 配置 HBase 环境变量
添加HBase环境变量,添加内容如下
[root@hadoop1 hbase]# vim /etc/profile
添加如下内容:
# 添加 HBase 环境变量
HBASE_HOME=/usr/local/hbase
PATH=$HBASE_HOME/bin:$PATH
export HIVE_HOME PATH
更新环境变量
[root@hadoop1 hbase]# source /etc/profile
# 添加 HBase 环境变量
HBASE_HOME=/usr/local/hbase
PATH=$HBASE_HOME/bin:$PATH
export HIVE_HOME PATH
3.2.4 配置文件同步到集群其他节点
将hadoop1节点中配置好的HBase安装目录,分发给hadoop2和hadoop3节点,因为HBase集群配置都是一样的。这里使用工具 deploy.sh 和 runRemoteCmd.sh 命令进行分发(ZooKeeper 集群的详细部署的4.1章节),具体操作如下:
[root@hadoop1 tools]# deploy.sh /usr/local/hbase-2.1.0 /usr/local/ slave
[root@hadoop1 tools]# deploy.sh /etc/profile /etc slave
[root@hadoop1 tools]# runRemoteCmd.sh "ln -s /usr/local/hbase-2.1.0 /usr/local/hbase" slave
3.3 启动 HBase 集群服务
3.3.1 启动 Zookeeper 集群
[root@hadoop1 tools]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh start" all
3.3.2 启动 HDFS 集群
[root@hadoop1 tools]# /usr/local/hadoop/sbin/start-dfs.sh
3.3.3 启动 HBase 集群
[root@hadoop1 tools]# /usr/local/hbase/bin/start-hbase.sh
日志提示报错:
上面提示是缺少 htrace.SamplerBuilder类,如下操作再重新启动
[root@hadoop1 client-facing-thirdparty]# cp /usr/local/hbase/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar /usr/local/hbase/lib/
3.3.5 HBase Web 界面
四、HBase shell 操作
进入 HBbase shell
[root@hadoop1 hbase]# /usr/local/hbase/bin/hbase shell
- 创建 course 表
hbase(main):005:0> create 'course','cf'
- 查看 HBase 所有表
hbase(main):006:0> list
- 查看 course 表结构
hbase(main):008:0> describe 'course'
- 向 course 表插入数据
put 'course','001','cf:cname','hbase'
put 'course','001','cf:score','95'
put 'course','002','cf:cname','sqoop'
put 'course','002','cf:score','85'
put 'course','003','cf:cname','flume'
put 'course','003','cf:score','98'
- 查询 course 表中的所有数据
hbase(main):015:0> scan 'course'
- 根据行键查询 course 表
- 查询整条记录
hbase(main):023:0> get 'course','001'
- 查询一个列簇数据
hbase(main):025:0> get 'course','001','cf'
- 查询列簇中其中的一个列
hbase(main):026:0> get 'course','001','cf:cname'
- 更新 course 表数据
hbase(main):027:0> put 'course','001','cf:score','99'
hbase(main):028:0> get 'course','001','cf:score'
- 查询 course 表总记录
hbase(main):029:0> count 'course'
- 删除 course 表数据
- 删除列簇中的一列
hbase(main):031:0> delete 'course','003','cf:score'
hbase(main):034:0> scan 'course'
- 删除整行记录
hbase(main):033:0> deleteall 'course','002'
hbase(main):034:0> scan 'course'
- 清空 course 表
hbase(main):035:0> truncate 'course'
hbase(main):036:0> scan 'course'
- 删除 course 表
hbase(main):037:0> disable 'course'
hbase(main):038:0> drop 'course'
- 查看表是否存在
hbase(main):040:0> exists 'course'
相关文章:

HBase 部署及shell操作
HBase 数据库 一、HBase 概述1.1 HBase 是什么HBase 的特点 二、HBase 模型及架构2.1 HBase 逻辑模型2.2 HBase 数据模型2.3 HBase 物理模型2.3.1 列簇物理模型2.3.2 Rowkey 字段排序2.3.3 Region 存储到不同节点2.3.4 Region 结构 2.4 HBase 基本架构 三、搭建 HBase 分布式集…...
使用Fign进行客户端远程调用和SpringFormEncoder的使用
1、引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 2、启动类加上注解 EnableFeignClients SpringBootApplication public class FeignTe…...
golang 数据库使用注意事项
1.在使用 fmt.Sprintf 构建 SQL 插入语句时,参数包含特殊符号(如引号 、分号 ;、反斜杠 \ 等),可能会导致 SQL 注入或插入失败的问题。为了解决这个问题,推荐使用占位符(如 $1, $2, 等)和参数化…...

Leetcode面试经典150题-221.最大正方形
解法都在代码里,不懂就留言或者私信 class Solution {/**本题一看就是典型的动态规划,要找以每个点为右下角的正方形的面积,然后取最大的这个题要注意找规律,我找到的规律如下:1.以第一行为右下角的,因为正…...
51单片机-DS1302,操作简述
DS1302的命令字(Command Byte)是由控制DS1302芯片的主机(通常是单片机,如51单片机)来生成和发送的。DS1302是一款实时时钟(RTC)芯片,它通过串行通讯接口与单片机进行数据交换。 DS1…...
Vue3+Vite+Echarts 出现Missing semicolon错误
使用的echarts代码如下: import * as echarts from echarts;type EChartsOption echarts.EChartsOption;var chartDom document.getElementById(main)!; var myChart echarts.init(chartDom); var option: EChartsOption;option {series: [{type: gauge,center: [50%, 6…...
iOS——frame和bounds的区别
把frame理解为占用区域,把bounds理解为边界。View在旋转过程中,其实自己的坐标系统并没有发生改变,bounds中的origin只能通过setBounds方法修改。 frame 定义了视图在其父视图坐标系统中的位置和大小。其坐标系是相对于俯视图的坐标系。 bou…...

Trm理论 3(注意力机制)
注意力机制(attention) 在使用LSTM,CNN等模型的时候,很难决定对于一个信息什么是重要的,什么是不重要的。因此注意力机制就是为了优化这一问题 怎么做注意力机制 注意力机制包含,查询对象(Q&…...
Vue2和Vue3项目创建的区别和 element ui 和element plus的导入方式
文章目录 创建项目Vue2Vue3 Vue2项目机构Vue 2 Element UI VUE3项目结构Vue 3 Element Plus 创建项目 Vue2 Vue CLI 3 及之前版本: 使用 vue-cli 创建项目: npm install -g vue/cli vue create my-project-vue2 cd my-project-vue2Vue3 Vue CLI 4…...
基于STM32的猫狗宠物喂养系统设计(微信小程序)(215)
文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】选题背景【6】国内外技术发展现状【7】研究的目…...

spark读取csv文件
测试spark读取本地和hdfs文件 from pyspark.sql import SparkSessionspark SparkSession.builder \.appName("Example PySpark Script") \.getOrCreate()# 读取本地csv文件 df spark.read.csv("/Users/xiaokkk/Desktop/local_projects/spark/intents.csv&quo…...

钢铁百科:Q420DR力学性能、Q420DR执行标准、Q420DR低温容器钢板
Q420DR钢板是一种专为低温压力容器设计的优质钢材,其材质特性、执行标准、化学成分、力学性能、交货状态、应用范围以及常用规格等方面都具有显著的特点。 一、Q420DR钢板材质 Q420DR钢板的命名方式体现了其材质特性。其中,“Q”代表屈服强度ÿ…...

三菱机器人手柄维修示教器维修手操器面板等
机器人手柄维修(示教器维修)故障现象包括:黑屏、指示灯无任何显示, 上电蓝屏、白屏,通电几分钟后屏幕变为蓝屏,主板故障,通讯时有时无, 触摸失灵,有时白屏,触…...
中间件的学习理解总结
目录 一、定义与作用 二、主要类型 数据库中间件 远程过程调用中间件 面向消息的中间件 事务处理中间件 三、特点与优势 独立性 高效性 可扩展性 可靠性 四、应用场景 企业应用集成 分布式系统 电子商务 移动应用开发 五、数据库中间件 功能细节:…...
编程秘密武器:提升工作效率的关键工具
在编程的世界里,选择合适的工具可以极大地提升工作效率。无论是智能的代码编辑器、强大的版本控制工具,还是自动化脚本,这些“秘密武器”都能帮助开发者在繁忙的工作环境中事半功倍。本文将探讨一些能显著提升工作效率的编程工具,…...

Git+word记笔记
程序员记笔记主要同步很重要,我这个方法只支持个人笔记,如果团队还是用企业微信开个企业会员比较方便。为什么用word,因为可以镶嵌代码和文档,不仅仅是文字,兼容性强 语雀,云笔记这些对于上传的word都是有…...
java-antrl手敲命令的hello world
java-antrl手敲命令的hello world 环境步骤1. 下载ANTLR的jar包2. 新建一个g4文件3. 生成语法对应的java文件4. 编译语法对应的java文件5. 测试语法5.1 打印测试信息5.2 查看语法分析树 6. 注意事项6.1 每一个antlr4版本的jar包都对应java的相应版本,要对应。6.2 [1…...

法规探讨 | 《医疗器械管理法(草案征求意见稿)》初探(1)
昨日,国家药监局综合司正式公开征求《中华人民共和国医疗器械管理法(草案征求意见稿)》的意见,标志着我国医疗器械管理领域即将进入新的发展阶段。相较于现行的《医疗器械监督管理条例》,《医疗器械法》不仅沿袭了《条…...

大语言模型的上下文窗口(Context Windows):对人工智能应用的影响
大语言模型(LLMs)极大地提升了人工智能在理解和生成类人文本方面的能力。其中一个影响其效用的基本方面是它们的 “上下文窗口”—— 这个概念直接影响着这些模型接收和生成语言的有效性。我将深入探讨上下文窗口是什么、它们对人工智能应用的影响以及组…...
Java【数组】
数组是一组类型相同的数据(基本类型或引用类型)的集合,数组中每个数据称为元素。数组也是Java的对象,一旦创建,数组长度就固定了。 创建数组 1.声明一个数组类型的引用变量(数组变量)ÿ…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...