HBase详解(1)

news2024/11/24 6:37:46

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

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

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

相关文章

基于tensorflow和kereas的孪生网络推理图片相似性

一、环境搭建 基础环境&#xff1a;cuda 11.2 python3.8.13 linux ubuntu18.04 pip install tensorflow-gpu2.11.0 验证&#xff1a;# 查看tensorflow版本 import tensorflow as tf tf.__version__ # 是否能够成功启动GPU from tensorflow.python.client import device_lib pr…

【HTML】制作一个简单的动态SVG图形

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段HTML和CSS代码&#xff0c;该代码用于创建一个动态的SVG图形&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建两个文本文档&#xff0c;其中HTML的文…

数据可视化看板大屏-全屏组件#记录

记录一下&#xff0c;最近工作中经常大屏项目&#xff0c;现记录一下封装的看板大屏全屏组件。 一、以下是大屏全屏组件代码 <template><div :class"{full-box:true,active-full:isFull,quit-full:!isFull}" :style"${isActiveFull? position: fi…

Linux:冯·诺依曼结构 OS管理机制

Linux&#xff1a;冯诺依曼结构 & OS管理机制 冯诺依曼结构OS管理机制OS对下层硬件的管理OS对上层用户的服务 冯诺依曼结构 我们常见的计算机&#xff0c;比如笔记本&#xff0c;台式电脑。以及一下不常见的计算机&#xff0c;比如服务器&#xff0c;几乎都遵循冯诺依曼体…

Three.js阴影贴图

生成阴影贴图的步骤如下&#xff1a; 从光位置视点&#xff08;阴影相机&#xff09;创建深度图。从相机的角度进行屏幕渲染在每个像素点&#xff0c;将阴影相机的MVP矩阵计算出的深度值与深度图值进行比较如果深度图值较低&#xff0c;则说明该像素点存在阴影 &#xff0c;因…

杰理芯片AC79——物联网远程点亮/关闭LED灯

杰理芯片的封装简直太香了&#xff08;比STM32香多了&#xff09;&#xff0c;SDK也封装得很好&#xff0c;对于我这种手残党简直不要太友好。赶紧学起来&#xff0c;快速实现你想要的功能吧&#xff01; 芯片选型 杰理AC79 资料文档 环境搭建以及点亮第一盏灯请访问&#x…

http: server gave HTTP response to HTTPS client 分析一下这个问题如何解决中文告诉我详细的解决方案

这个错误信息表明 Docker 客户端在尝试通过 HTTPS 协议连接到 Docker 仓库时&#xff0c;但是服务器却返回了一个 HTTP 响应。这通常意味着 Docker 仓库没有正确配置为使用 HTTPS&#xff0c;或者客户端没有正确配置以信任仓库的 SSL 证书。以下是几种可能的解决方案&#xff1…

VSCode好用插件

由于现在还是使用vue2&#xff0c;所以本文只记录vue2开发中好用的插件。 美化类插件不介绍了&#xff0c;那些貌似对生产力起不到什么大的帮助&#xff0c;纯粹的“唯心主义”罢了&#xff0c;但是如果你有兴趣的话可以查看上一篇博客&#xff1a;VSCode美化 1. vuter 简介&…

Apache Paimon实时数据糊介绍

Apache Paimon 是一种湖格式,可以使用 Flink 和 Spark 构建实时 数据糊 架构,用于流式和批处理操作。Paimon 创新地将湖格式和 LSM(日志结构合并树)结构相结合,将实时流式更新引入湖架构中。 Paimon 提供以下核心功能: 实时更新: 主键表支持大规模更新的写入,具有非常…

day02-SpringCloud02(Nacos、Feign、Gateway)

1.Nacos 配置管理 Nacos 除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#x…

REST API的指纹验证机制

前端或者客户端涉及数据相关的请求都是不安全的&#xff0c;从某种意义上只能通过一些手段降低请求不被容易使用。本来来介绍一种基于 JWT 的指纹机制。 关于 JWT 令牌机制就不详细介绍了。在 JWT 令牌中包含系统 JWT 指纹可以带来安全改进&#xff0c;而不会给用户带来任何不…

GitOps - 为 OpenShift GitOps 配置邮件通知

《OpenShift 4.x HOL教程汇总》 说明&#xff1a;本文已经 在OpenShift 4.15 OpenShift GitOps 1.11.2 环境中验证 文章目录 ArgoCD 的 Notification 功能简介启动 OpenShift GitOps 的 Notification 功能配置邮件通知验证参考 说明&#xff1a;先根据《OpenShift 4 之 GitOp…

基于深度学习的危险物品检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文详细介绍基于YOLOv8/v7/v6/v5的危险物品检测技术。主要采用YOLOv8技术并整合了YOLOv7、YOLOv6、YOLOv5的算法&#xff0c;进行了细致的性能指标对比分析。博客详细介绍了国内外在危险物品检测方面的研究现状、数据集处理方法、算法原理、模型构建与训练代码…

人工智能|深度学习——基于Xception算法模型实现一个图像分类识别系统

一、Xception简介 在计算机视觉领域&#xff0c;图像识别是一个非常重要的任务&#xff0c;其应用涵盖了人脸识别、物体检测、场景理解等众多领域。随着深度学习技术的发展&#xff0c;深度卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff…

激发创新活力:算力券与模型券,科技企业的新动力

激发创新活力&#xff1a;算力券与模型券&#xff0c;科技企业的新动力 在数字化转型的大潮中&#xff0c;科技创新已成为推动企业发展的核心动力。为了进一步激发企业的创新活力&#xff0c;政府和相关机构开始探索一种新的激励机制——发放“算力券”和“模型券”。这些创新…

面向对象编程(二)

面向对象&#xff08;二&#xff09; 类和对象的概念 类是一种抽象的数据类型&#xff0c;它是对某一类事物整体描述/定义&#xff0c;但是不能代表某一个具体的事物&#xff08;动物&#xff0c;植物&#xff0c;手机…&#xff09;对象是抽象概念的具体实例&#xff08;比如…

Prometheus+grafana环境搭建redis(docker+二进制两种方式安装)(四)

由于所有组件写一篇幅过长&#xff0c;所以每个组件分一篇方便查看&#xff0c;前三篇 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环境搭建m…

Java基础知识总结(第八篇):集合:Collection(List、Set)、Map、Collections 工具类

声明: 1. 本文根据韩顺平老师教学视频自行整理&#xff0c;以便记忆 2. 若有错误不当之处, 请指出 系列文章目录 Java基础知识总结&#xff08;第一篇&#xff09;&#xff1a;基础语法 Java基础知识总结&#xff08;第二篇&#xff09;&#x…

Matlab|计及需求侧响应日前—日内两阶段鲁棒备用优化

目录 1 主要内容 日前计划模型 日内调整模型 不确定集建模 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《计及需求侧响应日前—日内两阶段鲁棒备用优化》&#xff0c;以6节点系统为例&#xff0c;综合考虑风电出力不确定性与电力设备 N-k强迫停运&…

在linux下conda 创建虚拟环境失败的解决方法

报错内容一&#xff1a; Solving environment: failed CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/conda-forge/noarch/repodata.json> Elapsed: - An HTTP error occurred when trying to retrieve this URL. HTTP errors are…