《HBase实战》
对,我正在研读这本书,今天开始,我希望我看完后能有收获和大家分享,这个日志作为开始,勉励自己!
对,我应该静下心,做一些我更喜欢的事情,不能在自我陶醉中迷失!
断断续的看,到今天大概把这本书看完了,没想到这本书的开始,经历了一件令人愤怒的事情,不料,刚刚看完这本书,经历了一件伤心的事情,足以影响人生轨迹。生活还要继续,读书笔记还是要写。
不过也只能做个提纲式的总结,具体的大家还是要去看书,我的水平只能告诉大家这本书给我带来的收获。
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实战》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 让项目同时支持ARC和非ARC
ttp://code4app.com/snippets/one/禁止某几个文件用ARC模式编译/502344256803fa246d000000#s0 如果你的绝大部分代码需要ARC,那么就设置项目支 ...
- September 11th 2016 Week 38th Sunday
Nothing happens unless first a dream. 一切始于梦想. When everything seems to be going against you, remembe ...
- python基础——返回函数
python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...
- C语言文件操作相关函数
在实际应用中,我们往往需要对文件进行操作,下面我将介绍C语言的一些关于操作文件的函数. 一.计算机文件 计算机文件是以计算机硬盘为载体存储在计算机上的信息集合,是存储在某种长期储存设备上的一段数据流. ...
- Angular.JS
AngularJS是什么? 完全使用 JavaScript编写的客户端技术.同其他历史悠久的 Web技术( HTML. CSS 和JavaScript)配合使用,使Web应用开发比以往更简单.更快捷. ...
- perl检查变量是否定义
my $label = defined($pieces[0]) ? $pieces[0] : ""; my @alreadyAddedCol = $node1->{DB}-& ...
- hdu 1257 最少拦截系统
#include<time.h> #include <cstdio> #include <iostream> #include<algorithm> # ...
- 三、jQuery--jQuery插件--jQuery插件——Validation Plugin
简介: 客户端验证:现代网站填写表单时,几乎一定会采用的方式. 优点:1.可以减少服务器压力 2.缩短用户等待时间和提升用户体验 jQuery有很多表单验证插件:https://plugins.jqu ...
- ASP.NET Web API 配置返回的json字段的格式以及Action返回HttpResponseMessage类型和IHttpActionResult类型
1. 对于返回的Json对象格式是以“帕斯卡”风格的(例如“FirstName”),然而我们的Api有很大的可能被带有Javascript的客户端消费,对于JS开发者来说可能更适合“驼峰”风格(例如” ...
- MSSQL数据的批量插入
一.概述: 对于数据的批量插入操作似乎成了某些大数据量操作的必用手段,MSSQL也提供了一些数据批量插入的操作方法,先将这些方法汇总,以便于下次用到使用.面对数据的批量插入操作,我们也应该考虑一个问题 ...