• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Ted yu:h base and hoya
 

Ted yu:h base and hoya

on

  • 297 views

BDTC 2013 Beijing China

BDTC 2013 Beijing China

Statistics

Views

Total Views
297
Views on SlideShare
297
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Ted yu:h base and hoya Ted yu:h base and hoya Presentation Transcript

    • Stripe Compaction, Hoya and Phoenix Ted Yu (tyu@hortonworks.com)
    • 我的简介 • 致力于HBase工作3年 • 2011年6月成为HBase代码提交者和PMC成 员
    • 概要 • Stripe compaction • Hoya • Q&A
    • Compactions 例子 • Memstore 填满时,文件被刷新 • 当积累足够的文件时,它们被压缩 writes MemStore HDFS … HFile HFile HFile Architecting the Future of Big Data HFile HFile
    • 但是, compaction 导致速度变慢 看起来很多I/ O但没有明显的好处 对读操作的效果示例 25 Read latency, ms 20 15 10 5 0 0 3600 7200 Load test time, sec 10800
    • 改进 compactions的关键方法 • 从较少的文件读取 –行键,版本,时间等的独立的文件 –允许大量的uncompacted文件存在 • 不压缩你不需要压缩的数据 –例如,在类似OpenTSDB的系统中旧的数据 –显然,导致更少的I/ O • 使 compactions 较小 –没有太多的I / O放大,或太多的文件 –结果:较少的compactions相关的故障 • HBase 与少数大的区域工作更好; 但是,大的compactions 导致系统无法使用 © Hortonworks Inc. 2011
    • 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
    • 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
    • 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
    • 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
    • 直接刷新到stripes • 刷新能写入多个文件, 避免L0所造成的I/ O放大 • 冲突的文件: 保持 stripes 的现有文件; 新文件放 入L0 © Hortonworks Inc. 2011
    • YARN: 把Hadoop带到批处理之外 © Hortonworks Inc. 2011
    • HBase on Yarn • 在大的YARN集群中的小HBase集群 • • • • 动态的HBase集群 弹性的HBase集群 面向工作流的短暂/间歇集群 更有效地利用/共享集群资源
    • HBase on Yarn • Hoya 是一个YARN上的应用 • 完全 由CLI 驱动 • 所有组件都是YARN services • 输入是集群说明, 以JSON文档格式持久化,放 在HDFS上 • HDFS和ZooKeeper 由多个集群实例共享 • 操作: create, freeze/thaw, flex, exists <群集名 字>
    • Hoya 结构 • HoyaClient: 解析命令行, 执行本地操作, 与 HoyaAppMaster通信 • HoyaAppMaster: AM 服务, 实现 AMRMClientAsync和NMClientAsync的回调 • HBaseProviderService: 在containers中部署和 执行master和region servers
    • YARN管理集群 • • • • • • 服务器运行YARN节点管理器 NM向资源管理器发送心跳 RM在群集中调度工作 RM分配容器给应用程序 NMs 启动容器 NMs 报告容器健康 YARN Resource Manager YARN Node Manager HDFS HDFS YARN Node Manager YARN Node Manager HDFS HDFS
    • Hoya Client 创建 App Master YARN Resource Manager YARN Node Manager Hoya Client Hoya AM HDFS HDFS YARN Node Manager YARN Node Manager HDFS HDFS
    • 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
    • HBase和客户端通过Zookeeper结合 YARN Resource Manager YARN Node Manager Hoya Client Hoya AM HDFS HBase Master HBase Client YARN Node Manager HDFS YARN Node Manager HBase Region Server HBase Region Server HDFS HDFS
    • 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
    • HOYA - 酷的功能 • 配置目录是缓存的,动态修补后推升到master和 region servers的本地资源 • HBase .tar文件存储在HDFS上 - 集群可以使用相同/不 同的HBase版本 • 集群伸缩和计划外容器损失的处理是相同的代码. • region servers节点无Hoya代码 • RPC服务使用Protobuf -为其他语言客户打开服务 • 跟踪与持久化角色实例的位置信息 - 失败或解冻后, 把实例放置得接近数据
    • 集群规范: 持久化 { "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" }, ... }
    • 角色规范 "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" } }
    • 伸缩/故障处理是相同的代码 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(); }
    • 保护YARN AM RPC接口 • 在一个安全的集群中的YARN应用程序, 会从 客户端获得委托令牌以和AM交谈 • 它还得到了令牌以便AM可以和RM交谈 • 进程会自动锁定任何你启动的RPC服务-所以 客户端必须向AM验证自己
    • 保护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());
    • 正在进行的 • 多个提供者:HBase+其他 • 活跃度探测: HTTP GET, RPC端口, RPC 操作 ? • 更好的故障处理,黑名单功能
    • 应用程序对Hoya的要求 • • • • • 从压缩包安装,以普通用户运行 部署/启动无需人工干预 与集群/节点的其他应用实例共存 处理位于同一节点的角色实例 支持'杀'作为一个关闭选项
    • YARN-896:长寿命服务 • • • • • AM重启, 重新连接到以前的容器 应用程序令牌更新 对容器发出信号的能力 AM/RM管理的组调度 在对容器的要求中提供反关联暗示
    • Phoenix简介 • 开源 https://github.com/forcedotcom/phoenix • • • • 提仪成为 Apache Phoenix HBase 上的SQL JDBC 驱动程序 用户可以专注于业务逻辑
    • 二级索引 • • • • • 全局索引 - 另外建索引表 全表扫描变成point get 根据查询性能,优化器自动选择 和HBase一样提供ACID 保证 成功时才可见
    • 建索引的语法 • CREATE INDEX <index_name> ON <table_name>(<columns_to_index>…) INCLUDE (<columns_to_cover>…);
    • 哈希Joins • • • • 把小表广播到所有的region servers 以内存map形式缓存 扫描大表 在协处理器中join
    • 哈希Join例子 SELECT * FROM employee e JOIN department d ON e.dept_id = d.dept_id WHERE e.salary < 120 AND d.revenue > 100
    • 哈希Join例子 SELECT * FROM employee e JOIN department d ON e.dept_id = d.dept_id WHERE e.salary < 120 AND d.revenue > 100
    • 哈希Join例子 SELECT * FROM department d WHERE d.revenue > 100 • 将扫描结果送至各服务器 • 以内存map形式缓存
    • 哈希Join例子 SELECT * FROM employee e JOIN department d ON e.dept_id = d.dept_id WHERE e.salary < 120 AND d.revenue > 100
    • 哈希Join例子 SELECT * FROM employee e WHERE e.salary < 120 • 扫描员工表 • 协处理器利用内存map进行join(根据 e.dept_id = d.dept_id) • 反回结果 • 清理缓存
    • Q&A Thanks!