基于Hadoop分布式数据库HBase1.0部署及使用

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 基于Hadoop分布式数据库HBase1.0部署及使用

以下基于上篇Hadoop2.6集群部署 http://lizhenliang.blog.51cto.com/7876557/1661354

接下来部署HBase1.0分布式NoSQL数据库,HBase中涉及到HMaster和HRegionServer两个概念。

(注:以下概念来着百度百科)

HMaster主要负责Table和Region管理工作:

 1. 管理用户对Table的增、删、改、查操作

 2. 管理HRegionServer的负载均衡,调整Region分布

 3. 在Region Split后,负责新Region的分配

 4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移

HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据。

HBase工作原理:

 HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个ColumnFamily中,这样最高效。

 HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是SortedMemory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。

 在理解了上述HStore的基本原理后,还必须了解一下HLog的功能,因为上述的HStore在系统正常工作的前提下是没有问题的,但是在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,HLog是一个实现WriteAhead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

HBase高可用实现方式:

 HBase同样分为Active和Standby,把数据存储在Zookeeper,可以启动两个或多个HMaster服务进程,第一个启动的做为HBase活动节点,其余的作为备用节点。如果一台故障,Zookeeper会选择出备用节点成为活动节点,让他接管故障的活动节点任务,保证总有一个Master运行。

二、HBase安装与配置(每台都要配置)

 1.安装配置

  # tar zxvf hbase-1.0.1.1-bin.tar.gz
  # mv hbase-1.0.1.1 /opt
  # vi hbase-env.sh
  export JAVA_HOME=/usr/local/jdk1.7
  export HBASE_MANAGES_ZK=false     #关闭通过内置Zookeeper管理HBase
  # vi hbase-site.xml
  <configuration>
       <!--HBase数据目录位置-->
   <property>
       <name>hbase.rootdir</name>
       <value>hdfs://hcluster/hbase</value>
   </property>
       <!--启用分布式集群-->
   <property>
       <name>hbase.cluster.distributed</name>
       <value>true</value>
   </property>
       <!--默认HMaster HTTP访问端口-->
   <property>
       <name>hbase.master.info.port</name>
       <value>16010</value>
    </property>
       <!--默认HRegionServer HTTP访问端口-->
    <property>
       <name>hbase.regionserver.info.port</name>
       <value>16030</value>
    </property>
       <!--不使用默认内置的,配置独立的ZK集群地址-->
   <property>
       <name>hbase.zookeeper.quorum</name>
       <value>HSlave0,HSlave1,HSlave2</value>
   </property>
  </configuration>
  # vi regionservers    
  HSlave0
  HSlave1
  HSlave2

2. 配置系统变量

  # vi /etc/profile
  HBASE_HOME=/opt/hbase-1.0.1.1
  PATH=$PATH:$HBASE_HOME/bin
  export HBASE_HOME PATH
  # source /etc/profile

3. 启动HBase

 分别在HMaster0和HMaster1启动hmaster:

  # start-hbase.sh

分别在 HSlave0/1/2启动HRegionServer:

  # hbase-daemon.sh start regionserver

4. 检查是否启动成功

在主备节点查看有HMaster进程说明成功:

  [root@HMaster0 ~]# jps
  2615 DFSZKFailoverController
  30027 ResourceManager
  29656 NameNode
  2841 HMaster
  8448 Jps

 在RegionServer节点查看有HRegionServer进程说明成功:

  [root@HSlave0 ~]# jps
  11391 NodeManager
  11213 DataNode
  11298 JournalNode
  10934 QuorumPeerMain
  12571 HRegionServer
  7005 Jps

通过访问WEB页面查看:

wKioL1WKdfzwbp0yAAPpgFVMH6k525.jpg

5. hbase shell常用操作命令

 根据下面tb1表的结构来演示hbase增删改查用法:

name

info


address


sex 

age


zhangsan

23

man

beijing

lisi

23

woman  

 shanghai 

 # hbase shell  #进入字符页面

 5.1 创建表tb1,并有两个列族name、info和address,info列族下有sex和age列

  hbase(main):024:0> create 'tb1','name','info','address'

5.2 查看表结构

  hbase(main):025:0> describe 'tb1'

5.3 列出所有表

  hbase(main):025:0> list

5.4 插入几条记录

  hbase(main):028:0> put 'tb1','zhangsan','info:sex','22'
  hbase(main):039:0> put 'tb1','zhangsan','info:age','man'
  hbase(main):031:0> put 'tb1','zhangsan','address','beijing'
  hbase(main):046:0> put 'tb1','lisi','info:age','woman'
  hbase(main):047:0> put 'tb1','lisi','info:sex','23'
  hbase(main):048:0> put 'tb1','lisi','address','shanghai'

5.5 查看所有记录(全表扫描)

 hbase(main):040:0> scan 'tb1'
 ROW              COLUMN+CELL                                                       
 zhangsan                column=address:,timestamp=1435129009088,value=beijing                                              
 zhangsan        column=info:age,timestamp=1435129054098, value=man                                            
 zhangsan        column=info:sex,timestamp=1435128714392, value=22

说明:

 ROW:行,用来检索记录的主键。

 COLUMN family:列族,是表的一部分,必须在创建表时定义,可以看到列名是以列族作为前缀,一个列族可以有多个列(column)。

 CELL:存储单位,存储实际数据,也就是所看到的value,cell中没有数据类型,全部是字节码形式存储。

 timestamp:时间戳,可以看做是数据版本号,hbase写时自动赋值,为当前系统时间,精确到毫秒。如果每个cell保存同一份数据多个版本时,可通过时间戳来索引版本。

 5.6 统计表中记录总数

  hbase(main):050:0> count 'tb1'
  2 row(s) in 0.0190 seconds
 
  => 2

5.7 查看表中某条记录

  hbase(main):054:0> get 'tb1','zhangsan'
  hbase(main):054:0> get 'tb1','zhangsan'
  COLUMN                  CELL                                                           
   address:               timestamp=1435129096397,value=beijing                            
   info:age               timestamp=1435129054098,value=man                                
   info:sex               timestamp=1435128714392,value=22

 5.8 查看表中某行某列族中的所有数据

  hbase(main):055:0> get 'tb1','zhangsan','info'
  COLUMN                  CELL                                                             
   info:age               timestamp=1435129054098,value=man                                
   info:sex               timestamp=1435128714392,value=22

 5.9 更新一条记录(覆盖)

  hbase(main):063:0> put 'tb1','zhangsan','info:sex','23'
  0 row(s) in 0.0080 seconds

 6.0 给lisi增加一个comment字段

  hbase(main):070:0> incr 'tb1','lisi','info:comment'

6.1 删除某行某列族数据

  hbase(main):065:0> delete 'tb1','zhangsan','info:sex'

6.2 删除某行所有记录

  hbase(main):067:0> deleteall 'tb1','zhangsan'

6.3 删除一个表

  hbase(main):072:0> disable 'tb1'  #先禁用
  hbase(main):073:0> drop 'tb1'   #再删除


相关实践学习
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
29天前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
1月前
|
SQL 关系型数据库 数据库
【YashanDB知识库】OM仲裁节点故障后手工切换方案和yasom仲裁重新部署后重新纳管数据库集群方案
本文介绍了主备数据库集群的部署、OM仲裁故障切换及重新纳管的全过程。首先通过解压软件包并调整安装参数完成数据库集群部署,接着说明了在OM仲裁故障时的手动切换方案,包括关闭自动切换开关、登录备节点执行切换命令。最后详细描述了搭建新的yasom仲裁节点以重新纳管数据库集群的步骤,如生成配置文件、初始化进程、执行托管命令等,确保新旧系统无缝衔接,保障数据服务稳定性。
|
1月前
|
数据库
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
|
9天前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
52 12
|
24天前
|
SQL 数据可视化 网络安全
YashanDB分布式可视化部署
本文介绍YashanDB的分布式部署流程,涵盖服务端安装、数据库基本信息与服务器配置、节点信息设置、建库参数调整、环境变量配置及安装结果检查等步骤。通过可视化Web界面操作,详细说明了各环节配置方法和注意事项,确保用户顺利完成数据库集群的搭建与初始化设置。适用于需要分布式数据库部署的场景,提供全面的操作指导。
YashanDB分布式可视化部署
|
25天前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
1月前
|
运维 Kubernetes Java
Koupleless 助力「人力家」实现分布式研发集中式部署,又快又省!
本文由仁励家网络科技(杭州)有限公司架构师赵云兴、葛志刚撰写,探讨了公司在优化HR SaaS解决方案时遇到的系统资源浪费和运维成本高的问题。通过引入Koupleless框架,成功将模块体积从500M缩减至5M以下,部署时间从6分钟缩短至3分钟,并大幅节省服务器资源。文章详细介绍了Koupleless的部署方案及优化措施,感谢Koupleless团队的专业支持,使人力家实现了多应用合并部署,降低了运维成本。
Koupleless 助力「人力家」实现分布式研发集中式部署,又快又省!
|
1月前
|
运维 Kubernetes Java
Koupleless 助力「人力家」实现分布式研发集中式部署,又快又省!
通过引入Koupleless框架,解决了多应用部署中资源浪费和运维成本高的问题,实现了模块瘦身、快速部署及流量控制优化,大幅降低了服务器资源占用和发布耗时,提升了系统稳定性和运维效率。最终,人力家成功实现了多应用的轻量集中部署,显著减少了运维成本。
 Koupleless 助力「人力家」实现分布式研发集中式部署,又快又省!
|
1月前
|
SQL 关系型数据库 网络安全
Navicat Premium 17 最新版下载与配置:5分钟完成企业级数据库工具部署
Navicat Premium 17 是一款支持多种主流数据库(如 MySQL、Oracle、PostgreSQL 等)的多数据库管理工具,提供可视化数据建模、SQL 编辑和数据同步等功能。试用版提供 14 天全功能体验,商业版支持跨平台使用。安装环境要求 Windows 10/11 或 macOS 12.0+,最低配置为 4GB 内存。下载并解压安装包后,按步骤启动安装程序、接受许可协议、自定义安装路径并完成安装。首次运行时需激活许可证并配置数据库连接。常见问题包括无法写入注册表、试用期续费及连接数据库权限问题。高级功能涵盖 SSH 通道加速、自动化任务调度和性能调优建议。
272 19
下一篇
oss创建bucket