大数据技术原理与应用 第十一章 流计算试卷.pptVIP

  • 158
  • 0
  • 约1.55万字
  • 约 77页
  • 2017-06-11 发布于湖北
  • 举报

大数据技术原理与应用 第十一章 流计算试卷.ppt

8.6.1 基本概念 3.任务 一个作业会被进一步分割成多个任务(Task)来执行,其中,每个任务负责处理作业中的一个分区 分区之间没有定义顺序,从而允许每一个任务独立执行 YARN调度器负责把任务分发给各个机器,最终,一个工作中的多个任务会被分发到多个机器进行分布式并行处理 8.6.1 基本概念 4.数据流图 一个数据流图是由多个作业构成的,其中,图中的每个节点表示包含数据的流,每条边表示数据传输 多个作业串联起来就完成了流式的数据处理流程 由于采用了异步的消息订阅分发机制,不同任务之间可以独立运行 8.6.2 系统架构 MapReduce批处理架构 Samza流处理架构 数据层 HDFS Kafka 执行层 YARN YARN 处理层 MapReduce Samza API 表 MapReduce批处理架构和Samza流处理架构的类比 Samza系统架构主要包括 流数据层(Kafka) 执行层(YARN) 处理层(Samza API) 流处理层和执行层都被设计成可插拔的,开发人员可以使用其他框架来替代YARN和Kafka 8.6.2 系统架构 处理分析过程如下: Samza客户端需要执行一个Samza作业时,它会向YARN的ResouceManager提交作业请求 ResouceManager通过与NodeManager沟通为该作业分配容器(包含了CPU、内存等资源)来运行Samza ApplicationMaster Samza ApplicationMaster进一步向ResourceManager申请运行任务的容器 获得容器后,Samza ApplicationMaster与容器所在的NodeManager沟通,启动该容器,并在其中运行Samza Task Runner Samza Task Runner负责执行具体的Samza任务,完成流数据处理分析 8.7 Storm、Spark Streaming和Samza的应用场景 从编程的灵活性来讲,Storm是比较理想的选择,它使用Apache Thrift,可以用任何编程语言来编写拓扑结构(Topology) 当需要在一个集群中把流计算和图计算、机器学习、SQL查询分析等进行结合时,可以选择Spark Streaming,因为,在Spark上可以统一部署Spark SQL,Spark Streaming、MLlib,GraphX等组件,提供便捷的一体化编程模型 当有大量的状态需要处理时,比如每个分区都有数十亿个元组,则可以选择Samza。当应用场景需要毫秒级响应时,可以选择Storm和Samza,因为Spark Streaming无法实现毫秒级的流计算 8.8 Storm编程实践 8.8.1 编写Storm程序 8.8.2 安装Storm的基本过程 8.8.3 运行Storm程序 基于Storm的单词统计在形式上与基于MapReduce的单词统计是类似的,MapReduce使用的是Map和Reduce的抽象,而Storm使用的是Spout和Bolt的抽象 Storm进行单词统计的整个流程: 从Spout中发送Stream(每个英文句子为一个Tuple) 用于分割单词的Bolt将接收的句子分解为独立的单词,将单词作为Tuple的字段名发送出去 用于计数的Bolt接收表示单词的Tuple,并对其进行统计 输出每个单词以及单词出现过的次数 8.8.1 编写Storm程序 程序任务:单词统计 8.8.1 编写Storm程序 一个句子经Storm的单词统计得出的结果 import org.apache.storm.Config; Import …… public class WordCountTopology { public static class RandomSentenceSpout extends BaseRichSpout { …… } public static class SplitSentence extends ShellBolt implements IRichBolt { …… } public static class WordCount extends BaseBasicBolt { …… } public static void main(String[] args) throws Exception { TopologyBuilder builder = new TopologyBuilder(); builder.setSpout(sentences, new RandomSentenceSpout(), 5); builder.setBolt(split, new SplitSentence(), 8)

文档评论(0)

1亿VIP精品文档

相关文档