《HBase不睡觉书》以其全面深入的内容及适合不同读者群体的特点成为HBase领域的经典之作。该书从浅入深地讲解了HBase的概念、安装、配置和部署等方面,尤其适合那些之前没有接触过HBase或希望深入掌握该技术的读者。通过系统而详细的阐述,读者可以一步步理解和掌握HBase这个Apache旗下的高可靠性、高性能、面向列、可伸缩的分布式存储系统。无论是初学者还是已经对HBase有所了解的读者,都能从本书中获得实用而有深度的知识,真正达到提升技术水平的目的。
HBase不睡觉书 电子书封面
内容节选
1.1 什么是HBase
HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
HBASE是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable使用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为协同服务。
1.2 与传统数据库的对比
1、传统数据库遇到的问题:
1)数据量很大的时候无法存储;
2)没有很好的备份机制;
3)数据达到一定数量开始缓慢,很大的话基本无法支撑;
2、HBASE优势:
1)线性扩展,随着数据量增多可以通过节点扩展进行支撑;
2)数据存储在hdfs上,备份机制健全;
3)通过zookeeper协调查找数据,访问速度快。
1.3 HBase集群中的角色
1、一个或者多个主节点,Hmaster;
2、多个从节点,HregionServer;
3、HBase依赖项,zookeeper;
内容介绍
HBase是Apache旗下一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。利用HBase技术可在廉价PC 服务器上搭建起大规模的存储化集群。使用HBase可以对数十亿级别的大数据进行实时性的高性能读写,在满足高性能的同时还保证了数据存取的原子性。
HBase不睡觉书共分为10章,由浅入深的讲解HBase概念、安装、配置、部署。让读者对HBase先有一个感性认识,再从应用角度,介绍了高级用法、监控和性能调优。既兼顾了初学者也适用于想要深入学习HBase的读者。
本书适合于以前没有接触过HBase,或者了解HBase并希望能够深入掌握的读者,适合HBase应用开发人员和系统管理人员学习使用。
目录
- 第1章 基础知识 1
- 第1章 初识HBase 1
- 第2章 让HBase跑起来 11
- 第3章 HBase基本操作 72
- 第4章 客户端API入门 136
- 第5章 HBase内部探险 178
- 第6章 客户端API的高阶用法 195
- 第7章 客户端API的管理功能 293
- 第8章 再快一点! 334
- 第9章 当HBase遇上MapReduce 392
- ......
Zookeeper: Zookeeper Quorum存储-ROOT-表地址、HMaster地址 HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况 Zookeeper避免HMaster单点问题 Zookeeper的主要作用:客户端首先联系ZooKeeper子集群(quorum)(一个由ZooKeeper节点组成的单独集群)查找行健。上述过程是通过ZooKeeper获取含有-ROOT-的region服务器名(主机名)来完成的。通过含有-ROOT-的region服务器可以查询到含有.META.表中对应的region服务器名,其中包含请求的行健信息。这两处的主要内容都被缓存下来了,并且都只查询一次。最终,通过查询.META服务器来获取客户端查询的行健数据所在region的服务器名。一旦知道了数据的实际位置,即region的位置,HBase会缓存这次查询的信息,同时直接联系管理实际数据的HRegionServer。所以,之后客户端可以通过缓存信息很好地定位所需的数据位置,而不用再次查找.META.表。
在HBase,你存的任何内容都必须转为byte[]字节流进行存储,在Java代码中可以调用hbase-client jar包中的org.apache.hadoop.hbase.util.Bytes.toBytes()方法将各种基本类型的数据转为byte[]字节流。所以解析数据的压力就放在了客户端。客户端从HBase拿到了字节流,进行相应的解码算法还原为原始数据(比如通过org.apache.hadoop.hbase.util.Bytes.toInt()将byte[]还原回int)。因此要求存入数据之前用户必须设计好存储内容——HBase根本不管你存入的是什么玩意,对它来说就是一个byte[],用户必须自己负责解析内容,因此存储数据之前必须想好你要存什么,以及如何解析。这点和很多常见的RDB有很大的不同。