HBase Coprocessor 优化与实验

sandyfog

贡献于2014-09-25

字数:0 关键词: 分布式/云计算/大数据

1 HBase Coprocessor 优化与实验 郭磊涛 2012年12月 2 HBase元数据信息 Zookeeper file HBase 简介 • HBase是在Hadoop之上构建的非关系型、面向列存储的开源分布式结构化 数据存储系统 • HBase表分区与索引管理 • 将Table中的数据根据rowKey字段划分为 多个HRegion • HRegion分配给RegionServer管理 三级元数据: - MetaTable:Region与RegionServer的映 射信息 - RootTable:MetaTable与RegionServer 的映射信息 - Zookeeper file: RootTable的存储位置 3 HBase 系统架构 HBase的所有数据(Hlog 和 Hfile)均存储到HDFS上 HDFS将文件划分为64MB的block,并存储多个副本 通过client读写数据 Hmaster管理元数据(表分区, 管理该分区的RegionServer) RegionServer负责Region 数据的存储和读取 4 HBase Coprocessor 简介 • HBase Coprocessor受启发于Google的Jeff Dean在LADIS’09 上的报告 – Google BigTable的Coprocessor特点 • 在每个表服务器的任何tablet上均可执行用户代码 • 提供客户端调用接口 (coprocessor客户端lib将可定位每个row/range的位置;多行读写将自 动分片为多个并行的RPC调用) • 提供可构建分布式服务的灵活的编程模型 • 可以自动扩展,负载均衡等 – 与Google Bigtable Coprocessor相比 • Bigtable coprocessor 以独立的进程执行,可以更好的控制CP计算所需资源 • HBase coprocessor是一个在Master/RegionServer进程内的框架,通过在运行时执行用户的 代码,在HBase内实现灵活的分布式数据处理功能 • HBase Coprocessor的主要应用场景 – secondary indexing – complex filtering – access control Coprocessor 在以下将简称为 CP 5 HBase Coprocessor 的实现类型 • HBase Coprocessor的实现分为Observer和Endpoint两种 – Observer类似于触发器,工作在服务器端。可以实现权限管理、监控等 – Endpoint类似于存储过程,工作在服务器端和客户端。可以实现min/max等计算 • Coprocessor的作用范围 – System coprocessor: 对所有table的所有region – Table coprocessor:对某个table的所有region 该图参考了《HBase Coprocessor的分析》http://walkoven.com/?p=77 • RegionObserver:提供表数据 操作事件的钩子函数:Get、 Put、Scan等的pre/post处理。 • WALObserver:提供WAL相关 操作钩子。 • MasterObserver:提供DDL类型 的操作钩子。如创建、删除、 修改数据表等。 • Endpoint:只适用于 RegionServer, 对应于每个table 的Region的处理。 6 HBase Coprocessor Observer示例 • RegionObservers与HBase的交互流程: 该页参考了 Coprocessor Introduction, https://blogs.apache.org/hbase/ entry/coprocessor_introduction 使用RegionObserver,在 preGet()中判断用户是否具 有数据读权限: 7 HBase Coprocessor Endpoint示例 Client通过API调用对某行/行范围的处理,CP框架自动将行范围映射到Region,并将计算请求 发送给每个Region并行执行 AggregateProtoc ol AggregateProtoc ol AggregateProtoc ol AggregateProtoc ol Batch.Call Long call (AggregateProtocol p) { return p.getRowNum(); } Batch.Callback void update(){ rowCountL.addAndGet(); } ① public interface AggregateProtocol extends CoprocessorProtocol ② public class AggregateImplementation extends BaseEndpointCoprocessor implements AggregateProtocol ③ public class AggregationClient 8 HBase Coprocessor 配置 ① 在hbase-site.xml中配置CP class (System coprocessor) hbase.coprocessor.region.classes org.apache.hadoop.hbase.coprocessor.AggregateImplementation 为所有table加载了一个cp class,可以用”,”分割加载多个class ② 从hbase shell中加载CP class (Table coprocessor) > alter ‘testTable', METHOD => 'table_att', 'coprocessor'=>'hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2‘ > enable ' testTable ' 为testTable加载一个RegionObserver > alter 'testTable ', METHOD => 'table_att_unset', NAME => 'coprocessor$1‘ 为testTable卸载一个cp class 9 我们的应用场景-网络日志分析查询 大云数据仓库 分布式文件系统 大云数据仓库 分布式文件系统 大云数据仓库 分布式文件系统 访问接口 用户感知分析 网络质量考核 网络质量优化 LOG统计查询 LOG统计查询: select intProtocol, callingIMSI, calledIMSI, intDelayAltering, intDelayConnect, intTermEvent, … from vwXDRQuery_1350619391458 t where (t.dtStime>… and …) and t.intProtocol in (32,97) order by callingIMSI ASC limit 10000 10 利用CP实现对LOG数据的查询 在应用开发中遇到的主要问题 • 加载CP class,造成region分布错乱,性 能降低 • 客户端的网络成为瓶颈 • 在较复杂应用逻辑下,CP不够稳定 LOG数据查询 Web前端 应用中间件 Thrift Server HMaster RS RS RS RS 数据加载 11 HBase Coprocessor优化 – Region数据本地化 • 测试和实验环境 – LOG数据2亿条,预分为720个Region,平均每节点48个Region • 1 Master + 15 RegionServer (32GB RAM, 千兆以太网) – 利用CP在每个region查询符合条件的记录,并在CP客户端汇总结果 • 每个region返回1w条记录,每条记录1KB,即每个region返回10MB数据 – 执行结果(平均值):127.7秒 – 原因分析: • Region数据非本地化存储 • CP客户端网络成为瓶颈 – 客户端需要处理 10MB*720 = 7GB数据 12 HBase Coprocessor优化 – Region数据本地化 • HBase支持的默认Region分配策略 (AssignmentManager) – retainAssignment (default: true) – roundRobinAssignment – randomAssignment • 当集群较为稳定时,默认Region策略即可实现Region数据本地读写。 • 当节点退出/上线,或者table dis/enable时,会造成Region数据非本节 点存储 – 在对table增加CP时,需要dis/enable table – 在enable table时,会对region采用 randomAssignment(default: true) 或 roundRobinAssignment 分配策略 • 我们的改进:对Region可以通过配置采用 toplocalizedAssignment 策略 – 在制定Region分配计划时,通过 HRegion.computeHDFSBlocksDistribution() 计算其数据在RegionServer的分布情况,将Region调度至具有最多数据的 RegionServer 13 HBase Coprocessor优化 – Region数据本地化 • 采用 toplocalizedAssignment 的Region分配策略后, LOG查询的执行结果 为: 59.95秒 ,性能提升了113% • 但是,客户端节点的网络仍然是 瓶颈,CPU和内存占用也较高 total-cpu-usage net/total 14 Client HConnectionManager 1,定位所有region 2,异步分发Call RegionServer Region Region Region RegionServer Region Region RegionServer Region Region 异步IPC调用 (走网络) 本地调用 ProtocolHand ler 发送请求 返回结果 ProtocolHand ler ProtocolHand ler ProtocolHand ler ProtocolHand ler ProtocolHand ler ProtocolHand ler HBase Coprocessor优化 – CP本地汇聚 • 目前Apache Hbase社区的 实现机制是以Region为单位 执行请求,每个请求直接发 送到Region上,每个 Region执行处理后将结果直 接返回给Client • 存在的问题 – 所有汇总计算集中在client, 其CPU和内存成为瓶颈 – 当返回数据量大时,客户端 网络成为瓶颈 15 HBase Coprocessor优化 – CP本地汇聚 • CP本地汇聚 – 以RS为单位发出CP计算请求 – 每个RS对其管理的Region并行扫 描,扫描结果在RS节点先做一次 汇总 – 当RS上所有Region均计算完毕, 则RS将其本地汇聚结果返回给 Client – Client将各RS返回结果进行汇总 Client HConnectionManager 1,定位所有region 2,异步分发Call RegionServer Region Region Region RegionServer Region Region RegionServer Region Region ProtocolHandler 异步IPC调用 (走网络) 发送请求 返回结果 内部异步调用 本地调用 RS级别结果汇聚 线程池管理 • 优点 – 计算分摊:Client端的计算被分布到每个RS上 – 减轻网络负载: 减轻Client端的网络负载 • Client只需要接收10MB*15 = 150MB的数据 – 编程灵活:可以分别定义RS和Region级别的处 理函数 采用 CP本地汇聚 后, LOG 查询的执行结果为: 34.86秒 ,性能提升了72% net/total 16 HBase Coprocessor优化 – CP本地汇聚 • API:原有CP API没有变动,增加了新的接口可使用CP 本地汇聚 – Client端采用Htable.coprocessorExecRS() – 接口定义与原CP相同 – 接口实现需做判断,以便在Region上调用对Region的处理函数, 在RegionServer上调用对整个RegionServer数据的处理函数 if(result==null&&oneRegionValue==null&&serverName==null) return getRegionTop(ci,scan); else return getRSTop(ci,scan,serverName,result,oneRegionValue); serverName:RS的名称 result, 要返回的结果 oneRegionValue:一个region上的结果,用这个值去更新result 17 总结 • 经验总结 – HBase Coprocessor提供Observer和Endpoint两种实现方式,Endpoint方 式可用于在HBase内部实现分布式并行计算 – Region的本地化调度策略,可以很好的提高HBase数据读写效率 – Coprocessor的本地汇聚功能,可以降低Client端网络、CPU和内存开销,将 计算分摊到各个RegionServer • 遇到的主要问题 – Coprocessor是HBase进程内的分布式处理框架,当CP计算较复杂且中间结果 过多时,会占用大量内存,造成HBase内存不足而发生故障 (HBASE-4047 Generic external process host) – 没有容错机制,速度最慢的RS节点会拖慢整个计算执行进度 (HBASE-5047 Implement child failure strategies for external coprocessor host) 18 谢 谢 谢 谢 谢谢项目组各位同事,特别是钱岭、张宝海和 邓鹏对本工作的贡献!

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档