Hbase基础
NoSQL
NoSQL:not only SQL,非关系型数据库 NoSQL是一个通用术语
指不遵循传统RDBMS模型的数据库 数据是非关系的,且不使用SQL作为主要查询语言 解决数据库的可伸缩性和可用性问题 不针对原子性或一致性问题
为什么使用NoSQL
NoSQL和关系型数据库对比
对比 NoSQL 关系型数据库 常用数据库 HBase、MongoDB、Redis Oracle、DB2、MySQL 存储格式 文档、键值对、图结构 表格式,行和列 存储规范 鼓励冗余 规范性,避免重复 存储扩展 横向扩展,分布式 纵向扩展(横向扩展有限) 查询方式 结构化查询语言SQL 非结构化查询 事务 不支持事务一致性 支持事务 性能 读写性能高 读写性能差 成本 简单易部署,开源,成本低 成本高
NoSQL的特点
最终一致性 应用程序增加了维护一致性和处理事务等职责 冗余数据存储 NoSQL != 大数据
NoSQL产品是为了帮助解决大数据存储问题 大数据不仅仅包含数据存储的问题
NoSQL基础概念
三大基石
Indexing(索引)、Query(查询) MapReduce Sharding
三大基石-1
CAP理论
数据库最多支持3个中的2个
Consistency(一致性) Availability(可用性) Partition Tolerance(分区容错性) NoSQL不保证“ACID” 提供“最终一致性”
三大基石-2
BASE
Basically Availble(基本可用)
Soft-state(软状态)
Eventual Consistency(最终一致性)
核心思想是即使无法做到强一致性,但应用可以选择适合的方式达到最终一致性
三大基石-3
最终一致性
最终结果保持一致性,而不是时时一致 如账户余额,库存量等数据需强一致性 如catalog等信息不需要强一致性
Causal consistency(因果一致性) Read-your-writes consistency Session consistency
假设有三个独立的Process A B C,
Causal consistency(因果一致性)
如果Process A通知Process B它已经更新了数据,那么Process B的后续读取操作则读取A写入的最新值,而与A没有因果关系的C则可以最终一致性。
Read-your-writes consistency
如果Process A写入了最新的值,那么Process A的后续操作都会读取到最新值。但是其它用户可能要过一会才可以看到。
Session consistency
此种一致性要求客户端和存储系统交互的整个会话阶段保证Read-your-writes consistency.Hibernate的session提供的一致性保证就属于此种一致性。
索引和查询
Indexing(索引)
大多数NoSQL是按key进行索引 部分NoSQL允许二级索引 HBase使用HDFS,append-only
Query(查询)
没有专门的查询语言,通常使用脚本语言查询 有些开始支持SQL查询 有些可以使用MapReduce代码查询
MapReduce、Sharding
MapReduce
不是Hadoop的MapReduce,概念相关 可进行数据的处理查询 Sharding(分片)
NoSQL分类
键值存储数据库 (key-value) Redis, MemcacheDB, Voldemort 内容缓存等 列存储数据库 (WIDE COLUMN STORE) Cassandra, HBase 应对分布式存储的海量数据 文档型数据库 (DOCUMENT STORE) CouchDB, MongoDB Web应用(可看做键值数据库的升级版) 图数据库 (GRAPH DB) Neo4J, InfoGrid, Infinite Graph 社交网络,推荐系统等,专注于构建关系图谱
键值存储数据库(Key-Value)
列存储数据库(Wide Column Store)
文档型数据库(Document Store)
图数据库(Graph Databases)
NoSQL和BI、大数据的关系
BI(Business Intelligence):商务智能
它是一套完整的解决方案 BI应用涉及模型,模型依赖于模式 BI主要支持标准SQL,对NoSQL支持弱于关系型数据库 NoSQL和大数据相关性较高
通常大数据场景采用列存储数据库 如:HBase和Hadoop
HBase概述
HBase是一个领先的NoSQL数据库
是一个面向列存储的数据库 是一个分布式hash map 基于Google Big Table论文 使用HDFS作为存储并利用其可靠性 HBase特点
数据访问速度快,响应时间约2-20毫秒 支持随机读写,每个节点20k~100k+ ops/s 可扩展性,可扩展到20,000+节点
HBase发展历史
时间 事件 2006年 Google发表了关于Big Table论文 2007年 第一个版本的HBase和Hadoop0.15.0一起发布 2008年 HBase成为Hadoop的子项目 2010年 HBase成为Apache顶级项目 2011年 Cloudera基于HBase0.90.1推出CDH3 2012年 HBase发布了0.94版本 2013-2014 HBase先后发布了0.96版本/0.98版本 2015-2016 HBase先后发布了1.0版本、1.1版本和1.2.4版本 2017年 HBase发布1.3版本 2018年 HBase先后发布了1.4版本和2.0版本
HBase用户群体
HBase应用场景-1
HBase应用场景-2
HBase应用场景-3
HBase应用场景示例
Facebook
9000 memcached instances,4000 shards mysql 2011全部迁移到HBase Alibaba
自2010年以来,HBase一直为阿里搜索系统的核心存储 当前规模
3 个集群,每个有1000+ nodes 在Yarn上与Flink共享 每天提供超过10M+ ops/s 的服务
Apache HBase生态圈
HBase生态圈技术
Lily – 基于HBase的CRM OpenTSDB – HBase面向时间序列数据管理 Kylin – HBase上的OLAP Phoenix – SQL操作HBase工具 Splice Machine – 基于HBase的OLTP Apache Tephra – HBase事务支持 TiDB – 分布式SQL DB Apache Omid - 优化事务管理 Yarn application timeline server v.2 迁移到HBase Hive metadata存储可以迁移到HBase Ambari Metrics Server将使用HBase做数据存储
HBase物理架构-概述
HBase物理架构 - HMaster
HMaster的作用
是HBase集群的主节点,可以配置多个,用来实现HA 管理和分配Region 负责RegionServer的负载均衡 发现失效的RegionServer并重新分配其上的Region
HBase物理架构 - RegionServer
HBase物理架构 - Region和Table
HBase逻辑架构 - Row
Rowkey(行键)是唯一的并已排序 Schema可以定义何时插入记录 每个Row都可以定义自己的列,即使其他Row不使用
使用唯一时间戳维护多个Row版本
HBase数据全部以字节存储
HBase数据管理
数据管理目录
系统目录表hbase:meta
HDFS目录中的文件 Servers上的region实例 HBase数据在HDFS上
可以通过HDFS进行修复File 修复路径
RegionServer->Table->Region-
Hbase架构特点
强一致性 自动扩展
当Region变大会自动分割 使用HDFS扩展数据并管理空间 写恢复
与Hadoop集成
HBase Shell
HBase Shell是一种操作HBase的交互模式
命令类别 命令 General version, status, whoami, help DDL alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list DML count, delete, deleteall, get, get_counter, incr, put, scan, truncate Tools assign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump Replication add_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication
hbase基本命令:
用户权限:
user_permission ['表名'...]
grant '用户名','RWXCA'
表:
增:create '表名',{NAME=>'列簇名'},{NAME=>'列簇名'}...
删:disable '表名'----> drop '表名'
改:snapshot '表名','镜像名'
clone_snapshot '镜像名','新表名'
delete_snapshot '镜像名'
查:list
行:
put的时候:put '表名','行键','列簇名:列','值'[,时间戳]
可以单独删除行,行内的数据全部删除
列簇:
增:alter '表名',NAME=>'列簇名'
删:alter '表名',NAME=>'列簇名',METHOD=>'delete'
改:先加,后删
查:get '表名','行键','列簇名'
列:
cell:值+时间戳
批量导入文件:
hbase org. apache. hadoop. hbase. mapreduce. ImportTsv - Dimporttsv. separator= "," - Dimporttsv. columns= "HBASE_ROW_KEY,emp:name,emp:job_title,emp:company,time:sDate,time:eDate" "emp_basic" / test/ emp_basic. csv