hbase学习笔记1

上一篇 / 下一篇  2012-01-28 19:28:26 / 个人分类:分布式技术学习

hbase并不是适合所有场景:1.足够多的数据:hundreds of milllions or billions of rows,hbase是一个很好的选择,如果只是很少的数据RDBMS是更好的选择。
2.可以不使用传统关系型数据库的提供的高级sql,二级索引等功能。
3.有足够的硬件,因为hbase是建立在hdfs之上的,hdfs尚且不能很好的做事情如果少于5个datanode。
catalog tables:-ROOT- .META. 也是以hbase tables的形式存在,尽管hbase shell 的list命令并不会将这两个表列出。
-ROOT- :保存.META.的region信息,只有一个region。结构:KEY:.META. region key(.META.,,1)
VALUES:info:regioninfo 序列化了.META.的hregioninfo 实例。
             info:服务,regionserver hold .META. port。
              regionserver 进程holding .META. 的开始时间。
META.:保存系统中所有regions的信息。
key:[table],[region start key],[region id]
value:info:regionif
           info:server 包含这个region的 regionserver port
           info: 同-ROOT-
 基本是和-ROOT-保存的信息类似。
hregioninfo中empty key 被用来用来代表table的开始与结束。region with an empty start key  是这个表的第一个region。如果既有empty start key又有empty end key则表示,这个region是table的唯一个region。  
put 被发送给regionserver 当writebuffer 被填满的时候。在htable实例被废弃之前一定要保证close() 或flushcommits 被唤醒,否则puts会丢失。      
htable.delete不走writebuffer。这个只应用于put。
rowlocks 仍然存在于client的api中尽管被抛弃了,因为控制不好则会锁住regionserver。
如果hbase运行在多master的环境中,所有的master竞争run the cluster。如果活跃的master失去与zookeeper的通讯或者down掉了,则剩余的master将结果master的角色。
数据块的缓存采用的是LRU cache。
计算有多少内存给hbase用来caching的合适大小的公式:region server的个数*heap size* hfile.block.cache.size*0.85.
0.85代表默认的可以接受的loading factor在LRU缓存。
除了你的数据还有一些必须的东西也要纳入缓存的计算中:.META. -ROOT-,Hfile index,keys(rowkey,family,timestamp),boom filters like hfile index 
两种使用没必要使用block caching的情景:1,fully random reading pattern。短时间内几乎不会访问同样的key两次,cache的hit基本为0,在这种表上设置cache基本是在浪费。2.mapping a  table :在典型的mapreduce job 中,以table为map 的input,每行都会读。
write ahead log(WAL):每个regionserver 都是先添加更新(puts,delete)到WAL。然后是Memstore。这样可以保证hbase的持久化写。如果没有WAL,当regionserver down掉并且Memstore还没被flush,新的StoreFile还没写完,那么就会导致数据丢失。WAL 在 HDFS 的 /hbase/.logs/ 中, 每个region 一个。
region怎么被分到regionserver:1.master 唤醒assignmentmanager 。
2.assignmentmanger 查看.META.中存在的region assignment。
3.如果region assignment  依然有效或者说regionserver 在线,则分配被保持。
4.如果无效则负载均衡工厂将被唤醒来分配region。默认的负载均衡将会随机分配region 给regionserver。
5.MATA将被regionserver的分配更新,并且regionserver start codes 当region 被regionserver打开时。
当一个regionserver 失败,region 马上变成不可用,因为regionserver 挂掉了。
master 将发觉regionserver 挂掉了。
region 分配将被认为有效,并且将进行重新分配类似开始的步骤。
region split:region的split master不参加。regionserver splits 一个region的时候先下线要被split的region,然后向META中添加字regions,在父hosting regionserver并打开子region并向master报告split。
一个store 主持一个memstore 和0或多个storefiles(hfiles)。一个store相当于一个table的一个region的一个列族。
memstore:控制内存中的store的更改。更改是keyvalue。当需要flush的时候,当前的memstore被移动到快照并且清除。
storefile是data的地方。${HBASE_HOME}/bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -v -f 文件名。这个命令可以帮助查看hfile。
key-value:The KeyValue format inside a byte array is:
  • keylength
  • valuelength
  • key
  • value

The Key is further decomposed as:

  • rowlength
  • row (i.e., the rowkey)
  • columnfamilylength
  • columnfamily
  • columnqualifier
  • timestamp
  • keytype (e.g., Put, Delete, DeleteColumn, DeleteFamily)
参考:http://hbase.apache.org/book/book.html

TAG:

 

评分:0

我来说两句

Open Toolbar