HBase基础必备知识-Day1

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版本的兼容性

      JDK版本

    2. HBase和Hadoop版本的兼容性

      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'
  1. 查询数据

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

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

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

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

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

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

    list
    
  8. 描述表

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

    list_namespace
    
  10. 创建名称空间

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

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

    list_namespace_tables 'demo'
    
  13. 删除空间

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

    processlist
    
  15. 查看HBase集群的状态

    status
    
  16. 查看HBase的版本

    version
    
  17. 查看当前用户

    whoami
    
  18. 描述名称空间

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

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

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

    get_splits 'person'
    
  22. 摧毁重建表

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

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

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

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

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

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

    show_filters
    
  29. 修改表中列族的属性

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

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

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

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

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

    show_filters
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis高可用及持久化

文章目录 一、Redis高可用1、Redis高可用概述2、Redis高可用策略 二、Redis持久化1、Redis持久化的功能2、Redis持久化的两种方式2.1 RDB持久化2.2 AOF持久化&#xff08;append only file&#xff09; 3、RDB持久化3.1 触发条件3.1.1 手动触发3.1.2 自动触发3.1.2.1 配置方式3…

[Linux] 排查问题指令top/ps/netstat

在Linux下查看某个端口运行的指令 1. 首先通过netstat来查看端口对应的进程号 比如抓取端口53这个DNS服务的进程 netstat -tulnp | grep 53 可以看到53这个端口号对应的pid是720 2. 通过ps指令来对进程号执行的命令查询 ps aux | grep 720 可以看到pid为720这个进程对应的执…

聚道云助IT公司破解数据同步难,高效转型新利器!

客户介绍&#xff1a; 该公司是一家在信息技术行业具有丰富经验和良好声誉的公司。作为专业的软件服务提供商&#xff0c;他们致力于为客户提供全方位的解决方案和支持服务。公司秉持合规经营的原则&#xff0c;严格遵守相关法律法规&#xff0c;确保客户的数据安全和合法权益…

HTML基础:脚本 script 标签

你好&#xff0c;我是云桃桃。 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 255篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中 后台回复“前端基础题”可得到前端基础100题汇…

图卷积神经网络GCN

图卷积神经网络GCN 我们的GCN就是用来解决如何确定a、b、c的

Java毕业设计-基于springboot开发的致远汽车租赁系统平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、业务员功能模块3、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot…

Sora 基础作品之 DiT:Scalable Diffusion Models with Transformer

Paper name Scalable Diffusion Models with Transformers (DiT) Paper Reading Note Paper URL: https://arxiv.org/abs/2212.09748 Project URL: https://www.wpeebles.com/DiT.html Code URL: https://github.com/facebookresearch/DiT TL;DR 2022 年 UC Berkeley 出…

LeetCode 59 螺旋矩阵(模拟)

给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff1a;n 1 输出&…

模型训练----parser.add_argument添加配置参数

现在需要配置参数来达到修改训练的方式&#xff0c;我现在需要新建一个参数来开关wandb的使用。 首先就是在def parse_option():函数里添加上你要使用的变量名 parser.add_argument("--open_wandb",type bool,defaultFalse,helpopen wandb) 到config文件里增加你的…

2024-04-02 作业

作业要求&#xff1a; 整理思维导图使用模板类&#xff0c;实现顺序栈写一个char类型的字符数组&#xff0c;对该数组访问越界时抛出异常&#xff0c;并做处理。 作业1&#xff1a; 作业2&#xff1a; 运行代码: #include <iostream>using namespace std; #define LEN …

OpenGL_Learn16(模板测试)

模板缓冲首先会被清除为0&#xff0c;之后在模板缓冲中使用1填充了一个空心矩形。场景中的片段将会只在片段的模板值为1的时候会被渲染&#xff08;其它的都被丢弃了&#xff09;。 模板缓冲操作允许我们在渲染片段时将模板缓冲设定为一个特定的值。通过在渲染时修改模板缓冲的…

LeetCode_394(字符串解码)

双栈法 public String decodeString(String s) {String res "";Stack<Integer> countStack new Stack<>();Stack<String> resStack new Stack<>();int idx 0;while (idx < s.length()){char cur s.charAt(idx);//处理数字if(Charact…

css基础(一文读懂css)

1.css简介 css是一种用于描述网页样式和布局的样式表语言。它与HTML结合使用&#xff0c;用于控制网页中各个元素的外观和排版。 2.css样式引入方式 2.1 行内样式 行内优先级最高&#xff0c;针对当前标签 2.2 行外头部引入 行外头部&#xff1a;style&#xff0c;针对当前…

ISELED-演示项目代码

目录 一、main函数二、点灯函数一、main函数 int main(void) {/* Write your local variable definition here */iseledInitType.crcEnable = 1;iseledInitType.firstLedAdr = 1;iseledInitType.tempCmpEnable = 0;iseledInitType.voltSwing = 0;/*** End of Processor Expert…

【二叉树】Leetcode 105. 从前序与中序遍历序列构造二叉树【中等】

从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例1&#xff1a; 输入: preorder [3,9,20,15,7], inorder …

基于Springboot的一站式家装服务管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的一站式家装服务管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体…

微信小程序开发学习笔记——4.7 api中navigate路由接口与组件的关系

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、跳转 1、方法一&#xff1a;组件 组件-导航-navigator <navigator url"/pages/demo/demo?id123" open-type"reLaunch">go demo page <…

DETREC数据集标注 VOC格式

经过将DETRAC数据集转换成VOC格式&#xff0c;并使用labelimg软件进行查看&#xff0c;发现该数据集存在很多漏标情况&#xff0c;截图如下所示。

acwing1388. 游戏 + LC1406.石子游戏 零和博弈

零和博弈 有点类似那个Min-Max 游戏 考虑DP【l,r】 为当前考虑到[l,r]当前的先手能得到的最大的分 #include<bits/stdc.h> using namespace std; using ll long long; using pii pair<int,int>; const int N 1e510; const int inf 0x3f3f3f3f; const int mod …

NIKKI DENSO伺服驱动器维修NCR-CAB1A2D-801B

NEXSRT伺服驱动器维修NPSA-MU日机电装伺服维修ACTUS POWER&#xff0c;NCS-ZE12MDA/ZE1MDA-601A&#xff0c;NEXSRT日机电装伺服维修NCS-ZE12MDB-401A/NCS-ZAMDA-401AG。 NIKKI常见故障原因及处理方法&#xff1a; 1、电机在一个方向上比另一个方向跑得快&#xff1b; (1) 故…