Created
February 17, 2014 13:00
-
-
Save chenzx/9050096 to your computer and use it in GitHub Desktop.
HBase实战
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HBase实战 | |
跳转至: 导航、 搜索 | |
目录 | |
1 介绍、入门 | |
2 表设计 | |
3 协处理器 | |
4 其他的客户端(略) | |
5 OpenTSDB | |
6 HBase上查询GIS | |
7 部署 | |
8 运维 | |
介绍、入门 | |
[rowkey, column family, column qualifier] | |
cell:总是视为byte[] | |
KeyValue | |
映射的映射:Map<RowKey, Map<ColumnFamily, Map<ColumnQualifier, Map<Version, Data>>>> | |
Put/Get | |
WAL/HLog + MemStore | |
读缓存:BlockCache | |
Delete(仅仅标记) | |
合并(compaction) | |
时间版本:默认只存3个? | |
Scan(扫描/查询) | |
stopRow | |
ResultsScanner | |
setCaching(n) | |
Filter(服务器端过滤) | |
ValueFilter | |
ICV(incrementColumnValue) | |
Increment命令对象? | |
RegionServer | |
通常和DataNode配置为同一物理硬件 | |
2个特殊的表:-ROOT- .META. | |
使HBase作为MapReduce数据源 | |
[ImmutableBytesWritable rowkey:scan, Result] | |
TableInputFormat | |
map侧联结与reduce侧联结 | |
TableMapper/Reducer* | |
表设计 | |
p85 这里的“无模式”太扯淡了,等于应用代码需要考虑所有的细节 | |
把用户名字直接作为列限定符(HBase列族支持任意多的列) | |
“高表”:把"follower+followed"作为rowkey?太扯淡了 | |
由于拆成了多个行,Put只支持行级事务,放弃了原子性 | |
使用固定长度的Hash(follower)Hash(followed)散列键:更容易为扫描操作计算start/stop键 | |
HBase里只有键(rowkey、列限定符、时间戳)可以建立索引 | |
反规范化 | |
读热点问题:为每个用户建立单独的twit流(也就是说,用复制提高了可用性),md5(followed)+倒序ts作为rowkey | |
列族高级配置 | |
IN_MEMORY | |
BLOOMFILTER => 'ROWCOL':反向测试,要么“该行不在”,要么“不知道” | |
TTL | |
COMPRESSION => "SNAPPY" | |
VERSIONS => 3 | |
过滤数据 | |
FilterBase | |
filterRowKey(buffer, offset, length) | |
filterkeyValue | |
filterRow | |
filterAllRemaining ?(定制过滤器内部保存了状态,如一旦找到第一个匹配的即停止) | |
reset | |
预置过滤器 | |
RowFilter | |
PrefixFilter | |
QualifierFilter | |
ValueFilter | |
FilterList 组合多个过滤器 | |
协处理器 | |
把任意计算逻辑push到托管数据的HBase节点上? | |
observer | |
你可以把它想象成RDB里的trigger,或AOP里的advice | |
CoprocessorHost | |
0.92+ | |
RegionObserver | |
p126例 postPut | |
WALObserver | |
MasterObserver | |
endpoint | |
类似于RDB里的存储过程 | |
CoprocessorProtocol?扩展的RPC协议? | |
coprocessorExec | |
其他的客户端(略) | |
via HBase Shell | |
via JRuby | |
via asynchbase | |
via REST | |
via Thrift | |
OpenTSDB | |
时间序列数据库? | |
p182 精心设计的rowkey? | |
监控指标UID + 高序时间戳 + 标签1名UID + 标签1值UID ... | |
列限定符:低序时间戳 + 掩码(?) | |
3个任务: | |
数据采集 | |
每台监控主机上运行tcollector守护进程... | |
数据存储 | |
查询服务 | |
tsd构造范围扫描请求... | |
HBase上查询GIS | |
设计空间索引 | |
geohash | |
p209 其他技术:Z轴次序曲线、Hilbert曲线(要点:多维度输入单维度输出) | |
实现k-NN查询 | |
p211 queryKNN首先生成geohash,然后计算出需要扫描的9个前缀,然后合并结果 | |
?Google Guava库 MinMaxPriorityQueue | |
p213 根据查询设计扫描 | |
凸包、BoundingBox、。。。 | |
WithinFilter | |
部署 | |
Cloudera CDH* | |
HBase配置* | |
运维 | |
Ganglia:原生支持Hadoop | |
性能指标 | |
CPU IO Wait | |
写延迟:fsWriteLatency fsSyncLatency | |
YCSB |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment