大数据学习(13)—— HBase入门
从这一篇起,开始介绍HBase相关知识。还是一样,大数据的学习,获取官网知识很重要。官网看这里Apache HBase
HBase简介
Apache HBase is the Hadoop database, a distributed, scalable, big data store.
Use Apache HBase when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.
上面是官网的介绍。从介绍里可以看出,HBase是Apache的顶级项目,可以称为Hadoop的数据库,是一个分布式、可扩展的大数据存储。
HBase跟传统关系型数据库的定位非常不同,它能存储包含十亿级别的行和百万级别的列的表,就算性能强如oracle,在这个规模面前也要歇菜。HBase的理论基础是google的论文Bigtable,这是奠定大数据基础的三篇google论文之一。
泼一盆冷水
准确地讲,HBase更像是一个数据存储,而不是数据库,因为它缺少很多传统关系型数据库的特征。当然,它也不适用于解决所有问题。如果想使用HBase,那么得满足下面几个条件:
- 首先,你要有足够大的数据量。十亿往上走的数据量,比较适合使用HBase。要是只有几百万条记录,那不如用传统关系型数据库,因为这点数据量太小了,只会使用到HBase集群的一个节点,其他节点都是闲置。
- 其次,确保你的代码不需要使用传统关系型数据库提供的任何特性依然可以运行。基于关系型数据库开发的应用不可能仅仅替换一下驱动,就能移植到HBase里,这得重新设计。
- 最后,你还得有足够的服务器。即便是HBase用来存储数据的HDFS,它需要的三副本和NameNode至少要占用5台服务器,更不用说HBase还有自己的组件需要部署了。
虽然HBase在笔记本电脑上也能运行,但那只能作为开发环境,生产环境就不要想了。
HBase架构
不废话,先上图。
从图片里可以看到虚线以上是HBase的组件和角色,虚线以下是HDFS。再看看官网里关于架构描述的目录Architecture
我把几种主要的角色具体做啥事介绍一下。
Zookeeper
一般来说,zookeeper起到高可用选主的作用,但是在HBase架构里,它还负责存储元数据,官方原话——hbase:meta
is stored in ZooKeeper。
Client
HBase客户端首先去查询zookeeper中的元数据信息,找到存储所需数据的Region。这里先要明确一些概念,Region相当于关系型数据库中的表,Store相当于列族(列族是HBase管理的最小单元,包含多个相关的列)。
定位到需要的Region后,Client直接连接到对应的RegionServer而不是通过Master来完成读写请求。这些信息会缓存到客户端,随后的请求就不会再有查找的过程了。但是当RegionServer宕机或者是Master根据负载均衡策略来调整region的时候,客户端需要重新通过元数据来决定访问哪个region。
Master
HMaster是Master Server的实现,真的,你启动Master的时候,用jps查看进程,进程名就是HMaster。Master负责监控集群中所有的ReginServer实例,它为元数据变化提供操作接口。在一个分布式集群中,Master往往运行在NameNode节点上。
RegionServer
HRegionServer是RegionServer的实现,不信你用jps看看。它负责管理和服务regions。在一个分布式集群中,RegionServer运行在DataNode节点上。
Regions
Regions存储表的数据,一张表的数据可以分散在多个region中。每个region包含多个用来存储列族的Store。它的结构树长这样:
Table (HBase table)
Region (Regions for the table)
Store (Store per ColumnFamily for each Region for the table)
MemStore (MemStore for each Store for each Region for the table)
StoreFile (StoreFiles for each Store for each Region for the table)
Block (Blocks within a StoreFile within a Store for each Region for the table)
HBase数据模型
HBase的数据存储在表里,它也有行和列。这个说法是参照关系型数据库的结构来讲的,这不是一个合适的类比。但这个说法有助于理解HBase是一个多维表格。
Table
HBase的表包含多条记录。
Row
HBase的一行记录包含行键、列名以及与之相关的值。每行记录按照行键的字典序排序。正因为如此,行键的设计就非常重要。设计行键的时候,要尽量保证相关的记录它们的行键近似,这样查询的时候可以利用范围查询。通常的行键模式,使用网站的域名,域名的几个单词要倒着排,这样的好处是,不同的域名不会排在一起。
Column
HBase中的列包含列族和列名,中间用冒号分割。我用中文举个例子,像这样,个人信息:学历,个人信息:姓名。这个例子里,个人信息是列族,学历、姓名、性别、专业这些相关的字段是列名。
Column Family
列族把一系列的字段和值组合起来,这个做法基于性能原因的考虑。每个列族都有一些存储属性,比方说字段的值要不要放在缓存里、数据如何压缩、行键怎么编码等等。每行记录都包含相同的列族,尽管有些列族里啥也没存。
Column Qualifier
列的修饰符,我们可以称之为列名,它是列族之下的具体索引,用来获取某个特定的值。列名和列族之间用冒号分割。列族是在定义表的时候就确定下来了,但是每条记录的列名可变,甚至非常不同。
cells
它是存储数据的最小单位。在HBase中,唯一确定一个单元格,需要行键+时间戳+列族+列名,它里面存放的是无格式的字节数组,如下图。
这个时间戳有4个值,以关系型数据库的观点来看,它有4条记录。但在HBase中,它实际上是一条记录,是同一个行键不同版本的值。
Timestamp
在写入一个值的时候,同时会写入一个时间戳,它是区分同一个版本数据的标识。默认情况下,时间戳反映了写数据时RegionServer的时刻,你也可以指定一个不同值的时间戳。
大数据学习(13)—— HBase入门的更多相关文章
- 大数据学习笔记——HBase使用bulkload导入数据
HBase使用bulkload批量导入数据 HBase可使用put命令向一张已经建好了的表中插入数据,然而,当遇到数据量非常大的情况,一条一条的进行插入效率将会大大降低,因此本篇博客将会整理提高批量导 ...
- 《OD大数据实战》HBase入门实战
官方参考文档:http://abloz.com/hbase/book.html#shell_tricks 1.2.3. Shell 练习 用shell连接你的HBase $ ./bin/hbase s ...
- 大数据学习笔记——Hbase高可用+完全分布式完整部署教程
Hbase高可用+完全分布式完整部署教程 本篇博客承接上一篇sqoop的部署教程,将会详细介绍完全分布式并且是高可用模式下的Hbase的部署流程,废话不多说,我们直接开始! 1. 安装准备 部署Hba ...
- 大数据学习(16)—— HBase环境搭建和基本操作
部署规划 HBase全称叫Hadoop Database,它的数据存储在HDFS上.我们的实验环境依然基于上个主题Hive的配置,参考大数据学习(11)-- Hive元数据服务模式搭建. 在此基础上, ...
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试
前言 在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为h ...
- 大数据学习系列之—HBASE
hadoop生态系统 zookeeper负责协调 hbase必须依赖zookeeper flume 日志工具 sqoop 负责 hdfs dbms 数据转换 数据到关系型数据库转换 大数据学习群119 ...
- 大数据学习之Hadoop快速入门
1.Hadoop生态概况 Hadoop是一个由Apache基金会所开发的分布式系统集成架构,用户可以在不了解分布式底层细节情况下,开发分布式程序,充分利用集群的威力来进行高速运算与存储,具有可靠.高效 ...
随机推荐
- C#中怎样使控件随着窗体一起变化大小
此文原作者为CSDN的 zhouwen5288,原文链接 http://blog.csdn.net/zhouwen5288/article/details/6493835 本人仅作为随笔备忘,转载请 ...
- 关于Mysql事务,你必须知道的几个知识点!
Transaction事务 上期我们讲到了jpa的常用操作,查询.更新.删除等,但是如果在操作数据库事务时发生异常,数据会回滚吗?下面我们来看个例子 UserController新增如下代码: @Ge ...
- Linux 之 deb 包生成、安装、卸载
Linux 之 deb 包的生成.安装和卸载 deb DEB 是 Debian 软件包格式的文件扩展名,是 Unixar 的标准归档,将包文件信息以及包内容,经过 gzip 和 tar 打包而成. d ...
- AD设计中地铜突然消失且无法选中删除的解决办法
作者:struct_mooc 博客地址: https://www.cnblogs.com/structmooc/p/14984466.html 前几天在设计一块电路板的时候,已经全部设计完了!但是 ...
- 【spring源码系列】之【Bean的属性赋值】
每次进入源码的世界,就像完成一场奇妙的旅行! 1. 属性赋值概述 上一篇讲述了bean实例化中的创建实例过程,实例化后就需要对类中的属性进行依赖注入操作,本篇将重点分析属性赋值相关流程.其中属性赋值, ...
- 超详细的原生JavaScript轮播图(幻灯片)的制作
本次轮播图的制作主要分为3个部分,分别是:设置定时器自动轮播:点击左右切换按钮轮播:下方点击按钮轮播.具体实现步骤如下: (效果图) html部分代码如下: <div class="s ...
- PHP 跨域问题 (转)
通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用aj ...
- Parrot os 安装vmtools
1.更新源(这步个人觉得官方源还可以,没网上说的那么慢) vim /etc/apt/sources.list.d/parrot.list linux命令 ,按i进入修改模式,修改结束,之后先按esc, ...
- 『动善时』JMeter基础 — 55、JMeter非GUI模式运行
目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.怎样使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模 ...
- 家庭账本开发day10
系统的增删改查基本功能完成,进行业务流程完整测试.完善相关功能,编写搜索 功能,通过日期,类型等关键字进行搜索,对搜索到的数据表格完成重载 // 监听搜索操作 form.on('subm ...