Day8 —— 大数据技能之HBase

打印 上一主题 下一主题

主题 536|帖子 536|积分 1608

HBase的概述

什么是HBase?

HBase 是一个开源的、分布式的、面向列的 NoSQL 数据库,它构建在 Apache Hadoop 之上,提供了高可靠性、高性能和可伸缩性的数据存储解决方案。HBase 的设计灵感来自于 Google 的 Bigtable。
主要特点和功能包罗


  • 面向列的存储: HBase 采用面向列的存储模型,数据按行键(Row Key)和列族(Column Family)存储,可以支持动态列。
  • 分布式存储: HBase 是基于 Hadoop 的分布式文件系统(如 HDFS)构建的,可以水平扩展以处置处罚大规模数据集。
  • 高可靠性和高可用性: HBase 提供数据的主动复制和容错机制,确保数据的可靠性和可用性。
  • 快速读写: HBase 提供了高性能的读写操作,支持随机读写访问,并可以或许处置处罚大量并发请求。
  • 强一致性: HBase 提供强一致性的数据访问模型,确保数据的一致性性。
  • 支持主动分区和负载平衡: HBase 可以主动管理数据的分区和负载平衡,使得数据在集群中分布匀称。
  • 支持多种操作接口: HBase 提供了多种操作接口,包罗 Java API、REST API、Thrift API 等,方便用户进行数据访问和操作。
利用场景



  • 及时数据存储和分析: HBase 实用于需要及时存储和分析大量数据的场景,如日志数据、传感器数据等。
  • 在线交易处置处罚(OLTP): HBase 支持高并发的随机读写操作,实用于在线交易处置处罚系统。
  • 及时保举系统: HBase 可以作为及时保举系统的数据存储引擎,支持快速的数据检索和更新。
  • 时序数据存储: HBase 实用于存储时序数据,如传感器数据、日志数据等,支持按时间范围的快速查询。
HBase的架构




  • HMaster:
    HMaster 是 HBase 的主节点,负责管理整个集群的元数据、负载平衡、Region 的分配和调度、故障恢复等工作。HMaster 通过 ZooKeeper 进行协调和通讯。
  • RegionServer:
    RegionServer 是 HBase 的工作节点,负责管理存储数据的 Region。
    每个RegionServer 可以管理多个 Region,负责处置处罚读写请求、数据的存储和 检索等操作。
  • Region:
    Region 是 HBase 中数据存储和管理的基本单位,数据按照 Row Key 范围分别为多个 Region,每个 Region 存储一定范围的数据。RegionServer 负责管理和处置处罚特定的 Region。
  • HLog(Write-ahead Log):
    HLog 是 HBase 中的写前日志,用于记录数据的变更操作,确保数据的持久性和一致性。HLog 会先将数据写入日志,然后再写入内存和磁盘中。
  • MemStore:
    MemStore 是位于 RegionServer 中的内存缓存,用于暂时存储写入的数据,当数据量到达一定阈值时,会将数据刷写到磁盘中的 HFile 中。
  • HFile:
    HFile 是 HBase 中数据存储的文件格式,数据按列族存储在 HFile 中,提供快速的数据检索和访问。
  • ZooKeeper:
    ZooKeeper 是 HBase 集群中的协调服务,用于管理集群的状态信息、推举 Master、协调 RegionServer 等。HBase 利用 ZooKeeper 来确保集群的一致性和可靠性。
  • HBase Client:
    HBase Client 是用户与 HBase 集群交互的接口,用户可以通过 HBase Client 发送读写请求、管理数据等操作。
HBase部署与启动

下载、解压缩,在/etc/profile全局配置文件中添加
   export HBASE_HOME=/export/servers/hbase-2.4.5
export PATH=$ PATHHBASE_HOME/bin
  下载、解压缩,在/etc/profile全局配置文件中添加
   export HBASE_HOME=/export/servers/hbase-2.4.5
export PATH=$ PATHHBASE_HOME/bin
  下载、解压缩,在/etc/profile全局配置文件中添加
  1. <configuration>
  2.   <!-- hbase数据存放的目录-->
  3.           <property>
  4.        <name>hbase.rootdir</name>
  5.        <value>hdfs://my2308-host:9000/hbase</value>
  6.     </property>
  7.     <!-- zk的位置 -->
  8.     <property>
  9.         <name>hbase.zookeeper.quorum</name>
  10.         <value>localhost</value>
  11.         <description>my2308-host:2181</description>
  12.     </property>
  13. <!--hbase.cluster.distributed表示是否分布式部署,指定为true-->
  14.     <property>
  15.          <name>hbase.cluster.distributed</name>
  16.          <value>true</value>
  17.     </property>
  18.     <!-- hbase主节点的位置 -->
  19.     <property>
  20.          <name>hbase.master</name>
  21.          <value>my2308-host:60000</value>
  22.      </property>
  23. </configuration>
复制代码
拷贝zookeeper的conf/zoo.cfg到hbase的conf/下
启动HBase,执行start-hbase.sh脚本
   留意:为了方便启动,可在/etc/profile中添加环境变量
export HBASE_HOME=/export/servers/hbase-2.4.5
export PATH=$ PATH HBASE_HOME/bin
  HBase基本操作

前提条件



  • 启动Hadoop集群:sbin/start-all.sh
  • 启动ZooKeeper服务:zkServer.sh start
  • 启动HBase服务:start-hbase.sh
数据库操作

进入 hbase 客户端
   hbase shell
  检察所有库(命名空间)
   list_namespace
  创建一个名称为’mydb’的库
   create_namespace ‘mydb’
  删除’mydb’库
   drop_namespace ‘mydb’
  进入 hbase 客户端
   hbase shell
  表操作

检察 'mydb’库下的表
   list_namespace_tables ‘mydb’
  检察所有自己创建的表
   list
  在’mydb’库下创建名为test的表,并创建’f1’、'f2’两个列族
   create ‘mydb:test’,‘f1’,‘f2’
  留意:创建表时若不指定库名,默认在default库下创建表,创建表要至少指定一个列族
检察表详细信息
   describe ‘mydb:test’ 或 desc ‘mydb:test’
  增长列族
   alter ‘mydb:test’,‘f3’
  删除列族
   alter ‘mydb:test’,‘delete’=>‘f2’
  删除表
   disable ‘mydb:test’
drop ‘mydb:test’
  留意:删除表需要先进行disable,再进行drop
数据的CRUD操作

先在 default 库下创建一个名为stu的表,列族名称是 info
   create ‘stu’,‘info’
  插入数据
   put ‘stu’,‘1001’,‘info:name’,‘linghc’
put ‘stu’,‘1001’,‘info:sex’,‘man’
put ‘stu’,‘1001’,‘info:age’,‘26’
put ‘stu’,‘1002’,‘info:name’,‘renyy’
put ‘stu’,‘1002’,‘info:sex’,‘female’
put ‘stu’,‘1002’,‘info:age’,‘24’
put ‘stu’,‘1003’,‘info:name’,‘yilin’
put ‘stu’,‘1003’,‘info:sex’,‘female’
put ‘stu’,‘1003’,‘info:age’,‘18’
某一行的列的个数可以不一样
put ‘stu’,‘1004’,‘info:name’,‘dongfangb’
put ‘stu’,‘1004’,‘info:sex’,‘female’
put ‘stu’,‘1004’,‘info:age’,‘28’
put ‘stu’,‘1004’,‘info:party’,‘rysj’
  根据row key(行键)查询
   get ‘stu’,‘1004’
  根据行键、列名查询
   get ‘stu’,‘1004’,‘info:name’,‘info:age’
  扫描表数据
   scan ‘stu’
  按rowkey范围扫描 {STARTROW => ‘1001’ ,STOPROW => ‘1003’} :左闭右开,此时只查询到 1002
   scan ‘stu’,{STARTROW => ‘1001’ ,STOPROW => ‘1003’}
  指定STOPROW 后加!,可以实现左闭右闭
   scan ‘stu’,{STARTROW => ‘1001’ ,STOPROW => ‘1003!’}
  修改数据:直接put进行覆盖
   put ‘stu’,‘1001’,‘info:name’,‘linghc1’
  留意:修改数据后,其实只是在原来的底子上增长了一条数据,查询的时间返回了时间戳最新的一个版本,旧版本的数据还在
查寻每个单位格的2个版本数据
   scan ‘stu’,{RAW=>true,VERSIONS=>2}
  留意RAW参数必须和VERSIONS一起利用,旧版本的数据在适当的时间会被释放;如果想要生存最新两个版本的数据,可以将某个表的 VERSIONS设置为2
更改表的VERSIONS
   alter ‘stu’,{NAME=>‘info’,VERSIONS=>2}
  留意:创建表时若不指定库名,默认在default库下创建表,创建表要至少指定一个列族
删除数据
   delete ‘stu’,‘1001’,‘info:sex’
  此时查询会发现无数据
   get ‘stu’,‘1001’,‘info:sex’
  再通过版本号查询
   scan ‘stu’,{RAW=>true,VERSIONS=>2}
  会发现删除的数据有Delete标注


  • 根据行键和列名删除列
   deleteall ‘stu’,‘1001’,‘info:sex’
标注为:DeleteColumn
  

  • 根据行键删除列族
   deleteall ‘stu’,‘1004’
标注为:DeleteFamily
  

  • 删除表中所有数据
   truncate ‘stu’
truncate下令将删除表中的所有数据行,但是生存表的结构和配置信息。
  HBase的不敷

当涉及到某些特定的应用场景时,HBase并不总是首选解决方案。举例来说,HBase自己并不支持复杂的聚合运算,如Join和GroupBy操作。在这种环境下,可以考虑在HBase之上集成Phoenix或Spark组件。Phoenix实用于小规模聚合的OLTP场景,而Spark则实用于大规模聚合的OLAP场景。
此外,HBase原生不支持二级索引功能,这意味着无法直接进行二级索引查找。不过,有许多第三方解决方案可以为HBase提供二级索引支持,好比Phoenix提供的二级索引功能。
另一个限制是HBase没有实现全局跨行事务,只支持单行事务模型。针对这一点,Phoenix提供了全局事务模型组件,可以弥补HBase在这方面的不敷。
尽管如此,HBase作为一个高可靠性、高性能和可伸缩性的分布式NoSQL数据库,在Hadoop生态系统的支持下,通过集成Phoenix、Spark或其他第三方组件,仍然可以或许满足广泛的大数据存储和处置处罚需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表