HBase详解(1)
HBase
简介
概述
-
HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database),因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL),而是提供了一套单独的命令和API操作
-
关系型数据库和非关系型数据库针对的数据是不同的
-
关系型数据库存储的数据都是结构化数据,即同一个表中所有的数据的结构都是完全相同的,所以此时可以采用SQL(Structed Query Language,结构化查询语言)来进行查询
-
非关系型数据库不只是可以存储结构化数据,还可以存储半结构化数据(数据本身可以拆分成基本组成单位,但是拆分完成之后,每条数据的结构不一定相同)甚至可以存储非结构化数据(数据本身没有结构)
-
-
HBase本身是仿照了Google的<The Big Table>来实现的,因此HBase和Big Table的原理几乎一致,只是Big Table使用的是C语言实现的,HBase使用的是Java
-
HBase支持对大量的数据进行随机且实时的读写,就意味着支持对数据进行修改
-
HBase基于集群的硬件可以管理非常大的表:billions of rows X millions of columns
-
到目前为止,HBase一共提供了4个版本:HBase0.X~HBase3.X
-
其中HBase0.X和HBase1.X已经停止更新,所以市面上也几乎不再使用
-
HBase2.x版本目前一直处在更新维护状态,所以市面上使用的比较多
-
HBase3.x还处在测试状态,不推荐于生产环境使用
-
-
HBase是使用Java语言实现的,还基于HDFS来完成数据的存储,所以在选择HBase的时候,必须考虑和JDK以及Hadoop版本的兼容性!
-
HBase和JDK版本的兼容性

-
HBase和Hadoop版本的兼容性

-
安装
-
环境:JDK8,Hadoop3.2.3+,Zookeeper
-
进入预安装目录
cd /opt/presoftware/ # 上传或者下载HBase的安装包
-
解压
tar -xvf hbase-2.5.5-bin.tar.gz -C /opt/software/
-
进入HBase的配置目录
cd /opt/software/hbase-2.5.5/conf/
-
编辑文件
vim hbase-env.sh # 在文件中添加 export JAVA_HOME=/opt/software/jdk1.8 export HBASE_MANAGES_ZK=false # 保存退出,生效 source hbase-env.sh
-
编辑文件
vim hbase-site.xml
在文件中添加
<!-- 开启HBase的分布式 --><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value></property><!-- 指定HBase在HDFS上的存储位置 --><property><name>hbase.rootdir</name><value>hdfs://hadoop01:9000/hbase</value></property><!-- 指定Zookeeper的连接地址 --><property><name>hbase.zookeeper.quorum</name><value>hadoop01,hadoop02,hadoop03</value></property><!-- 指定WAL存放方式 --><property><name>hbase.wal.provider</name><value>filesystem</value></property>
-
指定子节点
vim regionservers
在文件中添加三台主机的主机名
# 删除掉原来的localhost,添加自己的主机名 hadoop01 hadoop02 hadoop03
-
将Hadoop的核心配置文件拷贝到HBase的配置目录下
cp $HADOOP_HOME/etc/hadoop/core-site.xml ./
-
远程分发
cd /opt/software/ scp -r hbase-2.5.5/ root@hadoop02:$PWD scp -r hbase-2.5.5/ root@hadoop03:$PWD
-
配置环境变量
# 编辑文件 vim /etc/profile.d/hbasehome.sh # 在文件中添加 export HBASE_HOME=/opt/software/hbase-2.5.5 export PATH=$PATH:$HBASE_HOME/bin # 保存退出,生效 source /etc/profile.d/hbasehome.sh
-
远程分发环境变量
scp /etc/profile.d/hbasehome.sh root@hadoop02:/etc/profile.d/ scp /etc/profile.d/hbasehome.sh root@hadoop03:/etc/profile.d/
-
分发完成之后,另外两个节点进行source
[root@hadoop02 ~]# source /etc/profile.d/hbasehome.sh [root@hadoop03 ~]# source /etc/profile.d/hbasehome.sh
-
测试
hbase version
-
三个节点上启动zookeeper
# 启动zookeeper zkServer.sh start # 查看zookeeper状态 zkServer.sh status
-
启动HDFS
start-dfs.sh
-
启动HBase
start-hbase.sh
-
通过
jps命令查看,在第一个节点上应该出现HMaster,三个节点上都应该出现HRegioServer -
HBase同样提供了对外访问的端口:http://主机名或者IP:16010
基本操作
基本概念
-
RowKey:行键
-
在HBase中,没有主键的概念,取而代之的是Rowkey
-
不同于关系型数据库,在HBase中,建表的时候不需要指定行键,而是在添加数据的时候手动指定行键
-
行键是表示数据是同一行的唯一标记
-
-
Column Family:列族/列簇
-
在HBase中,没有表关联的概念,取而代之的是列族
-
一个表中可以包含1到多个列族,每一个列族中可以包含0到多个列
-
在HBase中,建表的时候,需要指定列族,且列族指定之后不可变,但是不关心列,列是可以动态增删的
-
-
VERSION:版本
-
时间戳被称之为数据的版本
-
在HBase中,如果不指定,默认会存储数据的一个版本,也只会给用户返回一个版本
-
如果需要获取多个版本的数据,那么在建表的时候需要指定这个表中每一个列族能够存储数据的版本数,以及获取数据的时候需要指定获取版本的数量
-
-
Cell:单元(格)。在HBase中,如果需要锁定唯一的一条数据,需要通过行键+列族名+列名+版本号/时间戳来锁定,这个结构称之为Cell
-
namespace:名称空间
-
在HBase中,没有database的说法,取而代之的是namespace
-
Hase启动的时候,自带了两个名称空间:
hbase和default。hbase空间下放的是HBase的元数据信息,所以hbase不要动!在建表的时候,如果不指定,表是放在default空间下
-
-
DML和DDL
-
DDL(Data Defined Language):数据定义语言,用于定义数据的结构的,例如
create,drop等 -
DML(Data Manipulation Language):数据操纵语言,用于操作表中的数据的,例如
put,get等
-
注意问题
-
在HBase中,所有的数据默认要么是数字,要么是字符串,如果是字符串,必须使用单引号引起来
-
HBase适合于存储结构化和半结构化数据,或者也支持非结构化数据 - HBase中的数据的结构是稀疏的
-
HBase中的表需要先禁用才能被删除
-
HBase本身作为数据库,提供了完整的增删改查的功能。HBase是将数据存储到HDFS上,但是HDFS的特点之一是简化的一致性模型(允许一次写入多次读取不允许修改,但是允许追加写入)。那么HBase是如何实现数据的"修改"的?HBase的修改功能,并没有违反HDFS的特点,而是在文件尾部追加写入,并且HBase默认会给每一条数据添加一个时间戳。当用户试图获取数据的时候,此时HBase默认会返回时间戳最大的一条数据给用户,那么从用户角度而言,就感觉数据被修改了
基本命令
-
进入HBase的命令行
hbase shell
-
建表。建立person表,表中包含了3个列族:basic,info,extend
create 'person', {NAME => 'basic'}, {NAME => 'info'}, {NAME => 'extend'} # 如果建表的时候不需要修改其他属性,那么可以简化 create 'person', 'basic', 'info', 'extend' -
在添加数据的时候,指定这个数据对应的行键和列。put命令既可以添加数据也可以修改数据
put 'person', 'p1', 'basic:name', 'Bob' put 'person', 'p1', 'basic:age', 18 put 'person', 'p1', 'info:height', 179.9 put 'person', 'p2', 'basic:name', 'Amy' put 'person', 'p2', 'basic:gender', 'female' put 'person', 'p2', 'info:weight', 59.8
-
扫描整表
scan 'person'
-
禁用表
disable 'person'
-
删除表
drop 'person'
-
添加数据
append 'person', 'p1', 'basic:name', 'tom'
-
查询数据
# get命令不能直接对整表进行查询,在使用的时候,必须指定表名和行键 # 获取person表中p1行键对应的数据 get 'person', 'p1' # 获取person表中p1行键对应的basic列族的数据 get 'person', 'p1', {COLUMNS => 'basic'} get 'person', 'p1', 'basic' # 获取指定行键指定列的数据 get 'person', 'p1', {COLUMNS => 'basic:name'} get 'person', 'p1', 'basic:name' get 'person', 'p1', {COLUMNS => ['basic:name', 'info:height']} get 'person', 'p1', 'basic:name', 'info:heignt' -
获取指定列族的数据
scan 'person', {COLUMNS => 'basic'} -
获取指定列的数据
scan 'person', {COLUMNS => 'basic:name'} scan 'person', {COLUMNS => ['basic:name', 'info:height']} -
删除数据
# 删除指定行键指定列的数据 - 不能删除一个列族的数据,也不能删除一行数据 delete 'person', 'p2', 'basic:name' deleteall 'person', 'p2', 'basic:name' # 删除一行数据 deleteall 'person', 'p1'
-
建表,指定版本数量
# basic列族中的数据保留三个版本,info列族中的数据保留四个版本,extend列族中的数据保留1个版本 create 'person', {NAME => 'basic', VERSIONS => 3}, {NAME => 'info', VERSIONS => 4}, {NAME => 'extend'} -
获取数据
get 'person', 'ab', {COLUMN => 'basic:age', VERSIONS => 3} # 获取指定时间范围内的数据 get 'person', 'ab', {COLUMN => 'basic:age', TIMERANGE=>[0, 10000000000000]} get 'person', 'ab', {COLUMN => 'basic:age', TIMESTAMP => 100000000} -
查看所有的表
list
-
描述表
desc 'person' # 或者 describe 'person'
-
查看所有的名称空间
list_namespace
-
创建名称空间
create_namespace 'demo'
-
在demo空间下新建users表
create 'demo:users', 'basic' # 添加数据 put 'demo:users', 'u1', 'basic:name', 'hack'
-
查看demo空间下的表
list_namespace_tables 'demo'
-
删除空间
# 要求空间为空(不包含任何表) drop_namespace 'demo'
-
查看在运行的任务列表
processlist
-
查看HBase集群的状态
status
-
查看HBase的版本
version
-
查看当前用户
whoami
-
描述名称空间
describe_namespace 'demo'
-
修改名称空间的信息
# METHOD属性表示要执行set还是unset操作 alter_namespace 'demo', {METHOD => 'set', 'create_date' => '2024-04-02' } -
统计表中的行键个数
count 'person'
-
获取表的HRegion的个数
get_splits 'person'
-
摧毁重建表
truncate 'person'
-
修改表中列族的属性
alter 'person', { NAME => 'basic', VERSIONS => 5 } -
启用表
enable 'person'
-
判断表是否存在
exists 'orders'
-
判断表是启用还是禁用
# 判断表是否禁用 is_disabled 'person' # 判断表是否启用 is_enabled 'person'
-
定义行键所在的HRegion的位置
locate_region 'person', 'p1'
-
查看所有的过滤器
show_filters
相关文章:
HBase详解(1)
HBase 简介 概述 HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database),因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL),而是提供了一套单独的命令和API操…...
深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度
看这篇前请先把我上一篇了解一下:深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 前言: 相信很多学习数据结构的人,都会遇到一种情况,就是明明最一开始学习就学习了时间复杂度,但是在后期…...
视频汇聚/安防监控/EasyCVR平台播放器EasyPlayer更新:新增【性能面板】
视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构,可以在复杂的网络环境中快速、灵活部署,平台视频能力丰富,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…...
【教程】Flutter 应用混淆
在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…...
STM32中C编程引入C++程序
C具备类的创建思想很实用于实际场景多相似性的框架搭建;同种类型或相似类型的C的优势明显因此进行相互嵌套使用 需要在C中使用C类的话,你可以通过C的“extern "C"”语法来实现。这允许你在C代码中使用C的链接方式,而在C代码中使用…...
MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新
在 MySQL 8.0.12 中,我们引入了一种新的 DDL 算法,该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列,这是来自腾讯游戏的贡献。 然后在 MySQL 8.0.29 中,我们添加了在表中任意位置添加(或删除&…...
多态--下
文章目录 概念多态如何实现的指向谁调谁?例子分析 含有虚函数类的大小是多少?虚函数地址虚表地址多继承的子类的大小怎么计算?练习题虚函数和虚继承 概念 优先使用组合、而不是继承; 继承会破坏父类的封装、因为子类也可以调用到父类的函数;…...
备考ICA----Istio实验16---HTTP流量授权
备考ICA----Istio实验16—HTTP流量授权 1. 环境准备 kubectl apply -f istio/samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f istio/samples/bookinfo/networking/bookinfo-gateway.yaml访问测试 curl -I http://192.168.126.220/productpage2. 开启mtls …...
STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)
文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式,生成代码四、MDK打开生成项目,编写HAL库的GPIO输出代码五、运行仿真程序,调试代码 一、功能需求分析 在完成开发环境搭建之后,开始使用STM32GP…...
华为审核被拒提示: 您的应用存在(最近任务列表隐藏风险活动)的行为,不符合华为应用市场审核标准
应用审核意见: 您的应用存在(最近任务列表隐藏风险活动)的行为,不符合华为应用市场审核标准。 修改建议:请参考测试结果进行修改。 请参考《审核指南》第2.19相关审核要求:https://developer.huawei.com/c…...
数论与线性代数——整除分块【数论分块】的【运用】【思考】【讲解】【证明(作者自己证的QWQ)】
文章目录 整除分块的思考与运用整除分块的时间复杂度证明 & 分块数量整除分块的公式 & 公式证明公式证明 代码code↓ 整除分块的思考与运用 整除分块是为了解决一个整数求和问题 题目的问题为: ∑ i 1 n ⌊ n i ⌋ \sum_{i1}^{n} \left \lfloor \frac{n}{…...
Linux系统下安装jdk与tomcat【linux】
一、yum介绍 linux下的jdk安装以及环境配置,有两种常用方法: 1.使用yum一键安装。 2.手动安装,在Oracle官网下载好需要的jdk版本,上传解压并配置环境。 这里介绍第一种方法,在此之前简单了解下yum。 yum 介绍 yum&…...
matlab实现决策树可视化——信息增益、C4.5、基尼指数
代码:https://download.csdn.net/download/boyas/89074326...
如何使用Python进行网络编程和套接字通信?
如何使用Python进行网络编程和套接字通信? Python作为一种通用编程语言,具有强大的网络编程能力。它提供了丰富的库和工具,使得开发者可以轻松地实现网络编程和套接字通信。下面将详细介绍如何使用Python进行网络编程和套接字通信。 一、网…...
nodeJs 实现视频的转换(超详细教程)
前段时间拿到一个视频是4k的,没法播放,于是通过 node.js 和 ffmpeg 实现了视频的转换。在win10 系统下实现。 所需工具 node 16.19 直接安装 ffmpeg-5.1.1-essentials_build 解压后重名 ffmpeg 放到C盘 然后配置下环境变量 Git-2.42.0.2-64-bit 直接…...
Transformer - model architecture
Transformer - model architecture flyfish Transformer总体架构可分为四个部分: 输⼊部分 输出部分 编码器部分 解码器部分 输入部分 输出部分 输⼊部分包含: 源嵌⼊层和位置编码 ⽬标嵌⼊层和位置编码 输出部分包含: 线性层 softmax处理器 左侧编码器部分和右侧解码器部…...
Zookeeper学习一
初识 Zookeeper Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务(B树)。 Zookeeper 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小 猪)的管理员。简称zk …...
SAR教程系列7——在cadence中用Spectrum工具FFT仿真ADC的ENOB、SNR等动态性能指标
首先在仿真之前,你得有一个ADC。然后是思考如何仿真的问题,如何加激励,如何使用相关工具查看仿真结果。假定你有一个可以仿真的ADC,大致经过下列步骤可以得到ADC的相关动态性能指标。 第一步:在ADC后面接一个理想的DA…...
攻防世界:mfw[WriteUP]
根据题目提示考虑是git库泄露 这里在地址栏后加.git也可以验证是git库泄露 使用GitHack工具对git库进行恢复重建 在templates目录下存在flag.php文件,但里面并没有flag 有内容的只有主目录下的index.php index.php源码: <?phpif (isset($_GET[page…...
mysq性能优化-my.cnf配置文件参数调整
MySQL 优化配置文件(my.cnf 或 my.ini)是调整 MySQL 服务器性能的重要手段之一。以下是一些常见的场景,可以通过调整配置文件参数值来优化 MySQL: 1. **提高并发处理能力**: - innodb_buffer_pool_size:增…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
