Ted yu:h base and hoya

39
Stripe Compaction, Hoya and Phoenix Ted Yu ([email protected])

description

BDTC 2013 Beijing China

Transcript of Ted yu:h base and hoya

Page 1: Ted yu:h base and hoya

Stripe Compaction, Hoya and Phoenix

Ted Yu

([email protected])

Page 2: Ted yu:h base and hoya

我的简介

• 致力于HBase工作3年

• 2011年6月成为HBase代码提交者和PMC成员

Page 3: Ted yu:h base and hoya

概要

• Stripe compaction

• Hoya

• Q & A

Page 4: Ted yu:h base and hoya

Compactions 例子

Architecting the Future of Big Data

•Memstore 填满时,文件被刷新

•当积累足够的文件时,它们被压缩

MemStore

HDFS

writes

HFile

HFile HFile HFile HFile

Page 5: Ted yu:h base and hoya

但是, compaction 导致速度变慢

看起来很多I/ O但没有明显的好处 对读操作的效果示例

0

5

10

15

20

25

0 3600 7200 10800

Re

ad la

ten

cy, m

s

Load test time, sec

Page 6: Ted yu:h base and hoya

© Hortonworks Inc. 2011

改进 compactions的关键方法

•从较少的文件读取

–行键,版本,时间等的独立的文件

–允许大量的uncompacted文件存在

•不压缩你不需要压缩的数据

–例如,在类似OpenTSDB的系统中旧的数据

–显然,导致更少的I/ O

•使 compactions 较小

–没有太多的I / O放大,或太多的文件

–结果:较少的compactions相关的故障

•HBase 与少数大的区域工作更好; 但是,大的compactions

导致系统无法使用

Page 7: Ted yu:h base and hoya

© Hortonworks Inc. 2011

Stripe compactions (HBASE-7667)

Architecting the Future of Big Data

•有点像LevelDB, 在每个region/store划分键

•但是, 只有1级 (加上可选的L0)

•相对于regions, 分区是更灵活的

–默认情况下是几个大小大致相等的stripes

•要读取, 只是阅读有关的stripes加上L0, 如果存在

HFile HFile

Region start key: ccc

eee

Row-key axis

iii: region end key ggg

H

HFile HFile HFile

HFile L0

get 'hbase'

Page 8: Ted yu:h base and hoya

© Hortonworks Inc. 2011

Stripe compactions – 写入

Architecting the Future of Big Data

•数据从MEMSTORE刷新成几个文件

•每一个stripe 大部分的时间分开Compact

MemStore

HDFS

HFile HFile

H

HFile HFile HFile

H

H

H

HFile

Page 9: Ted yu:h base and hoya

© Hortonworks Inc. 2011

Stripe compactions – 其他

Architecting the Future of Big Data

•为什么要 Level0?

–Bulk loaded 文件转至L0

–刷新也可以进入单个L0文件 (避免小文件)

–然后几个L0的文件,压缩成striped文件

•如果压缩一个完整的stripe +L0, 可以去掉deletes

–无需major compactions, 永远

•2个stripes一起Compact – 如果非平衡, 重新调整

–然而非常罕见 - 非平衡的stripes 不是一个大问题

•边界可以被用来改善将来的区域分割

Page 10: Ted yu:h base and hoya

© Hortonworks Inc. 2011

Stripe compactions - 性能

Architecting the Future of Big Data

•EC2, c1.xlarge, preload; 然后测量随机读取性能

–LoadTestTool + deletes + overwrites;

0

500

1000

1500

2000

2500 3500 4500 5500 6500 7500 8500

Ran

do

m g

ets

pe

r se

con

d

Test time, sec.

Default gets-per-second, 30sec. MA

Stripe gets-per-second, 30sec. MA

Page 11: Ted yu:h base and hoya

© Hortonworks Inc. 2011

直接刷新到stripes

•刷新能写入多个文件, 避免L0所造成的I/ O放大

•冲突的文件: 保持 stripes 的现有文件; 新文件放入L0

Page 12: Ted yu:h base and hoya

© Hortonworks Inc. 2011

YARN: 把Hadoop带到批处理之外

Page 13: Ted yu:h base and hoya

HBase on Yarn

• 在大的YARN集群中的小HBase集群

• 动态的HBase集群

• 弹性的HBase集群

• 面向工作流的短暂/间歇集群

• 更有效地利用/共享集群资源

Page 14: Ted yu:h base and hoya

HBase on Yarn

• Hoya 是一个YARN上的应用

• 完全 由CLI 驱动 • 所有组件都是YARN services

• 输入是集群说明, 以JSON文档格式持久化,放在HDFS上

• HDFS和ZooKeeper 由多个集群实例共享

• 操作: create, freeze/thaw, flex, exists <群集名字>

Page 15: Ted yu:h base and hoya

Hoya 结构

• HoyaClient: 解析命令行, 执行本地操作, 与HoyaAppMaster通信

• HoyaAppMaster: AM 服务, 实现AMRMClientAsync和NMClientAsync的回调

• HBaseProviderService: 在containers中部署和执行master和region servers

Page 16: Ted yu:h base and hoya

YARN管理集群

HDFS

YARN Node Manager

HDFS

YARN Node Manager

HDFS

YARN Resource Manager

HDFS

YARN Node Manager

• 服务器运行YARN节点管理器

• NM向资源管理器发送心跳

• RM在群集中调度工作

• RM分配容器给应用程序

• NMs 启动容器

• NMs 报告容器健康

Page 17: Ted yu:h base and hoya

Hoya Client 创建 App Master

HDFS

YARN Node Manager

HDFS

YARN Node Manager

HDFS

YARN Resource Manager

HDFS

YARN Node Manager

Hoya Client Hoya AM

Page 18: Ted yu:h base and hoya

Hoya AM 用 YARN部署 HBase

HDFS

YARN Node Manager

HDFS

YARN Node Manager

HDFS

YARN Resource Manager

Hoya Client

HDFS

YARN Node Manager

Hoya AM

HBase Region Server

HBase Region Server

HBase Master

Page 19: Ted yu:h base and hoya

HBase和客户端通过Zookeeper结合

HDFS

YARN Node Manager

HBase Region Server

HDFS

YARN Node Manager

HBase Region Server

HDFS

YARN Resource Manager

HBase Client HDFS

YARN Node Manager

Hoya AM Hoya Client

HBase Master

Page 20: Ted yu:h base and hoya

YARN 把故障通知给AM

HDFS

YARN Node Manager

HDFS

YARN Node Manager

HBase Region Server

HDFS

YARN Resource Manager

Hoya Client

HDFS

YARN Node Manager

Hoya AM

HBase Region Server

HBase Region Server

HBase Master

Page 21: Ted yu:h base and hoya

HOYA - 酷的功能

• 配置目录是缓存的,动态修补后推升到master和region servers的本地资源

• HBase .tar文件存储在HDFS上 - 集群可以使用相同/不同的HBase版本

• 集群伸缩和计划外容器损失的处理是相同的代码.

• region servers节点无Hoya代码

• RPC服务使用Protobuf -为其他语言客户打开服务

• 跟踪与持久化角色实例的位置信息 - 失败或解冻后, 把实例放置得接近数据

Page 22: Ted yu:h base and hoya

集群规范: 持久化

{

"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"

},

...

}

Page 23: Ted yu:h base and hoya

角色规范

"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" } }

Page 24: Ted yu:h base and hoya

伸缩/故障处理是相同的代码

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(); }

Page 25: Ted yu:h base and hoya

保护YARN AM RPC接口

• 在一个安全的集群中的YARN应用程序, 会从客户端获得委托令牌以和AM交谈

• 它还得到了令牌以便AM可以和RM交谈

• 进程会自动锁定任何你启动的RPC服务-所以客户端必须向AM验证自己

Page 26: Ted yu:h base and hoya

保护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());

Page 27: Ted yu:h base and hoya

正在进行的

• 多个提供者:HBase+其他

• 活跃度探测: HTTP GET, RPC端口, RPC 操作 ?

• 更好的故障处理,黑名单功能

Page 28: Ted yu:h base and hoya

应用程序对Hoya的要求

• 从压缩包安装,以普通用户运行

• 部署/启动无需人工干预

• 与集群/节点的其他应用实例共存

• 处理位于同一节点的角色实例

• 支持'杀'作为一个关闭选项

Page 29: Ted yu:h base and hoya

YARN-896:长寿命服务

• AM重启, 重新连接到以前的容器

• 应用程序令牌更新

• 对容器发出信号的能力

• AM/RM管理的组调度

• 在对容器的要求中提供反关联暗示

Page 30: Ted yu:h base and hoya

Phoenix简介

• 开源 https://github.com/forcedotcom/phoenix

• 提仪成为 Apache Phoenix

• HBase 上的SQL

• JDBC 驱动程序

• 用户可以专注于业务逻辑

Page 31: Ted yu:h base and hoya

二级索引

• 全局索引 - 另外建索引表

• 全表扫描变成point get

• 根据查询性能,优化器自动选择

• 和HBase一样提供ACID 保证

• 成功时才可见

Page 32: Ted yu:h base and hoya

建索引的语法

• CREATE INDEX <index_name>

ON <table_name>(<columns_to_index>…)

INCLUDE (<columns_to_cover>…);

Page 33: Ted yu:h base and hoya

哈希Joins

• 把小表广播到所有的region servers

• 以内存map形式缓存

• 扫描大表

• 在协处理器中join

Page 34: Ted yu:h base and hoya

哈希Join例子

SELECT * FROM employee e JOIN department d

ON e.dept_id = d.dept_id

WHERE e.salary < 120 AND d.revenue > 100

Page 35: Ted yu:h base and hoya

哈希Join例子

SELECT * FROM employee e JOIN department d

ON e.dept_id = d.dept_id

WHERE e.salary < 120 AND d.revenue > 100

Page 36: Ted yu:h base and hoya

哈希Join例子

SELECT * FROM department d

WHERE d.revenue > 100

• 将扫描结果送至各服务器

• 以内存map形式缓存

Page 37: Ted yu:h base and hoya

哈希Join例子

SELECT * FROM employee e JOIN department d

ON e.dept_id = d.dept_id

WHERE e.salary < 120 AND d.revenue > 100

Page 38: Ted yu:h base and hoya

哈希Join例子

SELECT * FROM employee e

WHERE e.salary < 120

• 扫描员工表

• 协处理器利用内存map进行join(根据e.dept_id = d.dept_id)

• 反回结果

• 清理缓存

Page 39: Ted yu:h base and hoya

Q & A

Thanks!