Contenu connexe Similaire à Ted yu:h base and hoya (20) Ted yu:h base and hoya4. Compactions 例子
• Memstore 填满时,文件被刷新
• 当积累足够的文件时,它们被压缩
writes
MemStore
HDFS
…
HFile HFile HFile
Architecting the Future of Big Data
HFile
HFile
7. Stripe compactions (HBASE-7667)
• 有点像LevelDB, 在每个region/store划分键
• 但是, 只有1级 (加上可选的L0)
• 相对于regions, 分区是更灵活的
–默认情况下是几个大小大致相等的stripes
• 要读取, 只是阅读有关的stripes加上L0, 如果存在
L0
HFile
HFile
get
'hbase'
HFile
HFile
HFile
HFile
H
Region start key: ccc
Architecting the Future of Big Data
© Hortonworks Inc. 2011
Row-key axis
eee
ggg
iii: region end key
8. Stripe compactions – 写入
• 数据从MEMSTORE刷新成几个文件
• 每一个stripe 大部分的时间分开Compact
MemStore
HFile
HFile
HFile
H
HDFS
H
Architecting the Future of Big Data
© Hortonworks Inc. 2011
HFile
HFile
H
HFile
H
9. Stripe compactions – 其他
• 为什么要 Level0?
–Bulk loaded 文件转至L0
–刷新也可以进入单个L0文件 (避免小文件)
–然后几个L0的文件,压缩成striped文件
• 如果压缩一个完整的stripe +L0, 可以去掉deletes
–无需major compactions, 永远
• 2个stripes一起Compact – 如果非平衡, 重新调整
–然而非常罕见 - 非平衡的stripes 不是一个大问题
• 边界可以被用来改善将来的区域分割
Architecting the Future of Big Data
© Hortonworks Inc. 2011
10. Stripe compactions - 性能
• EC2, c1.xlarge, preload; 然后测量随机读取性能
–LoadTestTool + deletes + overwrites;
Random gets per second
2000
1500
Default gets-per-second, 30sec. MA
Stripe gets-per-second, 30sec. MA
1000
500
0
2500
3500
4500
5500
Test time, sec.
Architecting the Future of Big Data
© Hortonworks Inc. 2011
6500
7500
8500
13. HBase on Yarn
• 在大的YARN集群中的小HBase集群
•
•
•
•
动态的HBase集群
弹性的HBase集群
面向工作流的短暂/间歇集群
更有效地利用/共享集群资源
14. HBase on Yarn
• Hoya 是一个YARN上的应用
• 完全 由CLI 驱动
• 所有组件都是YARN services
• 输入是集群说明, 以JSON文档格式持久化,放
在HDFS上
• HDFS和ZooKeeper 由多个集群实例共享
• 操作: create, freeze/thaw, flex, exists <群集名
字>
15. Hoya 结构
• HoyaClient: 解析命令行, 执行本地操作, 与
HoyaAppMaster通信
• HoyaAppMaster: AM 服务, 实现
AMRMClientAsync和NMClientAsync的回调
• HBaseProviderService: 在containers中部署和
执行master和region servers
17. Hoya Client 创建 App Master
YARN Resource Manager
YARN Node Manager
Hoya Client
Hoya AM
HDFS
HDFS
YARN Node Manager
YARN Node Manager
HDFS
HDFS
18. Hoya AM 用 YARN部署 HBase
YARN Resource Manager
YARN Node Manager
Hoya Client
Hoya AM
HDFS
HBase Master
HDFS
YARN Node Manager
YARN Node Manager
HBase Region Server
HBase Region Server
HDFS
HDFS
20. YARN 把故障通知给AM
YARN Resource Manager
YARN Node Manager
Hoya Client
Hoya AM
HDFS
HBase Master
HDFS
YARN Node Manager
YARN Node Manager
HBase Region Server
HBase Region Server
HBase Region Server
HDFS
HDFS
21. HOYA - 酷的功能
• 配置目录是缓存的,动态修补后推升到master和
region servers的本地资源
• HBase .tar文件存储在HDFS上 - 集群可以使用相同/不
同的HBase版本
• 集群伸缩和计划外容器损失的处理是相同的代码.
• region servers节点无Hoya代码
• RPC服务使用Protobuf -为其他语言客户打开服务
• 跟踪与持久化角色实例的位置信息 - 失败或解冻后,
把实例放置得接近数据
22. 集群规范: 持久化
{
"version" : "1.0",
"name" : "cl1",
"type" : "hbase",
"state" : 1,
"createTime" : 1377276630308,
"originConfigurationPath" :
"hdfs://ubuntu:9000/user/stevel/.hoya/cluster/cl1/original",
"generatedConfigurationPath" :
"hdfs://ubuntu:9000/user/stevel/.hoya/cluster/cl1/generated",
"zkHosts" : "localhost",
"zkPort" : 2181,
"zkPath" : "/yarnapps_hoya_stevel_cl1",
"hbaseDataPath" : "hdfs://ubuntu:9000/user/stevel/.hoya/cluster/cl1/hbase",
"imagePath" : "hdfs://ubuntu:9000/hbase.tar",
"options" : {
"hoya.test" : "true"
},
...
}
23. 角色规范
"roles" : {
"worker" : {
"yarn.memory" : "256",
"role.instances" : "5",
"role.name" : "worker",
"jvm.heapsize" : "256",
"yarn.vcores" : "1",
"app.infoport" : "0"
"env.MALLOC_ARENA_MAX": "4"
},
"master" : {
"yarn.memory" : "128",
"role.instances" : "2",
"role.name" : "master",
"jvm.heapsize" : "128",
"yarn.vcores" : "1",
"app.infoport" : "8585"
}
}
24. 伸缩/故障处理是相同的代码
boolean flexCluster(ClusterDescription updated) {
providerService.validateClusterSpec(updated);
appState.updateClusterSpec(updated);
return reviewRequestAndReleaseNodes();
}
void onContainersCompleted(List<ContainerStatus>
completed) {
for (ContainerStatus status : completed) {
appState.onCompletedNode(status);
}
reviewRequestAndReleaseNodes();
}
25. 保护YARN AM RPC接口
• 在一个安全的集群中的YARN应用程序, 会从
客户端获得委托令牌以和AM交谈
• 它还得到了令牌以便AM可以和RM交谈
• 进程会自动锁定任何你启动的RPC服务-所以
客户端必须向AM验证自己
26. 保护YARN AM RPC:代码
// set up secret manager
secretManager = new
ClientToAMTokenSecretManager(appAttemptID, null);
Server server = RpcBinder.createProtobufServer(
new InetSocketAddress("0.0.0.0", 0), getConfig(), secretManager,
NUM_RPC_HANDLERS, blockingService, null);
server.start();
RegisterApplicationMasterResponse response = asyncRMClient
.registerApplicationMaster(appMasterHostname,
appMasterRpcPort,
null);
if (UserGroupInformation.isSecurityEnabled()) {
secretManager.setMasterKey(
response.getClientToAMTokenMasterKey().array());
32. 建索引的语法
• CREATE INDEX <index_name>
ON <table_name>(<columns_to_index>…)
INCLUDE (<columns_to_cover>…);
34. 哈希Join例子
SELECT * FROM employee e JOIN department d
ON e.dept_id = d.dept_id
WHERE e.salary < 120 AND d.revenue > 100
35. 哈希Join例子
SELECT * FROM employee e JOIN department d
ON e.dept_id = d.dept_id
WHERE e.salary < 120 AND d.revenue > 100
37. 哈希Join例子
SELECT * FROM employee e JOIN department d
ON e.dept_id = d.dept_id
WHERE e.salary < 120 AND d.revenue > 100
38. 哈希Join例子
SELECT * FROM employee e
WHERE e.salary < 120
• 扫描员工表
• 协处理器利用内存map进行join(根据
e.dept_id = d.dept_id)
• 反回结果
• 清理缓存