Hase权威指南笔记

第一章

1.1 海量数据的黎明:

  1. RDBMS 结构化数据 传统关系型数据库 科德十二定律 [Codd's 12 rules]
  2. 满足新的工作负载提出的 列式存储[column-oriented] 大规模并行处理[Massively Parallel Processing , MPP]

1.2 关系数据库系统的问题:

   1. 分区[sharding] 重分区[reshard] 虚拟分区[virutal shard]

   2. 传统关系型数据库在业务发展中出现的 单库 读写分离 缓存 分库分表的业务扩展过程

1.3 非关系型数据库Not-Only-SQL

  1. NoSQL 是Eric Evans 针对Johan Oskarsson 提出的"为新兴的数据存储空间"命名
  2. 一致性模型
    1. 严格一致性: 数据变化是原子的
    2. 顺序一致性
    3. 因果一致性
    4. 最终一致性
    5. 弱一致性
  3. nosql 维度
    1. 存储模型
    2. 一致性模型
    3. 物理模型
    4. 读/写性能
    5. 辅助索引
    6. 故障处理
    7. 压缩
    8. 负载均衡
    9. 原子操作的读-修改-写
    10. 加锁 等待和死锁
  4. 可扩展性
  5. 数据库的范式化和反范式

1.4 Hbase结构

  1. SortedMap<RowKey,List<SortedMap<Column,List<Value,Timestamp>>>>

(Table,RowKey,Family,Column,Timestamp)->Value

  1. 自动分区
    1. HBase中扩展和负载均衡的基本单元为region
    2. 以行键排序的连续存储的区间
    3. region太大 系统会拆分 太小会合并
    4. region大小超过配置值的时候 中行键才分region
    5. 每一个region只能在一台服务器 一台服务器可以分多个region
    6. 每台服务器region的最佳加载数量10~1000 每个region的最佳大小是1GB~2GB
  2. 存储API
    1. API提供建表 删表 增加列族和删除列族的操作
    2. 提供修改表和列族元数据的功能[如 压缩 设置块大小]
    3. 对给定的行键值进行增加 删除 查找的功能
    4. 对单个行键下存储的原子读-修改-写[read-modify-write]序列
    5. 在服务器的地址空间中执行来自客户端的代码[协处理器 coprocessor] 用于实现轻量级批处理作业 使用表达式并基于各种操作来分析或汇总数据
  3. 实现
    1. 数据存储在存储文件(sore file) HFile 存储的是经过排序的键值映射结构
    2. HFile内部是由连续的块组成,块的索引信息存在文件的尾部
    3. 加载文件的时候,索引的信息将被优先加载到内存中
    4. 每个块的默认大小为64KB
    5. 存储文件提供一个设定起始和终止行键范围的API 用于扫描特定的值
    6. 存储文件通常保存在HDFS里
    7. 每次更新数据
      1. 优先记录 提交日志(commit log ,在Hbase叫write-ahead log,WAL) 奔溃时数据恢复
      2. 将数据写入内存中的memstore中,一旦内存保存的写入数据的累计大小超过阈值,将会刷入到HFile中
      3. 移出内存后,系统会丢弃对应的提交日志,只保留未持久化到磁盘的提交日志
      4. memstore 中的数据已经按照行键排序,持久化到硬盘中的时候用新的memstore获取更新数据,将旧的memstore转换成文件
    8. 因为存储文件时不可改变的,所有无法通过移出某个键/值对来简单地删除值 可行的解决方法是 做删除标记(delete marker 墓碑标记)
    9. 读回数据是文件和内存的数据合并的结果
    10. memsote不断写入磁盘会产生越来越多的HFile,Hbase会做[LSM树架构]
      1. minor合并(minor compaction) 多路归并 小文件合成大文件
      2. maja
      3. 压缩合并(majar compaction) 将一个region中一个列族的若干个HFile重写成为一个新的HFile 能合并扫描所有的键值对,顺序重写数据 忽略做删除标记的数据 对于那些超过版本号限制的数据以及生存时间到期的数据,在重写数据的时候就不再写入磁盘了
    11. HBse中有3个主要的组件:客户端 主服务器 region服务器
      1. 主服务器负责利用ZK为region服务器分配region,负载均衡将繁忙服务器的region移动到负载较轻的服务器上
      2. 主服务器不存储数据,只提供负载均衡和集群管理 元数据管理[建表 和建列族]
      3. region服务器提供region的读写,拆分超过配置大小的region接口。
      4. 客户端与region服务器通信,处理相关的操作
  4. HBase : Hadoop 数据库

第二章

2.1 快速启动指南

  1. 下载HBase
  2. 修改conf/hbase-site.xml
  3. 添加 <configuration><property><name>hbase.rootdir</name><value>file://path/hbase</value></property></config
  4. /bin/start-hbase.sh
  5. /bin/hbase shell
  6. create 'testtable','colfam1'
  7. list 'testtable'
  8. put 'testtable','myrow-1','colfam1:q1','value-1'
  9. scan 'testtable'
  10. get 'testtable','myrow-1'
  11. delete 'testtable','myrow-2','colfam1:q2'
  12. scan 'testtable'
  13. disable 'testtable'
  14. drop 'testtable'
  15. exit
  16. bin/stop-hbase.sh

2.2 必备条件[商用]

  1. java运行时环境
  2. 64位操作系统
  3. 大于4G的内存空间
  4. HDFS环境
  5. CPU master,slave 双四核CPU 2.GHz - 2.5GHz
  6. 拥有800TB存储空间的集群中每个java进程的典型内存配置
    1. NameNode 8GB [每100T的数据或者每100万个文件大约会占用NameNode堆1GB的内存]
    2. SecondaryNameNode 8GB [在内存中重做NameNode的EditLog 因此配置需要和NameNode一样]
    3. JobTracker 2GB [适度]
    4. HbaseMaster 4GB[轻量级负载 适度]
    5. DataNode 1GB [适度]
    6. TaskTracker 1GB[适度]
    7. Hbase RegionServer 12GB [大部分可用内存,同时为操作系统(缓冲区缓存)和任务进程留下足够的空间]
    8. Task Ateempts 1GB [剩余内存除以允许的任务最大单机进程数]
    9. Zookeeper 1GB[适度
  7. master 24GB [运行NameNode SecondaryNameNode JobTracker HbaseMaster]
  8. Slave 24GB(及以上) [DataNode TaskTracker HbaseRegionServer]

猜你喜欢

转载自blog.csdn.net/qq_21078159/article/details/105569013