Hbase

本文介绍Hbase。但本文的前提是假设你已经读过Google的BigTable论文。

Introduction

Hbase 是基于Google Big Table用java实现的分布式,列式存储的数据库。传统的关系型数据库虽然已经存在了很多年,并且有很多成熟的解决方案,但是对大数据的支持略显不做。虽然关系型数据库也有一些集群,分布式等方案来处理大数据,但从关系型数据库从最初的设计上就不是为大数据而生的,所以都有其局限性。

Building Blocks

这一段将概述Hbase的架构。将从以下几个方面来讲:

Table row column Cell

Auto-Sharding

Storage API

Implementation

总结

Table , row, column, cell

Hbase 的table 是一个多维表。 表中的每一行数据都是由(rowkey,column,timestamp) 到 value的映射。或者说是rowkey,column映射到cell,而cell中的数据则保存着不同timestamp的不同版本。具体请参考BigTable的数据模型。

column 和 BigTable中一样,有column family的概念。column family 在创建表的时候就要指定。不同的一个column family下可以创建任意个column。而且不同的行可以有多个不同的column。

Auto-Sharding

Sharding 是数据库中一个通用的概念。Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。我们知道BigTable中rowkey 按字典顺序排序,一个大的table 根据rowkey的范围分割成很多区域叫tablet。 Hbase中这个概念叫region。Hbase中的region和 BigTable中的tablet几乎没有区别。 一个表根据rowkey的范围分割成多个region。region 由region server负责管理。当region过大了,region server负责split region。 region 是hbase集群中负载均衡的单位,当一个region server有太多的region, hbase会通过负载均衡让压力较小的region server去承担工作。

Storage API

和BigTable 一样。Hbase提供的API能够

create / delete table和column family

操作table column family的metadata

操作table去读写数据

implementation

BigTable 中有一个SSTable。 在Hbase中叫做 HFile。和SSTable一样,HFile用来存储Hbase 的 column family数据。HFile中存储的数据也是键值对。在HFile的最底层有一个索引。因为HFile物理上也是一个个data block组成的,该索引用来查找对应的data block。 HFile对外提供接口可以根据key快速查找value,也可以对一个给定的Key范围对相应的 key-value 迭代。

HFile存储在HDFS中。在写入HFile之前,对数据的操作要写入一个redo log,在Hbase中这个redo log叫做 write-ahead-log WAL. 写入 WAL后,数据被写入内存中一个叫memstore的内存结构。当一个memstore满了后,该memstore flush到硬盘变成HFile。flush 后WAL 就可以丢弃了。memstore就是HFile的内存形式。 这一段和BigTable 的原理是一样的,不过名词略有不同。下面是一个名词对照表:

SSTable : HFile

commit log : WAL

GFS : HDFS

memtable : memstore

minor compaction : flush

HFile 和 SSTable 一样是不可变的。所以当做Delete 操作的时候 只能是写入一个带有delete 标记的记录,这样在读的时候该标记确保客户端读不到被删除的数据。

read的操作需要把memstore 和 对应的HFile 读入内存并merge。 WAL 在读操作中永远不会用到。WAL只有在server down掉的时候用来恢复 HFile。

Hbase中有mincompaction和major compaction。因为memstore定期flush到硬盘所以小的HFile会很多。minor compaction会定期的合并一些。 要注意这和BigTable中的minor compaction有点不一样。 BigTable 中的minor compaction和这里的flush对应。 还有一种majro compaction和BigTable中的概念一样。就是把同一个region下的同一个column family的HFile合并成唯一的一个。而且在合并的过程中会把之前标记为删掉的数据真正删掉。

和BigTable一样 Hbase 也由三部分组成, Master , region server 和 client library 。

Master 负责管理整个集群,负责region 的分配, 负责region server的负载均衡节点添加等操作。 Region server 管理若干个region。 client 直接和region server进行通信I/O。 这样减少了Master 的负载。 集群间协调工作用ZooKeeper。

Install

Hbase在安装前要先规划。Hbase中有Master 和 region server的概念。我们知道region server 负责I/O 所以region server的要求就是网速要好,硬盘容量要充足,并且I/O要好。 而 Master的CPU处理速度要高。 同时我们知道 Hbase基于HDFS。所以还要为安装HDFS 做一些规划。 HDFS 分name node 和data node。 data node 的要求和region server差不多,而name node 的要求和master server类似。我们的实验中用三台机器,Master和namenode 装在一台机器上,而region server和data node 装在一起。 规划如下:

名称 ip role
s1 192.168.1.81 name node && data node
s2 192.168.1.82 data node
s3 192.168.1.83 data node

在安装Hbase 之前要安装 HDFS。 安装HDFS之前则有一些通用的工作要做:

install java

配置s1 无密码访问s1,s2,s3

配置3台服务器使用统一的NTP 服务器

这些操作是比较通用的操作,这里不介绍。 在做完这些操作后开始第一步

Install HDFS

安装HDFS之前要配置一些环境变量如下:

export HADOOP_PREFIX="/opt/hadoop/hadoop-2.7.1"
export HADOOP_HOME=$HADOOP_PREFIX
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_YARN_HOME=$HADOOP_PREFIX

然后去官网下载你想安装的hadoop版本。注意是hadoop而不是hdfs。因为hdfs是集成在hadoop的package中的。

wget http://apache.mirrors.spacedump.net/hadoop/common/stable/hadoop-2.7.1.tar.gz

把package放到之前指定的hadoop_prefix目录下解压缩。

三台机器的配置都一样

在$HADOOP_PREFIX/etc/hadoop/hdfs-site.xml中做如下配置:

<configuration>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/hadoop/hadoop-2.7.1/hdfs/datanode</value>
<description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
</property> <property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/hadoop/hadoop-2.7.1/hdfs/namenode</value>
<description>Path on the local filesystem where the NameNode stores the namespace and transaction logs persistently.</description>
</property>
</configuration>

在$HADOOP_PREFIX/etc/hadoop/core-site.xml中做如下配置:

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://s1/</value>
<description>NameNode URI</description>
</property>
</configuration>

启动停止

## Start HDFS daemons
# Format the namenode directory (DO THIS ONLY ONCE, THE FIRST TIME)
# ONLY ON THE NAMENODE NODE
$HADOOP_PREFIX/bin/hdfs namenode -format
# Start the namenode daemon
# ONLY ON THE NAMENODE NODE
$HADOOP_PREFIX/sbin/hadoop-daemon.sh start namenode
# Start the datanode daemon
# ON ALL SLAVES
$HADOOP_PREFIX/sbin/hadoop-daemon.sh start datanode

Install Hbase

hbase的安装其实也是解压。去官网下载你需要的package解压到/opt/hbase下。注意java要提前安装并且配置JAVA_HOME

三个节点的配置都一样,所以只要在一个节点上配置完成然后把文件copy到其他节点即可。 编辑conf/hbase-env.sh 在开始部分加入source /root/.bash_profile。 这是为了加载你之前设置的环境变量。 如果你把环境变量写入了不同文件, 那么这里需要加载对应的profile 文件。

编辑conf/regionservers ,内容如下:

s1
s2
s3

编辑conf/backup-masters(如果没有则创建),内容如下:

s2

编辑配置文件conf/hbase-site.xml ,增加内容如下:

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://s1/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>s1,s2,s3</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper</value>
</property>
<property>
<name>
hbase.regionserver.port
</name>
<value>
18020
</value>
<source>
hbase-default.xml
</source>
</property>

这里修改了region server的监听地址指定为18020而不是采用默认, 因为master其实也是region server。 所以如果不修改,那么master以及backup master无法与region server起在同一台机器上。

在s1上启动 start-hbase.sh 会启动cluster中所有节点。

启动后可以通过http://s1:16010/ 访问master的web ui。

进入hbase安装目录的bin

./start-hbase.sh

swapness

region presplit

wal

二 hbase的更多相关文章

  1. 大数据学习系列之二 ----- HBase环境搭建(单机)

    引言 在上一篇中搭建了Hadoop的单机环境,这一篇则搭建HBase的单机环境 环境准备 1,服务器选择 阿里云服务器:入门型(按量付费) 操作系统:linux CentOS 6.8 Cpu:1核 内 ...

  2. hbase+hive应用场景

    一.Hive应用场景本文主要讲述使用 Hive 的实践,业务不是关键,简要介绍业务场景,本次的任务是对搜索日志数据进行统计分析.集团搜索刚上线不久,日志量并不大 .这些日志分布在 5 台前端机,按小时 ...

  3. HBase入门

    /×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...

  4. Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

    Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...

  5. NOSQL之旅---HBase

    最近因为项目原因,研究了Cassandra,Hbase等几个NoSQL数据库,最终决定采用HBase.在这里,我就向大家分享一下自己对HBase的理解. 在说HBase之前,我想再唠叨几句.做互联网应 ...

  6. 【DB】HBase的基本概念

    一 Hbase是个啥东东?  在说Hase是个啥家伙之前,首先我们来看看两个概念.面向行存储和面向列存储.面向行存储.我相信大伙儿应该都清楚,我们熟悉的RDBMS就是此种类型的.面向行存储的数据库主要 ...

  7. 大数据学习系列之三 ----- HBase Java Api 图文详解

    版权声明: 作者:虚无境 博客园出处:http://www.cnblogs.com/xuwujing CSDN出处:http://blog.csdn.net/qazwsxpcm 个人博客出处:http ...

  8. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  9. HBase篇--初始Hbase

    一.前述 1.HBase,是一个高可靠性.高性能.面向列.可伸缩.实时读写的分布式数据库.2.利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量 ...

随机推荐

  1. 修改vim注释字体颜色

    vim /etc/vimrc#最后一行新增代码块hi comment ctermfg=6 注:注释用 " 标注 PS:默认的注释颜色是4  然后有0,1,2,3,4,5,6,7来选择.可以除 ...

  2. 浅谈Key-value 存储——SILT

    摘要:本文以文章SILT: A Memory Efficient High Performance Key-Value Store 为基础,探讨SILT存储系统是如何实现内存占用低和高性能的设计目标, ...

  3. 浅谈JS之text/javascript和application/javascript

    问题描述: JS在IE8以下浏览器运行异常 代码: <script>标签是这样子写的: <script type="application/javascript" ...

  4. 06XML JavaScript

    1. XML JavaScript XMLHttpRequest 对象 XML DOM (XML Document Object Model) 定义了访问和操作 XML 文档的标准方法.

  5. 01Oracle Database

    Oracle Database Oracle Database又名Oracle RDBMS简称Oracle是甲骨文公司的一款关系数据库管理系统. Oracle Website.

  6. 【C语言】控制台窗口图形界面编程(六):光标设置

    目录 00. 目录 01. CONSOLE_CURSOR_INFO结构 02. GetConsoleCursorInfo函数 03. SetConsoleCursorInfo函数 04. SetCon ...

  7. 初识Python(windows)——下载、安装、使用

    Table of Contents 1. Why is Python 1.1. Python和R 2. python的下载与安装 2.1. python的版本选择 2.2. python的下载 2.3 ...

  8. BZOJ 2502 Luogu P4843 清理雪道 最小流

    题意: 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞机 ...

  9. odoo权限配置讲解2

    今天我们在来讲解一下odoo中配合使用公司开发的权限配置模块,简单配置odoo权限的操作说明 接着上篇讲到的,昨天我们只是做了一个简单的表单模型的筛选规则 今天来讲解一下如何在创建内贸报价单的时候,在 ...

  10. 在项目中全局添加FastClick导致图片上传插件在ios端失效的解决方案

    ---恢复内容开始--- 项目是移动端的项目,为了解决300ms的click延迟,所以在全局中加入了FastClick,引入的方式很简单,网上一大堆教程,这里不做赘述 我们就谈,我遇到的问题: 某天产 ...