Hbase ——Not only SQL
HBase —— NoSQL_Not Only SQL
NoSQL数据库:
- 不遵循传统的RDBMS模型
- 解决数据库的可伸缩性和可用性(多机器)
- 数据是非关系的(可切分),不使用sql语句
- 不针对原子性或一致性(定时同步数据)问题
——————————————————————————————
传统关系型数据库存在瓶颈
- 高并发读写,每秒上万次读写请求
- 高存储量,分库分表难以维护
- 高扩展性,无法简单地通过增加硬件提升性能
- 高可用性,不能保证服务长时间运行时的稳定性
NoSQL的优势
- 优异的海量数据读写性能
- 灵活的数据模型
- 数据间无关系,易于切割、扩展
SQL与NOSQL对比
对比 | NoSQL | 关系型数据库 |
---|---|---|
常用数据库 | HBase、MongoDB、Redis | Oracle、DB2、MySQL |
存储格式 | 文档、键值对、图结构 | 表格式,行和列 |
存储规范 | 鼓励冗余 | 规范性,避免重复 |
存储扩展 | 横向扩展,分布式 | 纵向扩展(横向扩展有限) |
查询方式 | 非结构化查询 | 结构化查询语言SQL |
事务 | 不支持事务一致性 | 支持事务 |
性能 | 读写性能高 | 读写性能差 |
成本 | 简单易部署,开源,成本低 | 成本高 |
NoSQL的特点
- 最终一致性,数据并非实时一致,但最终会一致
- 应用程序可以增加一致性
- 鼓励冗余数据存储
NoSQL 不等于 大数据
- nosql是为了帮助解决大数据的数据存储问题
- 但大数据不仅仅包含数据的存储问题(存储、分析)
NoSQL基本概念
一、三大基石
1、CAP理论
分布式系统最多支持3个中的两个(AC、AP、CP)
- Consistency 一致性
- Availability 可用性
- Partition Tolerance 分区容错性
NoSQL 不保证ACID,提供最终一致性(HBase是强一致性的,支持CP,因为其基于HDFS的,分区多副本)
2、BASE
Basically Availble 基本可用
- 允许部分失效, 但保证核心可用
Soft-state 软状态
- 状态可以有一段时间不同步
Eventual Consistency 最终一致性
- 系统经过一定时间后,数据最终能达到一致的状态
3、最终一致性
- 最终一致性是弱一致性的特列,系统会保证在一定时间内,能达到一个数据一致的状态,而不是时时一致
- Hbase是强一致性数据库,不是最终一致性。因为HBase基于HDFS存储系统的,而HDFS是实时备份的,备份完成后才返回操作结果,因此Hbase是强一致性的。
二、索引和查询
1、Indexing(索引)
大多数NoSQL是按key进行索引
部分NoSQL允许二级索引
HBase使用HDFS,append-only(读写很快)
- 批处理写入Logged
- 重新创建并排序文件
2、Query(查询)
- 没有专门的查询语言,通常使用脚本语言查询
- 有些开始支持SQL查询
- 有些可以使用MapReduce代码查询
三、MapReduce、Sharding
1、MapReduce 概念相关,map预处理映射,reduce分析/聚合(并非hadoop的mr)
2、sharding 分片 ,一种分区模式,可以复制分片
NoSQL分类
分类 | 举例 | 典型应用场景 |
---|---|---|
键值存储数据库 (key-value) | Redis, MemcacheDB, Voldemort | 内容缓存等(减少检索数据库的次数) |
列存储数据库 (WIDE COLUMN STORE) | Cassandra, HBase | 应对分布式存储的海量数据 |
文档型数据库 (DOCUMENT STORE) | CouchDB, MongoDB | Web应用(可看做键值数据库的升级版) |
图数据库 (GRAPH DB) | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等,专注于构建关系图谱 |
- 通常大数据场景采用列存储数据库
HBase概述
1)hbase是一个分布式的,基于列式存储的数据库,基于hadoop的hdfs存储,zookeeper进行管理。
2)hbase 适合存储半结构化或非结构化的数据,对于数据结构字段不够确定或者杂乱无章很难按照一个概念去抽取的数据。
HBase是一个领先的NoSQL数据库
- 是一个面向列存储的数据库
- 是一个分布式hash map
- 基于Google Big Table论文
- 使用HDFS作为存储并利用其可靠性
HBase特点
- 数据访问速度快,响应时间约2-20毫秒
- 支持随机读写(实质是切片再append),每个节点20k~100k+ ops/s
- 可扩展性,可扩展到20,000+节点
HBase物理架构
1、HBase采用Master/Slaves架构
- HMaster
- RegionServer (salve,部署在datanode上)
- Zookeeper (监管集群)
- HBase Client(java、shell、rest thrift)
- Region (分区)
2、HMaster的作用
- 维护Table和Region的原数据信息
- 管理Region和为 RegionServer 分配Region
- 负责RegionServer的负载均衡
- 发现失效的RegionServer并重新分配其上的Region
- 处理 Schema 更新请求(表的创建,删除,修改,列簇的增加等等)
- 是HBase集群的主节点,可以配置多个,用来实现high available 高可用
3、RegionServer负责管理维护Region
一个RegionServer包含一个WAL(数据操作日志)、一个BlockCache (读缓存)和多个Region
一个Region包含多个Store存储区,每个存储区对应一个列族
一个存储区由多个StoreFile和MemStore(写缓存,128M,一个Block)组成
一个StoreFile对应于一个HFile和一个列族
负责 Split 在运行过程中变得过大的 Region,负责 Compact 操作
WAL(write ahead log),在数据写入之前将操作写入日志,在灾难后可以最大程度恢复数据
HFile和WAL作为序列文件保存在HDFS上
Client与RegionServer交互
- 流程:clinet -> zookeeper . get meta 的region server->meta .get 要查询的rowkey对应region所在的regionserver地址 ->链接region server,查询
4、Region和Table
- 单表大小最大256M,之后会单个Table(表)被分区成大小大致相同的新Region
- Region是HBase集群分布数据的最小单位,但不是最小的数据存储单元,其下还有Store和HFile,HBase的数据存储是以HFile组织的
- Region由集群中的RegionServer维护,一个RS通常维护多个Region
- 但一个Region只能分配给一个RegionServer
5、Clinet 客户端
- 缓存机制,每次读写会记录地址信息
- 缓存地址信息错误多次后会重新访问ZK服务获取新的地址
HBase逻辑架构--ROW
- Rowkey(行键)是唯一的并按字典排序
- 每个Row都可以定义自己的列,即使其他Row不使用,一定范围具有联系的列的总和为列族
- 使用唯一时间戳维护多个Row版本
- 在不同版本中值类型可以不同
- HBase数据全部以字节存储
- 行键、列族、列键、时间戳、ceil值
- HBase只需要定义列族
HBase 架构特点
强一致性
自动扩展
当Region变大会自动分割
使用HDFS扩展数据并管理空间
写恢复
- 使用WAL(Write Ahead Log)
与Hadoop集成
Hbase ——Not only SQL的更多相关文章
- Phoenix——实现向HBase发送标准SQL语句
写在前面一: 本文总结基于HBase的SQL查询系统--Salesforce phoenix 写在前面二: 环境说明: 一.什么是Phoenix 摘自官网: Phoenix是一个提供hbase的sql ...
- 在HBase之上构建SQL引擎
- Phoenix(sql on hbase)简单介绍
Phoenix(sql on hbase)简单介绍 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC d ...
- 使用Phoenix将SQL代码移植至HBase
1.前言 HBase是云计算环境下最重要的NOSQL数据库,提供了基于Hadoop的数据存储.索引.查询,其最大的优点就是可以通过硬件的扩展从而几乎无限的扩展其存储和检索能力.但是HBase与传统的基 ...
- Phoenix(SQL On HBase)安装和使用报告
一.为什么使用Phoenix二.安装Phoenix2.1 兼容问题?2.2 编译CDH版本的Phoenix2.3 安装Phoenix到CDH环境中三.Phoenix的使用3.1 phoenix的4种调 ...
- HBase 学习之路(十)—— HBase的SQL中间层 Phoenix
一.Phoenix简介 Phoenix是HBase的开源SQL中间层,它允许你使用标准JDBC的方式来操作HBase上的数据.在Phoenix之前,如果你要访问HBase,只能调用它的Java API ...
- HBase 系列(十)—— HBase 的 SQL 中间层 Phoenix
一.Phoenix简介 Phoenix 是 HBase 的开源 SQL 中间层,它允许你使用标准 JDBC 的方式来操作 HBase 上的数据.在 Phoenix 之前,如果你要访问 HBase,只能 ...
- 入门大数据---Hbase的SQL中间层_Phoenix
一.Phoenix简介 Phoenix 是 HBase 的开源 SQL 中间层,它允许你使用标准 JDBC 的方式来操作 HBase 上的数据.在 Phoenix 之前,如果你要访问 HBase,只能 ...
- 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟
使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...
随机推荐
- OpenStack (horizon Web管理界面)
horizon 简介 Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 , 管理员可以使用通过 WE ...
- WPF 之 MultiBinding(多路 Binding)(四)
一.前言 有时候 UI 需要显示的信息由不止一个数据来源决定,这时候就需要使用 MultiBinding ,即多路 Binding. MultiBinding 与 Binding 一样均以 B ...
- 【poj 2478】Farey Sequence(数论--欧拉函数 找规律求前缀和)
题意:定义 Fn 序列表示一串 <1 的分数,分数为最简分数,且分母 ≤n .问该序列的个数.(2≤N≤10^6) 解法:先暴力找规律(代码见屏蔽处),发现 Fn 序列的个数就是 Φ(1)~Φ( ...
- Discrete Centrifugal Jumps CodeForces - 1407D 单调栈+dp
题意: 给你n个数hi,你刚开始在第1个数的位置,你需要跳到第n个数的位置. 1.对于i.j(i<j) 如果满足 max(hi+1,-,hj−1)<min(hi,hj) max(hi,hj ...
- Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes (思维,字符串)
题意:给你某个字符串的\(n-1\)个前缀和\(n-1\)个后缀,保证每个所给的前缀后缀长度从\([1,n-1]\)都有,问你所给的子串是前缀还是后缀. 题解:这题最关键的是那两个长度为\(n-1\) ...
- 如何自己绘制fcitx4输入法皮肤?
先来给大家看看我自己修改后的结果 当然你可以自己设计,自己定义喜欢的颜色和样式 但是注意,这个教程仅仅针对使用fcitx皮肤面板的输入法,例如rime.sunpinyin等. 搜狗输入法.讯飞输入法. ...
- 爬虫入门二 beautifulsoup
title: 爬虫入门二 beautifulsoup date: 2020-03-12 14:43:00 categories: python tags: crawler 使用beautifulsou ...
- TCP之“3次握手,4次挥手”问题
你知道"3次握手,4次挥手"吗? 当面试官问你什么是"3次握手,4次挥手",你是不是要开启"诵经"模式了?作为程序员,要有"刨根问 ...
- 2021-2-18:请你说说MySQL的字符集与排序规则对开发有哪些影响?
任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集).这些字符如何排序呢?决定字符排序的规则就是排序规则. 查 ...
- HHVM的全称是"HipHop for PHP",开放源代码。采用PHP许可证授权!
http://hhvm.com/ https://github.com/xgqfrms/hhvm 什么是HHVM高性能服务器? HHVM是由Facebook公司出品的高性能开源服务器,用来执行hack ...