博文

目前显示的是 四月, 2018的博文

HBase追溯

图片
本文主要是介绍下HBase一些背景知识,希望通过这篇文章可以让大家对HBase的认识能有一个大致的轮廓。 在LSM之前,常用的有三种基本存储引擎,分别是 哈希 B树 LSM-Tree(Log-Structured Merge Tree) 哈希 哈希存储引擎是哈希表的持久化实现,支持增、删、改,以及随机读取操作,但不支持顺序扫描,对应的存储系统为键值(Key-Value)存储系统,如 Bitcask。它仅支持追加操作,删除也只是通过标识 value 为特殊值,通过定期合并(Compaction)实现垃圾回收。 B 树 B 树存储引擎是 B 树的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描,对应的存储系统是关系数据库。关系数据库中通过索引访问数据,在 Mysql InnoDB 中,有一个称为聚集索引的东西,行的数据存于其中,组织成 B+ 树的结构。更多B系树的内容可以参考 这里 。 重点是看LSM-Tree LSM-Tree 图片来源 lsm-tree论文 。LSM-Tree原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。内存中树的一部分和磁盘中第一层树做merge,对于磁盘中的树直接做update操作有可能会破坏物理block的连续性,但是实际应用中,一般lsm有多层,当磁盘中的小树合并成一个大树的时候,可以重新排好顺序,使得写入block连续,优化读性能。 HBase存储引擎采用LSM-Tree架构,大体原理图如下 当RegionServer(RS)收到写请求的时候(write request),RS会将请求转至相应的Region。每一个Region都存储着一些列(a set of rows),根据其列族的不同,将这些列数据存储在相应的列族中(Column Family,简写CF)。不同的CFs中的数据存储在各自的HStore中,HStore由一个Memstore及一系列StoreFile组成(StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile)。Memstore位于RS的主内存中,而HFiles被写入到HDFS中。当RS处理写请求的时候,数据首先写入到Me...

RSGroup

HBase RSGroup Git环境 window环境下,警用crlf自动转换 git config --global core.autocrlf false protobuf环境 yum install autoconfautomake libtool cmake gcc* -y yum install ncurses-devel -y yum install openssl-devel -y wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz tar -xzvf ./protobuf-2.5.0.tar.gz cd protobuf-2.5.0 ./configure make && make install protoc --version 对于Ubuntu系统需要修改profile文件 vim ~/.profile export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib source ~/.profile hbase-6721-v15-branch-1.1.patch新增GroupAdmin,Group两个protos,另外加上HBase.proto新增两个字段,重新编译然后替换HBaseProtos类 protoc HBase.proto --java_out=/home/chenxi/hbase/pb 或则使用maven命令 cd hbase-protocol mvn compile -Pcompile-protobuf 编译HBase tarball options: -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256M mvn -DskipTests clean install && mvn -DskipTests package assembly:single maven编译hbase-1.3.0源码时,默认采用-Dhadoop.profile=2.0,使用${hadoop-two.version}(2.5.1)版本,tarba...