对,我正在研读这本书,今天开始,我希望我看完后能有收获和大家分享,这个日志作为开始,勉励自己!

对,我应该静下心,做一些我更喜欢的事情,不能在自我陶醉中迷失!

断断续的看,到今天大概把这本书看完了,没想到这本书的开始,经历了一件令人愤怒的事情,不料,刚刚看完这本书,经历了一件伤心的事情,足以影响人生轨迹。生活还要继续,读书笔记还是要写。

不过也只能做个提纲式的总结,具体的大家还是要去看书,我的水平只能告诉大家这本书给我带来的收获。

1.HBase建立在Apache Hadoop和Apache Zookeeper这些分布系统之上,HBase也提供单机部署的方式,当然用的是HBase自管理的Zookeeper和linux本地的文件系统。理论上HBase可以运行在任何分布式文件系统上。

2.HBase的数据结构可以认为是一种key-value形式,其中key由行健、列族、列限定符和时间版本四个坐标唯一确定,value就是一个值。HBase理论上是一个无限高的高表,不是一个无限宽的宽表。HBase中所有数据都是作为原始数据(raw data)使用字节数组(byte[])的形式存储的。这个keyvalue的数据库存储格式可以用java代码如下表示

Map<RowKey, Map<ColumnFamily, Map<ColumnQualifier, Map<Version, Data>>>>

3.实践中,使用HTablePool比直接使用HTable更为常见,连接池的方式

HTablePool pool = new HTablePool();
HTableInterface usersTable = pool.getTable("users");
...// work with the table
usersTable.close();

4.HBase执行写入时会写到两个地方:预写日志(write-ahead log,也称HLog)和MemStore。只有两个地方都返回写成功,才认为写动作完成。当MemStore填满后(可以设置大小),其中的数据会刷写到硬盘,生成一个HFile。一个列族可以有多个HFile,但一个HFile不能存储多个列族的数据。每个列族有一个MemStore。

5.HBase的行健值设计是关键,行健值经常希望是均衡分布的,诸如MD5或SHA1等散列算法通常用来实现这种均衡分布,这个的作用是为写优化,当往HBase表写入大量数据时,我们希望在RegionServer上分散负责来进行优化(散列+salting)。散列提供的定长效果也会让事情变得更轻松。如果把时间设计到行健中,那么时间取反会让我们scan的时候先获取到最新的数据。

6.Hadoop是用java编写的,HBase也是用java编写的,原生的HBase客户端也是用java编写的,HBase也提供了其他不使用Java的客户端选择(基于JVM的和不基于JVM的),这部分我略过了,有兴趣的朋友可以看下。JRuby、REST网关、Thrift网关。

7.文中提到HBase与GIS配合使用的一个应用实例,主要是关于地理位置的处理,一个简单的地理位置包括经度纬度,geohash的编码用经纬度交织编码,这样比较靠近的两个点在存储上也比较靠近,找寻附近的节点类应用就只要读取小块内容就可以,实现最近邻居查询,优化了读。

8.Hadoop和HBase生产机器的部署建议,Hadoop Namenode,JobTracker和Secondary Namenode通常用专门的硬件部署,不要用廉价的机器。Zookeeper和HBase Master可以共享节点,Zookeeper需要奇数跟个实例才能满足做出决策的法定服务器数量,Zookeeper推荐配置专用的硬盘写数据,Zookeeper在内存里提供所有的服务,不过它需要将数据持久化存储到硬盘。HBase RegionServer很耗内存,但是又不能给它配置太大的内存,否则会遇到Java垃圾回收stop-the-world问题。大概不要超过15G的堆空间,因为太大了垃圾回收执行的频率会变小,但是垃圾回收每次出现,将持续很长时间,因为它要扫描更大的内存区域。理想的做法是关闭RegionServer节点上的交换,sysctl -w vm.swappiness=0

9.HBase可以提供集群间复制,但是推荐zookeeper是自管理的。可以用HBase自带的工具做主从,主主备份,也可以用Mapreduce提供更加灵活的备份手段。

《HBase实战》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Centos以rpm方式进行安装MySql

    安装过很多次mysql了,却没好好总结过,每次安装完了都忘,下次还要重新Google,这次总结下,自己以后也有的查. 1.安装采用的的rpm包的方式,安装前要先看系统内是否安装了旧版本的MySql和m ...

  2. C# 泛型约束

    一.泛型简介1.1泛型通过使用泛型,可以创建这样的类.接口和方法,它们以一种类型安全的工作方式操作各种数据.本质上,术语“泛型”指的是“参数化类型”(parameterized types).参数化类 ...

  3. Django环境配置

    Django安装 #安装最新版本的Django $ pip install django #或者指定安装版本 pip install -v django==1.7.1 项目创建 $ django-ad ...

  4. Mac系统下使用VirtualBox虚拟机安装win7--第二步 创建win7系统

    第二步 创建win7系统   启动 Virtual Box 以后,点击窗口左上角的“新建”按钮,如图所示

  5. js冒泡排序与二分法查找

    冒泡排序 var attr=[1,5,7,6,3,9,2,8,4]; var zj=0; //控制比较轮数 for(var i=0;i<attr.length-1;i++) { //控制每轮的比 ...

  6. php 投票系统练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. JS中级 - 01:DOM节点

    1元素属性   1.1childNodes 返回元素的一个子节点的数组 (不推荐,建议用非标准children代替) 提醒:只包含一级子节点,不包含后辈孙级别以下节点. children:返回元素的一 ...

  8. JVM的内存分配与垃圾回收策略

    自动内存管理机制主要解决了两个问题:给对象分配内存以及回收分配给对象的内存. >>垃圾回收的区域 前面的笔记中整理过虚拟机运行数据区,再看一下这个区域: 注意在这个Runtime Data ...

  9. 【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】

    一.使用过滤器实现全站压缩 1.目标:对网站的所有JSP页面进行页面压缩,减少用户流量的使用.但是对图片和视频不进行压缩,因为图片和视频的压缩率很小,而且处理所需要的服务器资源很大. 2.实现原理: ...

  10. 把浏览器的私有模式添加到VS中

    题记:在用VS进行Web开发的时候,常常希望VS的调试不会对浏览器造成固定的影响,那么使用浏览器的私有模式来启动就很有必要. 前几天SCOTT HANSELMAN分享了一个开发Web应用程序的小技巧, ...