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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

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.安装配置

1
2
3
4
5
   # 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
   # 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 >
1
2
3
4
   # vi regionservers    
   HSlave0
   HSlave1
   HSlave2

  2. 配置系统变量

1
2
3
4
5
   # 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:

1
   # start-hbase.sh

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

1
   # hbase-daemon.sh start regionserver

  4. 检查是否启动成功
  在主备节点查看有HMaster进程说明成功:

1
2
3
4
5
6
   [root@HMaster0 ~] # jps
   2615 DFSZKFailoverController
   30027 ResourceManager
   29656 NameNode
   2841 HMaster
   8448 Jps

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

1
2
3
4
5
6
7
   [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
22 man beijing
lisi 23 woman   shanghai 

  # hbase shell  #进入字符页面

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

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

  5.2 查看表结构

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

  5.3 列出所有表

1
   hbase(main):025:0> list

  5.4 插入几条记录

1
2
3
4
5
6
   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 查看所有记录(全表扫描)

1
2
3
4
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 统计表中记录总数

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

  5.7 查看表中某条记录

1
2
3
4
5
6
   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 查看表中某行某列族中的所有数据

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

  5.9 更新一条记录(覆盖)

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

  6.0 给lisi增加一个comment字段

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

  6.1 删除某行某列族数据

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

  6.2 删除某行所有记录

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

  6.3 删除一个表

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


本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1665130,如需转载请自行联系原作者
相关实践学习
云数据库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
相关文章
|
1月前
|
SQL 安全 数据库
SQL-Server 数据库部署
SQL-Server 数据库部署
63 0
|
1月前
|
Java 测试技术 Linux
jmeter-分布式部署之负载机的设置
jmeter-分布式部署之负载机的设置
46 1
|
1月前
|
网络协议 关系型数据库 MySQL
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
|
1月前
|
Oracle 关系型数据库 分布式数据库
分布式数据库集成解决方案
分布式数据库集成解决方案
203 0
|
3月前
|
分布式计算 Ubuntu Hadoop
百度搜索:蓝易云【Ubuntu搭建全分布式Hadoop】
请注意,以上只是概述,并不包含详细的步骤和指令。搭建全分布式Hadoop是一个复杂的过程,需要对Hadoop的架构和配置有深入的理解,并熟悉Linux系统管理。建议在搭建全分布式Hadoop之前,先学习相关知识并查阅官方文档和教程,以确保正确搭建和配置Hadoop集群。
27 0
|
11天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
14天前
|
Docker 容器 关系型数据库
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
本期课程将于4月11日19:00开始直播,内容包括源码编译基础知识和实践操作,课程目标是使学员掌握源码编译部署技能,为未来发展奠定基础,期待大家在课程中取得丰富的学习成果!
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
|
14天前
|
分布式计算 Hadoop Java
centos 部署Hadoop-3.0-高性能集群(一)安装
centos 部署Hadoop-3.0-高性能集群(一)安装
15 0
|
存储 传感器 数据管理
【软件设计师备考 专题 】面向对象数据库和分布式对象:理解新的数据管理概念
【软件设计师备考 专题 】面向对象数据库和分布式对象:理解新的数据管理概念
52 0
|
1月前
|
存储 分布式计算 大数据
现代化数据库技术——面向大数据的分布式存储系统
传统的关系型数据库在面对大规模数据处理时遇到了诸多挑战,而面向大数据的分布式存储系统应运而生。本文将深入探讨现代化数据库技术中的分布式存储系统,包括其优势、工作原理以及在大数据领域的应用。

热门文章

最新文章