在HBase中创建的一张表可以分布在多个Hregion,也就说一张表可以被拆分成多块,每一块称我们呼为一个Hregion。每个Hregion会保 存一个表里面某段连续的数据,用户创建的那个大表中的每个Hregion块是由Hregion服务器提供维护,访问Hregion块是要通过 Hregion服务器,而一个Hregion块对应一个Hregion服务器,一张完整的表可以保存在多个Hregion 上。HRegion Server 与Region的对应关系是一对多的关系。每一个HRegion在物理上会被分为三个部分:Hmemcache(缓存)、Hlog(日志)、HStore(持久层)。
上述这些关系在我脑海中的样子,如图所示:
1.HRegionServer、HRegion、Hmemcache、Hlog、HStore之间的关系,如图所示:
2.HBase表中的数据与HRegionServer的分布关系,如图所示:
HBase读数据
HBase读取数据优先读取HMemcache中的内容,如果未取到再去读取Hstore中的数据,提高数据读取的性能。
HBase写数据
HBase写入数据会写到HMemcache和Hlog中,HMemcache建立缓存,Hlog同步Hmemcache和Hstore的事务日志,发起Flush Cache时,数据持久化到Hstore中,并清空HMemecache。
客户端访问这些数据的时候通过Hmaster ,每个 Hregion 服务器都会和Hmaster 服务器保持一个长连接,Hmaster 是HBase分布式系统中的管理者,他的主要任务就是要告诉每个Hregion 服务器它要维护哪些Hregion。用户的这些都数据可以保存在Hadoop 分布式文件系统上。 如果主服务器Hmaster死机,那么整个系统都会无效。下面我会考虑如何解决Hmaster的SPFO的问题,这个问题有点类似Hadoop的SPFO 问题一样只有一个NameNode维护全局的DataNode,HDFS一旦死机全部挂了,也有人说采用Heartbeat来解决这个问题,但我总想找出 其他的解决方案,多点时间,总有办法的。
昨天在hadoop-0.21.0、hbase-0.20.6的环境中折腾了很久,一直报错,错误信息如下:
Exception in thread "main" java.io.IOException: Call to localhost/serv6:9000 failed on local exception: java.io.EOFException
10/11/10 15:34:34 ERROR master.HMaster: Can not start master
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.hadoop.hbase.master.HMaster.doMain(HMaster.java:1233)
at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:1274)
死活连接不上HDFS,也无法连接HMaster,郁闷啊。
我想想啊,慢慢想,我眼前一亮 java.io.EOFException 这个异常,是不是有可能是RPC 协定格式不一致导致的?也就是说服务器端和客户端的版本不一致的问题?换了一个HDFS的服务器端以后,一切都好了,果然是版本的问题,最后采用 hadoop-0.20.2 搭配hbase-0.20.6 比较稳当。
最后的效果如图所示:
查看大图请点击这里, 上图的一些文字说明:
1.hadoop版本是0.20.2 ,
2.hbase版本是0.20.6,
3.在hbase中创建了一张表 tab1,退出hbase shell环境,
4.用hadoop命令查看,文件系统中的文件果然多了一个刚刚创建的tab1目录,
以上这张图片说明HBase在分布式文件系统Apache HDFS中运行了。
相关推荐
本文档详细的描述了如何采用HBase存储海量图片,以及如何将大批量的小文件写成sequenceFile文件格式。
│ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...
简单的介绍了habse存储数据的样子和简单的hbase shell 使用
这是hbase对数据存储的代码实现,让你轻松秒懂hbase,
支撑Facebook消息处理的HBase存储系统
Hive的HBase存储接口 将数据存储到HDFS以外的其他存储上。并方便的通过hive进行插入、查询等操作
HBase存储的研究与应用_冯晓普.caj
HBase存储的研究与应用-PaperAsk检测报告.zip
HBase最隐秘的问题之一就是它的数据是如何存储的。虽然大多数用户都不会因为这个问题向你抱怨,但是如果你想学习哪些高级的配置选项并了解它们的意思,你可能就需要来了解一下这个存储问题了
HBase大对象存储方案的设计与实现.讲诉HBase的原理及应用
java从本地读文件并上传Hbase
HBase+SpringBoot实战分布式文件存储 资源永久有效哦
掌握Hbase shell操作。 1.2实验要求: 用Hbase shell操作创建一个student表,其结构如下表所示 Row Key address score province city street Java Hadoop Math zhangsan guangdong guangzhou yinglonglu 85 80 90 ...
Hbase应用开发实验报告及代码;(1) 列出HBase所有的表的相关信息,例如表名、创建时间等;(2) 在终端打印出指定的表的所有...2. 现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:
1.2 将解压的文件名hbase-1.0.1.1改为hbase,以方便使用 1.3 配置环境变量 1.4添加HBase权限 1.5查看HBase版本,确定hbase安装成功 2. HBase配置 2.1伪分布式模式配置 接下来测试运行HBase。 1.3.2编程实践 ...
用于Thumbor的HBase存储模块介绍是一种智能成像服务。 它可以按需裁剪,调整图像大小和翻转图像。 是来自Hadoop生态系统的面向列的数据库。 此模块提供对Hadoop HBase的支持,将其作为Thumbor中图像的大型自动复制键...
从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌海量消息存储案例来讲解实战HBase 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...
HBase实战 HBase in Action HBase实战 HBase in Action
HBASE文档,word版本,支持文档视图,官方翻译,新手学习或者老手复习都可用