• 1. 搜索离线生产集群中的流计算莫问
  • 2. 个人背景简介花名:莫问 真名:王峰 2006年毕业后加入公司 雅虎中国(垂直搜索引擎团队) 阿里云(云计算服务团队) 淘宝/一淘(网页抓取团队) 技术方向:搜索离线系统2
  • 3. 提纲搜索离线系统技术体系 Hadoop-2.0 YARN介绍 Stream Service 计算模型 Stream Service 服务调度 Stream Service 运维操作3
  • 4. 搜索离线系统技术体系4HDFSYARNHBaseMapReduceStream ServiceHQueue搜索离线业务网页抓取数据处理数据统计PigHive数据挖掘…….
  • 5. Hadoop-1.0 VS Hadoop-2.05
  • 6. Applications on YARN6Stream Service
  • 7. 计算模型基本概念 拓扑结构 消息管理 进度管理 编程接口7
  • 8. 基本概念Stream Service:完成一套业务功能的流计算服务 Stream Role:1个Role表示1组具备相同计算功能的计算单元 Stream Worker:Stream Role中的计算单元 Stream Source:Stream Worker的数据输入源 Stream Sink:Stream Worker的数据输出终端 Stream Master:负责调度管理Stream Workers8
  • 9. 拓扑结构9Stream SourceStream Sink/SourceStream Sink/SourceStream SinkStream SourceStream SourceStream RoleStream RoleStream RoleStream Role分布式消息队列(HQueue等)HBase,iSearch等MySQL DRC, TT等
  • 10. 消息管理Stream Service的设计理念:计算和存储分层,计算之间解耦 计算层之间采用持久化分布式消息队列进行消息传递 消息不会丢失 消息队列可自由选择 优势 消息管理机制简单,系统OverHead消耗少,吞吐量大 上下游计算解耦,不相互阻塞进度,方便新业务接入 持久化的消息流,方便多业务共享数据以及问题追查10
  • 11. 进度管理流进度基于时间轴(消息生成时间 vs 消息处理时间) Master WebUI展示Workers进度 Master监控Workers进度(进度过慢进行报警) Worker定期将进度CheckPoint到ZK Worker重启从ZK上的CheckPoint进行恢复11
  • 12. 编程接口InputFormat:Stream Source(例如:DRC,TT, HQueue)的操作封装 getSplits(Source):为Stream Source进行数据分片拆分 createReader(Split):为Data Split创建Reader reader.next():流式读取消息12SplitSplitSplitSplitStream Sourcereaderreaderreaderreadermessagemessagemessagemessage
  • 13. 编程接口Worker:定制消息业务处理逻辑 setUp():消息处理前的初始化工作 cleanUp():消息处理结束后的清理工作 process(message):消息一条条处理13
  • 14. 编程接口Router:消息的路由策略 getSinks(message):获取消息的输出sink列表,决定消息向那里路由发送14Stream WorkerStream SinkStream SinkStream SinkmessageRouter
  • 15. 编程接口OutputFormat:Stream Sink(例如:HBase,HQueue等)的操作封装 createWriter(Sink):为Stream Sink创建Writer writer.write(partitionID, message):向Stream Sink写消息,并按PartitionID进行打散分发 Partitioner:消息的分发策略 getPartition(message):获取消息的partitionID,根据此partitionID决定如何分发打散15partitionpartitionpartitionpartitionWriterStream SinkmessagepartitionID
  • 16. 服务调度一级调度,资源调度管理 YARN Resource Manager - Stream Master 二级调度,计算模型管理 Stream Master - Stream Worker Failover处理16
  • 17. 资源调度管理多种计算模型运行在一个YARN集群上 MapReduce Job, Stream Service, Spark…. 不同计算模型的业务背景不一样,优先级不一样 Capacity Scheduler, Fair Scheduler强调公平共享,适合公用集群 搜索各业务具备优先级 Priority Capacity Scheduler:资源队列具备优先级17
  • 18. Worker调度流程18Stream MasterStream WorkerStream WorkerStream WorkerStream Worker3. start, register to master4. heartbeat request (metrics)1. start service6. stop service7. heartbeat response(stop)9. stop5. heartbeat response(ok)8. stop, unregister to master2. allocate resource, launch worker
  • 19. Worker调度策略Locality调度 让计算单元更加靠近数据,减少网络传输,类似MR的Locality调度策略 弹性调度 根据流处理进度动态调整worker数量,保证进度的同时不浪费资源 动态负载均衡 动态调整Worker的位置,使分布更加均匀,Locality更加合理19
  • 20. Locality调度20Rack1 Rack2 Switch1Switch2Switch3Node3 Data Split3Stream Worker3Node2 Data Split2Stream Worker2Node1 Data Split1Stream Worker1Node6 Data Split6Stream Worker6Node5 Data Split5Stream Worker5Node4 Data Split4Stream Worker4
  • 21. 弹性调度 - 动态扩容21Stream SourceData SplitData SplitStream RoleStream WorkerData Split1. 进度太慢了2. 分裂3. 并发能力增加,进度追上了Stream WorkerStream Worker
  • 22. 弹性调度 - 合理收缩22Stream SourceData SplitData SplitStream RoleStream WorkerData Split3. 资源被合理回收2.合并1. Worker清闲,浪费资源Stream WorkerStream Worker
  • 23. Failover处理23Stream MasterStream WorkerStream Worker。。。Resource Manager(active)Resource Manager(standby)RM HAStream MasterStream WorkerStream Worker。。。heartbeatheartbeatheartbeatheartbeatHDFSserialize/replayserialize/replay
  • 24. 运维操作日常操作 stream-service start service.xml stream-service stop service_name stream-service restart worker_id24
  • 25. 运维操作处理进度延迟,扩容分裂 stream-service split worker_id(手动指定某个worker进行split) stream-service split role_name(根据策略在role中选取慢的workers进行split) 计算资源空闲,收缩合并 stream-service merge worker_id1 worker_id2(手动指定某2个worker进行merge) stream-service merge role_name(根据策略在role中选取worker pair进行merge)25
  • 26. 运维操作WebUI查看Stream Service运行信息(类似Hadoop MapReduce体验) Stream Workers列表和Summary信息 Stream Workers运行状态和机器信息 Metrics信息 框架Metrics:JVM, TPS,Latency,Progress/Delay,…. 用户自定义Metrics:Counter Metrics,Rate Metrics,…. Log信息,包括系统框架Log和用户Log26
  • 27. 运维操作Stream Master监控报警 运维工具统一对Stream Masters进行监控和报警 Stream Worker监控报警 Stream Master内置Workers状态和进度监控报警功能 Stream Worker监控报警策略插件可定制27
  • 28. 生产应用一淘网页选取 一淘图片/JS处理 一淘商品Dump 一淘点评Dump 一淘降价提醒 一淘优惠挖掘28淘宝知识Dump 淘宝问答Dump B2B中文站实时搜索 B2B YARN Loader 天猫实时Dump(预发) 主搜个性化Pora(开发中)
  • 29. (本页无文本内容)