当前位置: 首页 > news >正文

HBase详解(1)

HBase

简介

概述

  1. HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database),因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL),而是提供了一套单独的命令和API操作

  2. 关系型数据库和非关系型数据库针对的数据是不同的

    1. 关系型数据库存储的数据都是结构化数据,即同一个表中所有的数据的结构都是完全相同的,所以此时可以采用SQL(Structed Query Language,结构化查询语言)来进行查询

    2. 非关系型数据库不只是可以存储结构化数据,还可以存储半结构化数据(数据本身可以拆分成基本组成单位,但是拆分完成之后,每条数据的结构不一定相同)甚至可以存储非结构化数据(数据本身没有结构)

  3. HBase本身是仿照了Google的<The Big Table>来实现的,因此HBase和Big Table的原理几乎一致,只是Big Table使用的是C语言实现的,HBase使用的是Java

  4. HBase支持对大量的数据进行随机且实时的读写,就意味着支持对数据进行修改

  5. HBase基于集群的硬件可以管理非常大的表:billions of rows X millions of columns

  6. 到目前为止,HBase一共提供了4个版本:HBase0.X~HBase3.X

    1. 其中HBase0.X和HBase1.X已经停止更新,所以市面上也几乎不再使用

    2. HBase2.x版本目前一直处在更新维护状态,所以市面上使用的比较多

    3. HBase3.x还处在测试状态,不推荐于生产环境使用

  7. HBase是使用Java语言实现的,还基于HDFS来完成数据的存储,所以在选择HBase的时候,必须考虑和JDK以及Hadoop版本的兼容性!

    1. HBase和JDK版本的兼容性

    2. HBase和Hadoop版本的兼容性

安装

  1. 环境:JDK8,Hadoop3.2.3+,Zookeeper

  2. 进入预安装目录

    cd /opt/presoftware/
    # 上传或者下载HBase的安装包
  3. 解压

    tar -xvf hbase-2.5.5-bin.tar.gz -C /opt/software/
  4. 进入HBase的配置目录

    cd /opt/software/hbase-2.5.5/conf/
  5. 编辑文件

    vim hbase-env.sh
    # 在文件中添加
    export JAVA_HOME=/opt/software/jdk1.8
    export HBASE_MANAGES_ZK=false
    # 保存退出,生效
    source hbase-env.sh
  6. 编辑文件

    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>
  7. 指定子节点

    vim regionservers

    在文件中添加三台主机的主机名

    # 删除掉原来的localhost,添加自己的主机名
    hadoop01
    hadoop02
    hadoop03
  8. 将Hadoop的核心配置文件拷贝到HBase的配置目录下

    cp $HADOOP_HOME/etc/hadoop/core-site.xml ./
  9. 远程分发

    cd /opt/software/
    scp -r hbase-2.5.5/ root@hadoop02:$PWD
    scp -r hbase-2.5.5/ root@hadoop03:$PWD
  10. 配置环境变量

    # 编辑文件
    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
  11. 远程分发环境变量

    scp /etc/profile.d/hbasehome.sh root@hadoop02:/etc/profile.d/
    scp /etc/profile.d/hbasehome.sh root@hadoop03:/etc/profile.d/
  12. 分发完成之后,另外两个节点进行source

    [root@hadoop02 ~]# source /etc/profile.d/hbasehome.sh
    [root@hadoop03 ~]# source /etc/profile.d/hbasehome.sh
  13. 测试

    hbase version
  14. 三个节点上启动zookeeper

    # 启动zookeeper
    zkServer.sh start
    # 查看zookeeper状态
    zkServer.sh status
  15. 启动HDFS

    start-dfs.sh
  16. 启动HBase

    start-hbase.sh
  17. 通过jps命令查看,在第一个节点上应该出现HMaster,三个节点上都应该出现HRegioServer

  18. HBase同样提供了对外访问的端口:http://主机名或者IP:16010

基本操作

基本概念

  1. RowKey:行键

    1. 在HBase中,没有主键的概念,取而代之的是Rowkey

    2. 不同于关系型数据库,在HBase中,建表的时候不需要指定行键,而是在添加数据的时候手动指定行键

    3. 行键是表示数据是同一行的唯一标记

  2. Column Family:列族/列簇

    1. 在HBase中,没有表关联的概念,取而代之的是列族

    2. 一个表中可以包含1到多个列族,每一个列族中可以包含0到多个列

    3. 在HBase中,建表的时候,需要指定列族,且列族指定之后不可变,但是不关心列,列是可以动态增删的

  3. VERSION:版本

    1. 时间戳被称之为数据的版本

    2. 在HBase中,如果不指定,默认会存储数据的一个版本,也只会给用户返回一个版本

    3. 如果需要获取多个版本的数据,那么在建表的时候需要指定这个表中每一个列族能够存储数据的版本数,以及获取数据的时候需要指定获取版本的数量

  4. Cell:单元(格)。在HBase中,如果需要锁定唯一的一条数据,需要通过行键+列族名+列名+版本号/时间戳来锁定,这个结构称之为Cell

  5. namespace:名称空间

    1. 在HBase中,没有database的说法,取而代之的是namespace

    2. Hase启动的时候,自带了两个名称空间:hbasedefaulthbase空间下放的是HBase的元数据信息,所以hbase不要动!在建表的时候,如果不指定,表是放在default空间下

  6. DML和DDL

    1. DDL(Data Defined Language):数据定义语言,用于定义数据的结构的,例如createdrop

    2. DML(Data Manipulation Language):数据操纵语言,用于操作表中的数据的,例如putget

注意问题

  1. 在HBase中,所有的数据默认要么是数字,要么是字符串,如果是字符串,必须使用单引号引起来

  2. HBase适合于存储结构化和半结构化数据,或者也支持非结构化数据 - HBase中的数据的结构是稀疏

  3. HBase中的表需要先禁用才能被删除

  4. HBase本身作为数据库,提供了完整的增删改查的功能。HBase是将数据存储到HDFS上,但是HDFS的特点之一是简化的一致性模型(允许一次写入多次读取不允许修改,但是允许追加写入)。那么HBase是如何实现数据的"修改"的?HBase的修改功能,并没有违反HDFS的特点,而是在文件尾部追加写入,并且HBase默认会给每一条数据添加一个时间戳。当用户试图获取数据的时候,此时HBase默认会返回时间戳最大的一条数据给用户,那么从用户角度而言,就感觉数据被修改了

基本命令

  1. 进入HBase的命令行

    hbase shell
  2. 建表。建立person表,表中包含了3个列族:basic,info,extend

    create 'person', {NAME => 'basic'}, {NAME => 'info'}, {NAME => 'extend'}
    # 如果建表的时候不需要修改其他属性,那么可以简化
    create 'person', 'basic', 'info', 'extend'
  3. 在添加数据的时候,指定这个数据对应的行键和列。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
  4. 扫描整表

    scan 'person'
  5. 禁用表

    disable 'person'
  6. 删除表

    drop 'person'
  7. 添加数据

    append 'person', 'p1', 'basic:name', 'tom'
  8. 查询数据

    # 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'
  9. 获取指定列族的数据

    scan 'person', {COLUMNS => 'basic'}
  10. 获取指定列的数据

    scan 'person', {COLUMNS => 'basic:name'}
    scan 'person', {COLUMNS => ['basic:name', 'info:height']}
  11. 删除数据

    # 删除指定行键指定列的数据 - 不能删除一个列族的数据,也不能删除一行数据
    delete 'person', 'p2', 'basic:name'
    deleteall 'person', 'p2', 'basic:name'
    # 删除一行数据
    deleteall 'person', 'p1'
  12. 建表,指定版本数量

    # basic列族中的数据保留三个版本,info列族中的数据保留四个版本,extend列族中的数据保留1个版本
    create 'person', {NAME => 'basic', VERSIONS => 3}, {NAME => 'info', VERSIONS => 4}, {NAME => 'extend'}
  13. 获取数据

    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}
  14. 查看所有的表

    list
  15. 描述表

    desc 'person'
    # 或者
    describe 'person'
  16. 查看所有的名称空间

    list_namespace
  17. 创建名称空间

    create_namespace 'demo'
  18. 在demo空间下新建users表

    create 'demo:users', 'basic'
    # 添加数据
    put 'demo:users', 'u1', 'basic:name', 'hack'
  19. 查看demo空间下的表

    list_namespace_tables 'demo'
  20. 删除空间

    # 要求空间为空(不包含任何表)
    drop_namespace 'demo'
  21. 查看在运行的任务列表

    processlist
  22. 查看HBase集群的状态

    status
  23. 查看HBase的版本

    version
  24. 查看当前用户

    whoami
  25. 描述名称空间

    describe_namespace 'demo'
  26. 修改名称空间的信息

    # METHOD属性表示要执行set还是unset操作
    alter_namespace 'demo', {METHOD => 'set', 'create_date' => '2024-04-02' }
  27. 统计表中的行键个数

    count 'person'
  28. 获取表的HRegion的个数

    get_splits 'person'
  29. 摧毁重建表

    truncate 'person'
  30. 修改表中列族的属性

    alter 'person', { NAME => 'basic', VERSIONS => 5 }
  31. 启用表

    enable 'person'
  32. 判断表是否存在

    exists 'orders'
  33. 判断表是启用还是禁用

    # 判断表是否禁用
    is_disabled 'person'
    # 判断表是否启用
    is_enabled 'person'
  34. 定义行键所在的HRegion的位置

    locate_region 'person', 'p1'
  35. 查看所有的过滤器

    show_filters

相关文章:

HBase详解(1)

HBase 简介 概述 HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database)&#xff0c;因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL)&#xff0c;而是提供了一套单独的命令和API操…...

深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度

看这篇前请先把我上一篇了解一下&#xff1a;深入理解数据结构第一弹——二叉树&#xff08;1&#xff09;——堆-CSDN博客 前言&#xff1a; 相信很多学习数据结构的人&#xff0c;都会遇到一种情况&#xff0c;就是明明最一开始学习就学习了时间复杂度&#xff0c;但是在后期…...

视频汇聚/安防监控/EasyCVR平台播放器EasyPlayer更新:新增【性能面板】

视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构&#xff0c;可以在复杂的网络环境中快速、灵活部署&#xff0c;平台视频能力丰富&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…...

【教程】Flutter 应用混淆

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…...

STM32中C编程引入C++程序

C具备类的创建思想很实用于实际场景多相似性的框架搭建&#xff1b;同种类型或相似类型的C的优势明显因此进行相互嵌套使用 需要在C中使用C类的话&#xff0c;你可以通过C的“extern "C"”语法来实现。这允许你在C代码中使用C的链接方式&#xff0c;而在C代码中使用…...

MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新

在 MySQL 8.0.12 中&#xff0c;我们引入了一种新的 DDL 算法&#xff0c;该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列&#xff0c;这是来自腾讯游戏的贡献。 然后在 MySQL 8.0.29 中&#xff0c;我们添加了在表中任意位置添加&#xff08;或删除&…...

多态--下

文章目录 概念多态如何实现的指向谁调谁&#xff1f;例子分析 含有虚函数类的大小是多少&#xff1f;虚函数地址虚表地址多继承的子类的大小怎么计算&#xff1f;练习题虚函数和虚继承 概念 优先使用组合、而不是继承; 继承会破坏父类的封装、因为子类也可以调用到父类的函数;…...

备考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 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的GPIO输出代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 在完成开发环境搭建之后&#xff0c;开始使用STM32GP…...

华为审核被拒提示: 您的应用存在(最近任务列表隐藏风险活动)的行为,不符合华为应用市场审核标准

应用审核意见&#xff1a; 您的应用存在&#xff08;最近任务列表隐藏风险活动&#xff09;的行为&#xff0c;不符合华为应用市场审核标准。 修改建议&#xff1a;请参考测试结果进行修改。 请参考《审核指南》第2.19相关审核要求&#xff1a;https://developer.huawei.com/c…...

数论与线性代数——整除分块【数论分块】的【运用】【思考】【讲解】【证明(作者自己证的QWQ)】

文章目录 整除分块的思考与运用整除分块的时间复杂度证明 & 分块数量整除分块的公式 & 公式证明公式证明 代码code↓ 整除分块的思考与运用 整除分块是为了解决一个整数求和问题 题目的问题为&#xff1a; ∑ i 1 n ⌊ n i ⌋ \sum_{i1}^{n} \left \lfloor \frac{n}{…...

Linux系统下安装jdk与tomcat【linux】

一、yum介绍 linux下的jdk安装以及环境配置&#xff0c;有两种常用方法&#xff1a; 1.使用yum一键安装。 2.手动安装&#xff0c;在Oracle官网下载好需要的jdk版本&#xff0c;上传解压并配置环境。 这里介绍第一种方法&#xff0c;在此之前简单了解下yum。 yum 介绍 yum&…...

matlab实现决策树可视化——信息增益、C4.5、基尼指数

代码&#xff1a;https://download.csdn.net/download/boyas/89074326...

如何使用Python进行网络编程和套接字通信?

如何使用Python进行网络编程和套接字通信&#xff1f; Python作为一种通用编程语言&#xff0c;具有强大的网络编程能力。它提供了丰富的库和工具&#xff0c;使得开发者可以轻松地实现网络编程和套接字通信。下面将详细介绍如何使用Python进行网络编程和套接字通信。 一、网…...

nodeJs 实现视频的转换(超详细教程)

前段时间拿到一个视频是4k的&#xff0c;没法播放&#xff0c;于是通过 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 项目下的一个子项目&#xff0c;是一个树形目录服务&#xff08;B树&#xff09;。 Zookeeper 翻译过来就是 动物园管理员&#xff0c;他是用来管 Hadoop&#xff08;大象&#xff09;、Hive(蜜蜂)、Pig(小 猪)的管理员。简称zk …...

SAR教程系列7——在cadence中用Spectrum工具FFT仿真ADC的ENOB、SNR等动态性能指标

首先在仿真之前&#xff0c;你得有一个ADC。然后是思考如何仿真的问题&#xff0c;如何加激励&#xff0c;如何使用相关工具查看仿真结果。假定你有一个可以仿真的ADC&#xff0c;大致经过下列步骤可以得到ADC的相关动态性能指标。 第一步&#xff1a;在ADC后面接一个理想的DA…...

攻防世界:mfw[WriteUP]

根据题目提示考虑是git库泄露 这里在地址栏后加.git也可以验证是git库泄露 使用GitHack工具对git库进行恢复重建 在templates目录下存在flag.php文件&#xff0c;但里面并没有flag 有内容的只有主目录下的index.php index.php源码&#xff1a; <?phpif (isset($_GET[page…...

mysq性能优化-my.cnf配置文件参数调整

MySQL 优化配置文件&#xff08;my.cnf 或 my.ini&#xff09;是调整 MySQL 服务器性能的重要手段之一。以下是一些常见的场景&#xff0c;可以通过调整配置文件参数值来优化 MySQL&#xff1a; 1. **提高并发处理能力**&#xff1a; - innodb_buffer_pool_size&#xff1a;增…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...