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

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

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

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

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. 使用Apache+Dreamweaver(或者H-builder)搭建php开发环境

    使用得工具说明 php+Apache服务器+Dreamweaver+mysql数据库 下载安装好wamp,可以在网上直接百度下载,为了方便,我给放个百度云的链接.wamp下载:链接:http://pa ...

  2. jvm学习

    一.jps主要用来输出JVM中运行的进程状态信息 jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器. Jps -ml 二.jstack主要用来查看某个Jav ...

  3. 股票交易(洛谷U6084)

    题目背景 kkk最近迷上了炒股. 题目描述 kkk炒了N天股,第i天的股价为a[i]元.kkk希望股票每天都上涨1元钱,但是操盘手lzn并不想让kkk赚很多钱导致他亏本,于是a[i]相对a[i-1]就 ...

  4. 《C#本质论》读书笔记(12)委托和Lambda表达式

    12.1.委托概述 12.1.2 委托的数据类型 为了减少重复代码数量,可以将比较方法作为参数传递给 BubbleSort()方法.此外,为了将方法作为参数传递,必须有一个能够标识方法的数据类型--也 ...

  5. Python 打包程序判断是否已经运行

    代码如下: # -*- coding: UTF8 -*- from win32com.client import Dispatch import win32com import sys, os fro ...

  6. ExcelReport第三篇:扩展元素格式化器

    导航 目   录:基于NPOI的报表引擎——ExcelReport 上一篇:ExcelReport源码解析 概述 上篇中已介绍了ExcelRepor的架构,本篇将通过例子讲述如何扩展元素格式化器以满足 ...

  7. protobuf-net 对象二进制序列化与反序列号(转)

    概述: Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法.它比xml格式要少的多,甚至比二进制数据格式也小的多. Prot ...

  8. 【翻译十二】java-并发之活性

    A concurrent application's ability to execute in a timely manner is known as its liveness. This sect ...

  9. 【Java EE 学习 21 下】【 使用易宝支付接口实现java网上支付功能】

    一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝 ...

  10. jquery中append()、prepend()、after()、before()的区别详解

    append() - 在被选元素的结尾插入内容(内容的结尾,比如说有个a标签,则是在</a>这个标签之前添加东西) prepend() - 在被选元素的开头插入内容(内容的开始,比如说有个 ...