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

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

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

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

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. ERROR ITMS-90032 “Invalid image path”

    在用 Application Loader上传spa 文件的时候出现这样的错误:ERROR ITMS-90032: "Invalid image path No image found at ...

  2. java中带继承类的加载顺序详解及实战

    一.背景: 在面试中,在java基础方面,类的加载顺序经常被问及,很多时候我们是搞不清楚到底类的加载顺序是怎么样的,那么今天我们就来看看带有继承的类的加载顺序到底是怎么一回事?在此记下也方便以后复习巩 ...

  3. Javascript异步编程方法总结

    现在我们有三个函数,f1, f2, f3 按正常的思路我们会这样写代码: function f1 (){}; function f2 (){}; function f3 (){}; //在这里调用函数 ...

  4. MySQL中varchar转int

    order by ... cast(sort as signed) 或 convert(sort,signed) (sort为待转化字段)

  5. Delphi的面向对象编程基础笔记

    1.面向对象.一门面向对象的编程语言至少要实现以下三个OOP的概念 封装:把相关的数据和代码结合在一起,并隐藏细节.封装的好处是利用程序的模块化,并把代码和其他代码分开 继承:是指一个新的类能够从父类 ...

  6. javascript实用技巧,js小知识

    一.js整数的操作 使用|0和~~可以将浮点转成整型且效率方面要比同类的parseInt,Math.round 要快,在处理像素及动画位移等效果的时候会很有用.性能比较见此. var foo = (1 ...

  7. HDU5115 Dire Wolf(区间DP)

    渐渐认识到区域赛更侧重的是思维及基本算法的灵活运用,而不是算法的量(仅个人见解),接下来要更多侧重思维训练了. 区间DP,dp[i][j]表示从i到j最终剩余第i 与第j只的最小伤害值,设置0与n+1 ...

  8. 攻城狮在路上(壹) Hibernate(十一)--- 映射实体关联关系

    本文以Customer和Address类的关系为例说明一对一关联映射:以Category和Item类的关系说明多对多关联关系.一.映射一对一关联: 分两种情况:按照外键映射和按照主键映射.这两种方式的 ...

  9. Atlas 安装和配置

    前提得配置好主从:http://www.cnblogs.com/super-d2/p/4802990.html 首先,先去下载Altas的rpm包,下载地址:https://github.com/Qi ...

  10. C# 重绘tabControl,添加关闭按钮(页签)

    C# 重绘tabControl,添加关闭按钮(页签) 调用方法 参数: /// <summary> /// 初始化 /// </summary> /// <param n ...