HBase 部署及shell操作

news2024/9/20 16:35:24

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集群,那么相关角色规划如下:

hadoop1hadoop2hadoop3
NameNode
DataNode
Zookeeper
Hmaster
HRegionServer

3.1.2 软件规划

HBase集群的安装需要考虑与Hadoop版本的兼容性问题,否则HBase可能无法正常运行,其相关软件版本如下:

软件版本位数说明
JDK1.864稳定
Zookeeper3.8.4稳定
hadoop2.10.2稳定
HBase2.1.0与Hadoop兼容

3.1.3 用户规划

HBase集群安装用户保持与Hadoop集群安装用户一致即可,其用户规划如下:

节点用户组用户
hadoop1rootroot
hadoop2rootroot
hadoop3rootroot

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'

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】线程结束

目录 线程安全和重入 死锁 STL中的容器不是线程安全的 线程安全的单例模式 自旋锁 读者写者问题 线程安全和重入 线程安全&#xff1a;多个线程并发执行同一段代码时&#xff0c;不会出现不同的&#xff08;异常的&#xff09;结果&#xff0c;我们就说线程是安全的。常见…

如何学好文件操作,快来看这篇文章(沉淀中)!!!!

文章目录 1. 为什么使用文件&#xff1f;2. 什么是文件&#xff1f;2.1 程序文件2.2 数据文件2.3 文件名 3. ⼆进制文件和文本文件&#xff1f;4. 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开和关闭 5. ⽂件的顺序读写5.1 顺序读写函数介绍…

jQuery库

注明&#xff1a;本文参考自&#xff1a;jQuery - 白月黑羽 (byhy.net) jQuery安装 Download jQuery | jQuery下载到本地 ps: script标签中的src属性&#xff1a;表示包含要执行的代码的外部文件位置 <!DOCTYPE html> <html lang"en"><head><s…

unity游戏开放:标记物体 一目了然

Unity游戏开发:标记物体,让开发变得一目了然 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发:标记物体,让开发变得一目了然前言1. 什么是Tag&#xff1f;2. Unity中如何添加和管理Tag步骤1&am…

vue如何引入element-ui

2.x用element-ui 3.x用element-plus https://blog.csdn.net/weixin_41207479/article/details/127066333 引入element-ui的三种方式

点餐API接口对接的过程中需要注意哪些问题

以下是点餐 API 接口对接的一般步骤&#xff1a; 选择合适的点餐 API 服务提供商&#xff1a;市面上有不少提供点餐 API 的平台。你需要根据自身业务需求、预算、接口的稳定性和性能、技术支持等因素来综合考量选择。注册与申请&#xff1a;在选定 API 服务提供商后&#xff0…

数据响应式

响应式原理 课堂主题 1.利用defineProperty实现数据劫持2.利用ES6中proxy实现数据劫持3.实现数据驱动视图更新&#xff0c;实现数据响应4.发布订阅模式 知识点 defineProperty&#xff1b;Proxy代理数据劫持发布订阅观察者模式与发布订阅数据响应式 defineProperty Objec…

Junit单元测试入门

目录 一、单元测试 1.1 基本概念 1.2 以往测试存在的问题和不足 二、快速入门 2.1 基本步骤 2.2 基本使用示例&#xff08;vscode为例&#xff09; 2.2 断言机制&#xff08;重要&#xff09; 2.3 其它注解 一、单元测试 1.1 基本概念 针对最小单元的测试&#xff0c…

集成电路学习:什么是CPU中央处理器

一、CPU&#xff1a;中央处理器 CPU&#xff0c;全称Central Processing Unit&#xff0c;即中央处理器&#xff0c;是计算机系统的核心部件&#xff0c;负责执行程序指令&#xff0c;完成数据的算术运算或逻辑运算等任务。它是计算机中最重要的硬件之一&#xff0c;相当于计算…

【Qt 事件】—— 详解Qt事件处理

目录 &#xff08;一&#xff09;事件介绍 &#xff08;二&#xff09;事件的处理 &#xff08;三&#xff09;按键事件 3.1 单个按键 3.2 组合按键 &#xff08;四&#xff09;鼠标事件 4.1 鼠标单击事件 4.2 鼠标释放事件 4.3 鼠标双击事件 4.4 鼠标移动事件 4.5…

【Redis】Redis 典型应⽤ - 缓存 (cache)

Redis 典型应⽤ - 缓存 cache 什么是缓存使⽤ Redis 作为缓存缓存的更新策略1) 定期⽣成2) 实时⽣成 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿关于缓存预热 (Cache preheating)关于缓存穿透 (Cache penetration)关于缓存雪崩 (Cache avalanche)关于缓存击穿 (Cache breakdown…

OpenLayers3, 航线动画实现

文章目录 一、前言二、代码实现三、总结 一、前言 本文基于OpenLayers3&#xff0c;实现航线动画的功能。 二、代码实现 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo…

题解AtCoder ABC 358 F Easiest Maze

一道模拟题。 思路 最短的路线是直接竖着走下来&#xff0c;经过 n n n 个格子&#xff0c;所以 k k k 最小是 n n n。如果想要延长路线&#xff0c;可以采用九转大肠的形状&#xff0c;就像这样&#xff1a; 可以发现&#xff0c;每次向左走之后都必须走回来&#xff0c;…

关于几道计算机网络题的解答

2017年12月28日&#xff0c;星期四&#xff0c; 照片上的第一题中多项式的指数看不清&#xff0c;但没关系&#xff0c;就现在的情形&#xff0c;说一下大概的思路&#xff0c;参考着再结合题目中实际的参数&#xff0c;再套一遍就能把题目解出来了&#xff0c; 假设&#xf…

JS 如何判断是否是IE浏览器

例子 if(!!window.ActiveXObject || "ActiveXObject" in window){alert("抱歉&#xff0c;不支持IE浏览器&#xff01;");return; }

kafka使用

异步发送数据 package com.shf.kafka.producer; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.serializa…

算法基础-双指针算法

最长连续不重复子序列 双指针[j, i]维护的是以a[i]结尾的最长连续不重复子序列[j, i - 1]是前一步得到的最长连续不重复子序列&#xff0c;所以如果[j, i]中有重复元素&#xff0c;一定是a[i]&#xff0c;所以[j, i - 1]中一定有一个数字与a[i]重复&#xff0c;因此右移j直到a[…

【AI学习笔记】AIGC,AI绘画 ComfyUI+ComfyUI Manager安装

【AI学习笔记】ComfyUIComfyUI Manager安装 最近在面向BOSS直聘学习ComfyUI的使用&#xff0c;但是不出意外&#xff0c;因为学习者们迥异的电脑配置以及杂乱的AI软件工具包互相纠缠&#xff0c;跟人工智能相关的环境安装多少都会遇到点教程预料不到的BUG。 推荐入门教程&…

基于SpringBoot的智能医院管理系统

&#x1f4a5;&#x1f4a5;源码和论文下载&#x1f4a5;&#x1f4a5;&#xff1a;基于SpringBoot的智能医院管理系统-源码论文报告数据库文件.rar 1. 系统介绍 随着计算机科学的迅猛发展和互联网技术的不断推进&#xff0c;人们的生活方式发生了巨大的变化&#xff0c;同时也…

华为云征文 | Tomcat保姆级安装教程

简介 华为云Flexus云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是华为云Flexus云服务的一个产品。 Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力云服务器&#xff0c;可智能感知业务负载&#…