商业大数据分析_第1页
商业大数据分析_第2页
商业大数据分析_第3页
商业大数据分析_第4页
商业大数据分析_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

许鑫华东师范大学经济与管理学部E-mail:xxu@/xuxin流计算大数据BigData

提纲8.1流计算概概述8.2流计算处处理流程程8.3流计算应应用8.4流计算开开源框架架–Storm8.5SparkStreaming8.6Samza8.7Storm、SparkStreaming和Samza的应用场场景8.8Storm编程实践践8.1流流计算算概述8.1..1静态数据据和流数数据8.1..2批量计算算和实时时计算8.1..3流计算概概念8.1..4流计算与与Hadoop8.1..5流计算框框架很多企业业为了支支持决策策分析而而构建的的数据仓仓库系统统,其中中存放的的大量历历史数据据就是静静态数据据。技术人员员可以利用数据据挖掘和和OLAP(On-LineAnalyticalProcessing)分析工工具从静静态数据据中找到到对企业业有价值值的信息息8.1..1静静态数据据和流数数据近年来,,在Web应用、网网络监控控、传感感监测等等领域,,兴起了了一种新新的数据据密集型型应用——流数据,,即数据据以大量量、快速速、时变变的流形形式持续续到达实例:PM2..5检测、电电子商务务网站用用户点击击流流数据具具有如下下特征::数据快速速持续到到达,潜潜在大小小也许是是无穷无无尽的数据来源源众多,,格式复复杂数据量大大,但是是不十分分关注存存储,一一旦经过过处理,,要么被被丢弃,,要么被被归档存存储注重数据据的整体体价值,,不过分分关注个个别数据据数据顺序序颠倒,,或者不不完整,,系统无无法控制制将要处处理的新新到达的的数据元元素的顺顺序8.1..1静静态数据据和流数数据对静态数数据和流流数据的的处理,,对应着着两种截截然不同同的计算算模式::批量计计算和实实时计算算8.1..2批批量计算算和实时时计算图8-2数据的两两种处理理模型批量计算算:充裕裕时间处处理静态态数据,,如Hadoop流数据不适合采采用批量量计算,,因为流流数据不不适合用用传统的的关系模模型建模模流数据必必须采用用实时计计算,响响应时间间为秒级级数据量少少时,不不是问题题,但是是,在大数据据时代,数据格式式复杂、、来源众众多、数据量巨巨大,对对实时计计算提出出了很大大的挑战战。因此此,针对对流数据据的实时时计算——流计算,,应运而而生流计算:实时获取取来自不不同数据据源的海海量数据据,经过过实时分分析处理理,获得得有价值值的信息息8.1..3流流计算概概念图8-3流计算示示意图流计算秉秉承一个个基本理理念,即即数据的价价值随着着时间的的流逝而而降低,如用户点点击流。因此,,当事件件出现时时就应该该立即进进行处理理,而不不是缓存存起来进进行批量量处理。。为了及及时处理理流数据据,就需需要一个个低延迟迟、可扩扩展、高高可靠的的处理引引擎对于一个个流计算算系统来来说,它它应达到到如下需需求:高性能::处理大大数据的的基本要要求,如如每秒处处理几十十万条数数据海量式::支持TB级甚至是是PB级的数据据规模实时性::保证较较低的延延迟时间间,达到到秒级别别,甚至至是毫秒秒级别分布式::支持大大数据的的基本架架构,必必须能够够平滑扩扩展易用性::能够快快速进行行开发和和部署可靠性::能可靠靠地处理理流数据据8.1..3流流计算概概念Hadoop设计的初初衷是面面向大规规模数据据的批量量处理,,每台机机器并行行运行MapReduce任务,最最后对结结果进行行汇总输输出MapReduce是专门面面向静态态数据的的批量处处理的,,内部各各种实现现机制都都为批处处理做了了高度优优化,不不适合用用于处理理持续到到达的动动态数据据可能会想想到一种种“变通通”的方方案来降降低批处处理的时时间延迟迟——将基于MapReduce的批量处处理转为为小批量量处理,,将输入入数据切切成小的的片段,,每隔一一个周期期就启动动一次MapReduce作业。但这种种方式也也无法有有效处理理流数据据切分成小小片段,,可以降降低延迟迟,但是是也增加加了附加加开销,,还要处处理片段段之间依依赖关系系需要改造造MapReduce以支持流流式处理理8.1..4流流计算与与Hadoop结论:鱼鱼和熊掌掌不可兼兼得,Hadoop擅长批处处理,不不适合流流计算当前业界界诞生了了许多专专门的流流数据实实时计算算系统来来满足各各自需求求目前有三三类常见见的流计计算框架架和平台台:商业业级的流计算算平台、开源流流计算框框架、公公司为支支持自身身业务开开发的流流计算框框架商业级::IBMInfoSphereStreams和IBMStreamBase较为常见见的是开开源流计计算框架架,代表表如下::TwitterStorm:免费、、开源的的分布式式实时计计算系统统,可简简单、高高效、可可靠地处处理大量量的流数数据Yahoo!S4(SimpleScalableStreamingSystem):开源源流计算算平台,,是通用用的、分分布式的的、可扩扩展的、、分区容容错的、、可插拔拔的流式式系统公司为支支持自身身业务开开发的流流计算框框架:FacebookPumaDstream(百度))银河流数数据处理理平台((淘宝))8.1..5流流计算框框架8.2流流计算算处理流流程8.2..1概述8.2..2数据实时时采集8.2..3数据实时时计算8.2..4实时查询询服务传统的数数据处理理流程,,需要先先采集数数据并存存储在关关系数据据库等数数据管理理系统中中,之后后由用户通过过查询操操作和数数据管理理系统进进行交互互传统的数数据处理理流程隐隐含了两两个前提提:存储的数数据是旧旧的。存储的的静态数数据是过过去某一一时刻的的快照,,这些数数据在查查询时可可能已不不具备时时效性了了需要用户户主动发发出查询询来获取结结果8.2..1数数据处理理流程传统的数数据处理理流程示示意图流计算的的处理流流程一般般包含三三个阶段段:数据据实时采采集、数数据实时时计算、、实时查查询服务务8.2..1数数据处理理流程流计算处处理流程程示意图图数据实时时采集阶阶段通常常采集多多个数据据源的海海量数据据,需要要保证实实时性、、低延迟迟与稳定定可靠以日志数数据为例例,由于于分布式式集群的的广泛应应用,数数据分散散存储在在不同的的机器上上,因此此需要实实时汇总总来自不不同机器器上的日日志数据据目前有许许多互联联网公司司发布的的开源分分布式日日志采集集系统均均可满足足每秒数数百MB的数据采采集和传传输需求求,如:Facebook的ScribeLinkedIn的Kafka淘宝的TimeTunnel基于Hadoop的Chukwa和Flume8.2..2数数据实时时采集数据采集集系统的的基本架架构一般般有以下下三个部部分:Agent:主动采采集数据据,并把把数据推推送到Collector部分Collector:接收多多个Agent的数据,,并实现现有序、、可靠、、高性能能的转发发Store:存储Collector转发过来来的数据据(对于流流计算不不存储数数据)8.2..2数数据实时时采集数据采集集系统基基本架构构数据实时时计算阶阶段对采采集的数数据进行行实时的的分析和和计算,并反馈馈实时结结果经流处理理系统处处理后的的数据,,可视情情况进行行存储,,以便之之后再进进行分析析计算。。在时效效性要求求较高的的场景中中,处理理之后的的数据也也可以直直接丢弃弃8.2..3数数据实时时计算数据实时时计算流流程实时查询询服务::经由流计计算框架架得出的的结果可可供用户户进行实实时查询询、展示示或储存存传统的数数据处理理流程,,用户需需要主动动发出查查询才能能获得想想要的结结果。而而在流处处理流程程中,实实时查询询服务可可以不断断更新结结果,并并将用户户所需的的结果实实时推送送给用户户虽然通过过对传统统的数据据处理系系统进行行定时查询,也也可以实实现不断断地更新新结果和和结果推推送,但但通过这这样的方方式获取取的结果果,仍然然是根据据过去某某一时刻刻的数据据得到的的结果,,与实时时结果有有着本质质的区别别8.2..3实实时查询询服务可见,流流处理系系统与传传统的数数据处理理系统有有如下不不同:流处理系系统处理理的是实实时的数数据,而而传统的的数据处处理系统统处理的的是预先先存储好好的静态态数据用户通过过流处理理系统获获取的是是实时结结果,而而通过传传统的数数据处理理系统,,获取的的是过去去某一时时刻的结结果流处理系系统无需需用户主主动发出出查询,,实时查查询服务务可以主主动将实实时结果果推送给给用户8.2..3实实时查询询服务流计算是是针对流流数据的的实时计计算,可可以应用用在多种种场景中中,如Web服务、机机器翻译译、广告告投放、、自然语语言处理理、气候候模拟预预测等如百度、淘淘宝等大大型网站站中,每每天都会会产生大大量流数数据,包包括用户户的搜索索内容、、用户的的浏览记记录等数数据。采采用流计计算进行行实时数数据分析析,可以以了解每每个时刻刻的流量量变化情情况,甚甚至可以以分析用用户的实实时浏览览轨迹,,从而进进行实时时个性化化内容推推荐但是,并并不是每每个应用用场景都都需要用用到流计计算的。。流计算算适合于于需要处处理持续续到达的的流数据据、对数数据处理理有较高高实时性性要求的的场景8.3流流计算算的应用用传统的业业务分析析一般采采用分布布式离线线计算的的方式,,即将数数据全部部保存起起来,然然后每隔隔一定的的时间进进行离线线分析来来得到结结果。但但这样会会导致一一定的延延时,难以保证结果果的实时时性随着分析析业务对对实时性性要求的的提升,,离线分分析模式式已经不不适合用用于流数数据的分分析,也也不适用用于要求求实时响响应的互互联网应应用场景景如淘宝网““双十一一”、““双十二二”的促促销活动动,商家家需要根据广告告效果来来即时调整广告,这就需需要对广广告的受访情况况进行分析析。但以以往采用用分布式式离线分分析,需要几小时甚甚至一天天的延时时才能得到到分析结结果。而促销活动动只持续续一天,,因此,,隔天才才能得到到的分析析结果便便失去了了价值虽然分布布式离线线分析带带来的小小时级的的分析延延时可以以满足大大部分商商家的需需求,但但随着实实时性要求越来越高,如何实实现秒级级别的实实时分析析响应成成为业务务分析的的一大挑挑战8.3..1应应用场景景1:实实时分分析针对流数数据,““量子恒恒道”开开发了海海量数据据实时流流计算框框架SuperMario。通过该该框架,,量子恒道道可处理理每天TB级的实时时流数据据,并且且从用户户发出请请求到数数据展示示,整个个延时控控制在2-3秒内,达达到了实实时性的的要求8.3..1应应用场景景1:实实时分分析SuperMario处理流程程流计算不不仅为互互联网带带来改变变,也能能改变我我们的生生活如提供导航航路线,,一般的的导航路路线并没没有考虑虑实时的的交通状状况,即即便在计计算路线线时有考考虑交通通状况,,往往也也只是使使用了以以往的交交通状况况数据。。要达到到根据实实时交通通状态进进行导航航的效果果,就需需要获取取海量的的实时交交通数据据并进行行实时分分析借助于流流计算的的实时特特性,不不仅可以以根据交交通情况况制定路路线,而而且在行行驶过程程中,也也可以根根据交通通情况的的变化实实时更新新路线,,始终为为用户提提供最佳佳的行驶驶路线8.3..1应应用场景景2:实实时交交通8.4..1Storm简简介8.4..2Storm的的特点8.4..3Storm设设计思想想8.4..4Storm框架架设计8.4开源流计计算框架架Storm以前只有有政府机机构和金金融机构构能够通通过昂贵贵的定制制系统来来满足流流数据实实时分析析计算需需求早期对于于流计算算的研究究多数是是基于对对传统数数据库处处理的流流式化,,即实时时数据库库,很少少研究流流计算框框架Yahoo!S4和TwitterStorm的开源,,改变了了这个情情况在流数据据处理上上比MapReduce更有优势势批处理系系统关注注吞吐率率,流处处理系统统关注延延时Yahoo!S4和TwitterStorm改变了开开发实时时应用的的方式以前既要要关注处处理逻辑辑,还要要解决实实时数据据获取、、传输、、存储现在可以以快速低低成本搭搭建起实实时流处处理系统统8.4开开源流流计算框框架StormTwitterStorm是一个免免费、开开源的分分布式实实时计算算系统,,Storm对于实时时计算的的意义类类似于Hadoop对于批处处理的意意义,Storm可以简单单、高效效、可靠靠地处理理流数据据,并支支持多种种编程语语言Storm框架可以以方便地地与数据据库系统统进行整整合,从从而开发发出强大大的实时时计算系系统8.4..1Storm简介Twitter是全球访访问量最最大的社社交网站站之一,,Twitter开发Storm流处理框框架也是是为了应应对其不不断增长长的流数数据实时时处理需需求8.4..1Storm简介Twitter的分层数数据处理理架构8.4..2Storm的特点Storm可用于许许多领域域中,如如实时分分析、在在线机器器学习、、持续计计算、远远程RPC、数据提提取加载载转换等等Storm具有以下下主要特特点:整合性::Storm可方便地地与队列列系统和和数据库库系统进进行整合合简易的API:Storm的API在使用上上即简单单又方便便可扩展性性:Storm的并行特特性使其其可以运运行在分分布式集集群中容错性::Storm可自动进进行故障障节点的的重启、任务的重重新分配配可靠的消消息处理理:Storm保证每个个消息都都能完整整处理支持各种种编程语语言:Storm支持使用用各种编编程语言言来定义义任务快速部署署:Storm可以快速速进行部部署和使使用免费、开开源:Storm是一款开开源框架架,可以以免费使使用8.4..3Storm设计思想想Storm主要术语语包括Streams、Spouts、Bolts、Topology和StreamGroupingsStreams:Storm将流数据Stream描述成一个无限限的Tuple序列,这些Tuple序列会以以分布式式的方式式并行地地创建和和处理每个tuple是一堆值值,每个个值有一一个名字字,并且且每个值值可以是是任何类类型Tuple本来应该该是一个个Key--Value的Map,由于各各个组件件间传递递的tuple的字段名名称已经经事先定定义好了了,所以以Tuple只需要按按序填入入各个Value,所以就就是一个个ValueList(值列表表)Field1Field2Field3Field48.4..3Storm设计思想想Spout:Storm认为每个个Stream都有一个个源头,,并把这这个源头头抽象为为Spout通常Spout会从外部部数据源源(队列列、数据据库等))读取数数据,然然后封装装成Tuple形式,发发送到Stream中。Spout是一个主主动的角角色,在在接口内内部有个个nextTuple函数,Storm框架会不不停的调调用该函函数8.4..3Storm设计思想想Bolt:Storm将Streams的状态转转换过程程抽象为为Bolt。Bolt即可以处处理Tuple,也可以以将处理理后的Tuple作为新的的Streams发送给其其他BoltBolt可以执行行过滤、、函数操操作、Join、操作数数据库等等任何操操作Bolt是一个被被动的角角色,其其接口中中有一个个execute(Tupleinput)方法,在在接收到到消息之之后会调调用此函函数,用用户可以以在此方方法中执执行自己己的处理理逻辑8.4..3Storm设计思想想Topology:Storm将Spouts和Bolts组成的网网络抽象象成Topology,它可以被提提交到Storm集群执行行。Topology可视为流转换图图,图中节点是一一个Spout或Bolt,边则表表示Bolt订阅了哪哪个Stream。当Spout或者Bolt发送元组组时,它它会把元元组发送送到每个个订阅了了该Stream的Bolt上进行处处理Topology里面的每每个处理理组件((Spout或Bolt)都包含含处理逻逻辑,而而组件件之间的的连接则则表示数数据流动动的方向向Topology里面的每每一个组组件都是是并行运运行的在Topology里面可以以指定每每个组件件的并行行度,Storm会在集群群里面分分配那么么多的线线程来同同时计算算在Topology的具体实实现上,,Storm中的Topology定义仅仅仅是一些些Thrift结构体((二进制制高性能能的通信信中间件件),支支持各种种编程语语言进行行定义SpoutSpoutBoltBoltBoltBoltBolt8.4..3Storm设计思想想StreamGroupings:Storm中的StreamGroupings用于告知知Topology如何在两两个组件件间(如如Spout和Bolt之间,或或者不同同的Bolt之间)进进行Tuple的传送。。每一个个Spout和Bolt都可以有有多个分分布式任任务,一一个任务务在什么么时候、、以什么么方式发发送Tuple就是由StreamGroupings来决定的的8.4..3Storm设计思想想目前,Storm中的StreamGroupings有如下几几种方式式:(1)ShuffleGrouping:随机分分组,随随机分发发Stream中的Tuple,保证每每个Bolt的Task接收Tuple数量大致致一致(2)FieldsGrouping:按照字字段分组组,保证证相同字字段的Tuple分配到同同一个Task中(3)AllGrouping:广播发发送,每每一个Task都会收到到所有的的Tuple(4)GlobalGrouping:全局分分组,所所有的Tuple都发送到到同一个个Task中(5)NonGrouping:不分组组,和ShuffleGrouping类似,当当前Task的执行会会和它的的被订阅阅者在同同一个线线程中执执行(6)DirectGrouping:直接分分组,直直接指定定由某个个Task来执行Tuple的处理8.4..4Storm框架架设计HadoopStorm应用名称JobTopology系统角色JobTrackerNimbusTaskTrackerSupervisor组件接口Map/ReduceSpout/BoltStorm和Hadoop架构组件件功能对对应关系系Storm运行任务务的方式式与Hadoop类似:Hadoop运行的是是MapReduce作业,而而Storm运行的是““Topology”但两者的任任务大不不相同,,主要的的不同是是:MapReduce作业最终终会完成成计算并并结束运运行,而而Topology将持续处处理消息息(直到到人为终终止)8.4..4Storm框架架设计Storm集群采用用“Master——Worker”的节点点方式:Master节点运行行名为““Nimbus”的后台台程序((类似Hadoop中的“JobTracker”),负负责在集集群范围围内分发发代码、、为Worker分配任务务和监测测故障Worker节点运行行名为““Supervisor”的后台台程序,,负责监监听分配配给它所所在机器器的工作作,即根根据Nimbus分配的任任务来决决定启动动或停止止Worker进程,一个Worker节点上同同时运行行若干个个Worker进程Storm使用Zookeeper来作为分分布式协协调组件件,负责责Nimbus和多个Supervisor之间的所所有协调调工作。借助于于Zookeeper,若Nimbus进程或Supervisor进程意外终止,重启时也也能读取取、恢复之前前的状态态并继续续工作,使得Storm极其稳定定8.4..4Storm框架架设计Storm集群架构构示意图图Worker进程Worker进程Worker进程……8.4..4Storm框架架设计(1)worker::每个worker进程都属属于一个个特定的的Topology,每个Supervisor节点的worker可以有多多个,每每个worker对Topology中的每个个组件((Spout或Bolt)运行一一个或者者多个executor线程来提提供task的运行服服务(2)executor:executor是产生于于worker进程内部部的线程程,会执执行同一一个组件件的一个个或者多多个task。(3)task:实际的数数据处理理由task完成,在在Topology的生命周周期中,,每个组组件的task数目是不不会发生生变化的的,而executor的数目却却不一定定。executor数目小于于等于task的数目,,默认情情况下,,二者是是相等的的Worker、Executor和Task的关系8.4..4Storm框架架设计基于这样样的架构构设计,,Storm的工作流流程如下图所示:Storm工作流程程示意图图所有Topology任务的提提交必须须在Storm客户端节节点上进进行,提提交后,,由Nimbus节点分配配给其他他Supervisor节点进行行处理Nimbus节点首先先将提交交的Topology进行分片片,分成成一个个个Task,分配给给相应的的Supervisor,并将Task和Supervisor相关的信信息提交交到Zookeeper集群上Supervisor会去Zookeeper集群上认认领自己己的Task,通知自自己的Worker进程进行行Task的处理说明:在在提交了了一个Topology之后,Storm就会创建建Spout/Bolt实例并进进行序列列化。之之后,将将序列化化的组件件发送给给所有的的任务所所在的机机器(即Supervisor节点),在每一一个任务务上反序序列化组组件8.5SparkStreaming8.5..1SparkStreaming设计8.5..2SparkStreaming与Storm的对比8.5..1SparkStreaming设设计SparkStreaming可整合多多种输入入数据源源,如Kafka、Flume、HDFS,甚至是是普通的的TCP套接字。。经处理理后的数数据可存存储至文文件系统统、数据据库,或或显示在在仪表盘盘里图13SparkStreaming支持的输输入、输输出数据据源8.5..1SparkStreaming设设计SparkStreaming的基本原原理是将将实时输输入数据据流以时时间片((秒级))为单位位进行拆拆分,然然后经Spark引擎以类类似批处处理的方方式处理理每个时时间片数数据图14SparkStreaming执行流程程8.5..1SparkStreaming设设计SparkStreaming最主要的的抽象是是DStream(DiscretizedStream,离散化化数据流流),表表示连续续不断的的数据流流。在内内部实现现上,SparkStreaming的输入数数据按照照时间片片(如1秒)分成成一段一一段的DStream,每一段段数据转转换为Spark中的RDD,并且对对DStream的操作都都最终转转变为对对相应的的RDD的操作图15DStream操作示意意图8.5..2SparkStreaming与与Storm的的对比SparkStreaming和Storm最大的区区别在于于,SparkStreaming无法实现现毫秒级级的流计计算,而而Storm可以实现现毫秒级级响应SparkStreaming构建在Spark上,一方方面是因因为Spark的低延迟迟执行引引擎(100ms+)可以用用于实时时计算,,另一方方面,相相比于Storm,RDD数据集更更容易做做高效的的容错处处理SparkStreaming采用的小小批量处处理的方方式使得得它可以以同时兼兼容批量量和实时时数据处处理的逻逻辑和算算法,因因此,方方便了一一些需要要历史数数据和实实时数据据联合分分析的特特定应用用场合8.6Samza8.6..1基本概念念8.6..2系统架构构8.6..1基基本概念念1.作业一个作业业(Job)是对一一组输入入流进行行处理转转化成输输出流的的程序。。8.6..1基基本概念念2.分区Samza的流数据据单位既既不是Storm中的元组组,也不不是SparkStreaming中的DStream,而是一一条条消消息Samza中的每个个流都被被分割成成一个或或多个分分区,对对于流里里的每一一个分区区而言,,都是一一个有序序的消息息序列,,后续到到达的消消息会根根据一定定规则被被追加到到其中一一个分区区里8.6..1基基本概念念3.任务一个作业业会被进进一步分分割成多多个任务务(Task)来执行行,其中中,每个个任务负负责处理理作业中中的一个个分区分区之间间没有定定义顺序序,从而而允许每每一个任任务独立立执行YARN调度器负负责把任任务分发发给各个个机器,,最终,,一个工工作中的的多个任任务会被被分发到到多个机机器进行行分布式式并行处处理8.6..1基基本概念念4.数据流图图一个数据据流图是是由多个个作业构构成的,,其中,,图中的的每个节节点表示示包含数数据的流流,每条条边表示示数据传传输多个作业业串联起起来就完完成了流流式的数数据处理理流程由于采用用了异步步的消息息订阅分分发机制制,不同同任务之之间可以以独立运运行8.6..2系系统架构构MapReduce批处理架构Samza流处理架构数据层HDFSKafka执行层YARNYARN处理层MapReduceSamzaAPI表MapReduce批处理架架构和Samza流处理架架构的类类比Samza系统架构构主要包包括流数据层层(Kafka)执行层((YARN)处理层((SamzaAPI)流处理层层和执行行层都被被设计成成可插拔拔的,开开发人员员可以使使用其他他框架来来替代YARN和Kafka8.6..2系系统架构构处理分析析过程如如下:Samza客户端需需要执行行一个Samza作业时,,它会向向YARN的ResouceManager提交作业业请求ResouceManager通过与NodeManager沟通为该该作业分分配容器器(包含含了CPU、内存等等资源))来运行行SamzaApplicationMasterSamzaApplicationMaster进一步向向ResourceManager申请运行行任务的的容器获得容器器后,SamzaApplicationMaster与容器所所在的NodeManager沟通,启启动该容容器,并并在其中中运行SamzaTaskRunnerSamzaTaskRunner负责执行行具体的的Samza任务,完完成流数数据处理理分析8.7Storm、SparkStreaming和Samza的应用场场景从编程的的灵活性性来讲,,Storm是比较理理想的选选择,它它使用ApacheThrift,可以用用任何编编程语言言来编写写拓扑结结构(Topology)当需要在在一个集集群中把把流计算算和图计计算、机机器学习习、SQL查询分析析等进行行结合时时,可以以选择SparkStreaming,因为,,在Spark上可以统统一部署署SparkSQL,SparkStreaming、MLlib,GraphX等组件,,提供便便捷的一一体化编编程模型型当有大量量的状态态需要处处理时,,比如每每个分区区都有数数十亿个个元组,,则可以以选择Samza。当应用用场景需需要毫秒秒级响应应时,可可以选择择Storm和Samza,因为SparkStreaming无法实现现毫秒级级的流计计算8.8Storm编编程实践践8.8..1编写Storm程序8.8..2安装Storm的基本过过程8.8..3运行Storm程序Storm上机实践践详细过过程,请请参考厦厦门大学学数据库库实验室室建设的的“中国高高校大数数据课程程公共服服务平台台”中的的“大数据课课程学生生服务站站”中的““学习指南南”栏目::学生服务务站地址址:http:///dblab../post/4331//学习指南南栏目中中包含了了《第八章流流计算学学习指南南》http:///dblab../blog/767/扫一扫访访问学生生服务站站8.8..1编写Storm程序基于Storm的单词统统计在形形式上与与基于MapReduce的单词统统计是类类似的,,MapReduce使用的是是Map和Reduce的抽象,,而Storm使用的是是Spout和Bolt的抽象Storm进行单词词统计的的整个流流程:从Spout中发送Stream(每个英英文句子子为一个个Tuple)用于分割割单词的的Bolt将接收的的句子分分解为独独立的单单词,将将单词作作为Tuple的字段名名发送出出去用于计数数的Bolt接收表示示单词的的Tuple,并对其其进行统统计输出每个个单词以以及单词词出现过过的次数数程序任务务:单词词统计8.8..1编写Storm程序一个句子子经Storm的单词统统计得出出的结果果importorg.apache.storm.Config;;Import………publicclassWordCountTopology{{publicstaticclassRandomSentenceSpoutextendsBaseRichSpout{{……}publicstaticclassSplitSentenceextendsShellBoltimplementsIRichBolt{{……}publicstaticclassWordCountextendsBaseBasicBolt{{……}publicstaticvoidmain(String[[]args)throwsException{TopologyBuilderbuilder==newTopologyBuilder(();builder.setSpout("sentences"",newRandomSentenceSpout()),5);builder.setBolt(("split",newSplitSentence((),8)..shuffleGrouping("sentences"");builder.setBolt(("count",newWordCount()),12)..fieldsGrouping(("split",newFields(""word")));……}}8.8..1编编写Storm程序Storm的编程模模型非常常简单,,如下代代码即定定义了整整个单词词统计Topology的整体逻逻辑8.8..1编写Storm程序main()函数中的的处理逻逻辑Topology中仅定义义了整体体的计算算逻辑,,还需要要定义具具体的处处理函数数。具体体的处理理函数可可以使用用任一编编程语言言来定义义,甚至至也可以以结合多多种编程程语言来来实现publicclassRandomSentenceSpoutextendsBaseRichSpout{{SpoutOutputCollector__collector;Random__rand;;@OverridepublicvoidnextTuple((){{Utils.sleep(100));String[[]sentences==newString[]{{"thecowjumpedoverthemoon",""anappleadaykeepsthedoctoraway",,"fourscoreandsevenyearsago",""snowwhiteandthesevendwarfs"",""iamattwowithnature""};;Stringsentence==sentences[[_rand..nextInt(sentences..length)];;_collector.emit((newValues(sentence)));}@OverridepublicvoiddeclareOutputFields(OutputFieldsDeclarerdeclarer){{declarer.declare(newFields((“sentences")));}}8.8..1编编写Storm程序备注:为简单起起见,RandomSentenceSpout省略了类类中的一一些方法法RandomSentenceSpout类8.8..1编写Storm程序如SplitSentence()方法虽然然是通过过Java语言定义义的,但但具体的的操作可通过Python脚本来完完成Topology里面的每每个组件件必须定定义它要要发射的的Tuple的每个字字段SplitSentence类8.8..1编写Storm程序Python脚本splitsentence.py定义了一一个简单单的单词词分割方方法,即即通过空空格来分分割单词词。分割割后的单单词通过过emit()方法以Tuple的形式发发送给订订阅了该该Stream的Bolt进行接收收和处理理splitsentence.py8.8..1编写Storm程序单词统计计的具体体逻辑:首先判断断单词是是否统计计过,若若未统计计过,需需先将count值置为0。若单词词已统计计过,则则每出现现一次该该单词,,count值就加1WordCount类8.8..1编写Storm程序上述虽然然是一个个简单的的单词统统计,但但对其进进行扩展展,便可可应用到到许多场场景中,,如微博博中的实实时热门门话题。。Twitter也正是使使用了Storm框架实现现了实时时热门话话题Twitter实时热门门话题处处理流程程示意图图8.8..2安安装Storm的基本本过程安装Storm的基本过过程如下下:第一步::安装Java环境第二步::安装Zookeeper第三步::安装Storm(单机))第四步::关闭Storm本实例中中Storm具体运行行环境如如下:CentOS6.4Storm0.9..6JavaJDK1.7ZooKeeper3.4.6Python2.6备注:CentOS中已默认认安装了了Python2.6,我们还还需要安安装JDK环境以及及分布式式应用程程序协调调服务ZookeeperStorm上机实践践详细过过程,请请参考厦厦门大学学数据库库实验室室建设的的“中国高高校大数数据课程程公共服服务平台台”中的的“大数据课课程学生生服务站站”中的““学习指南南”栏目::学生服务务站地址址:http:///dblab../post/4331//学习指南南栏目中中包含了了《第八章流流计算学学习指南南》http:///dblab../blog/767/8.8..2安安装Storm的基本本过程第一步::安装Java环境Storm运行需要要Java环境,可可选择Oracle的JDK,或是OpenJDK,现在一一般Linux系统默认认安装的的基本是是OpenJDK,如CentOS6.4就默认安安装了OpenJDK1..7。但需要要注意的的是,CentOS6.4中默认安安装的只只是JavaJRE,而不是是JDK,为了开开发方便便,我们们还是需需要通过过yum进行安装装JDK$sudoyuminstalljava-1.7..0-openjdkjava--1.7.0--openjdk-devel接着需要要配置一一下JAVA_HOME环境变量量,为方方便,可可以在~/.bashrc中进行设设置8.8..2安安装Storm的基本本过程第二步::安装Zookeeper到官网下下载Zookeeper,比如下下载“zookeeper-3..4.6.tar.gz”下载后执执行如下下命令进进行安装装zookeeper(将命令令中3.4..6改为你下下载的版版本)::$sudotar-zxf~~/下载/zookeeper-3..4.6.tar.gz--C//usr/local$cd/usr//local$sudomvzookeeper-*zookeeper#修改目录录名称方方便使用用$sudochown--Rhadoop:hadoop../zookeeper##此处的hadoop为你的用用户名chown命令让hadoop用户拥有有zookeeper目录下的的所有文文件的权权限8.8..2安安装Storm的基本本过程接着执行行如下命命令进行行zookeeper配置:$cd/usr//local//zookeeper$mkdirtmp$cp.//conf/zoo__sample.cfg../conf//zoo.cfg$vim../conf//zoo.cfg进入zoo..cfg文件编辑辑状态后后,将当当中的dataDir=/tmp//zookeeper更改为dataDir=/usr//local//zookeeper/tmp。接着执执行:$.//bin/zkServer.shstart第二步::安装Zookeeper(续)8.8..2安安装Storm的基本本过程第三步::安装Storm(单机))到官网下下载Storm,比如Storm0..9.6下载后执执行如下下命令进进行安装装Storm:$sudotar-zxf~~/下载/apache-storm-0..9.6.tar.gz--C//usr/local$cd/usr//local$sudomvapache-storm-0..9.6storm$sudochown--Rhadoop:hadoop../storm##此处的hadoop为你的用用户名接着执行行如下命命令进行行Storm配置:$cd/usr//local//storm$vim../conf//storm..yaml备注:storm的运行有有两种模模式:本地模式式和分布布式模式式.在本地模模式中,,storm用一个进进程里面面的线程程来模拟拟所有的的spout和bolt.本地模式式对开发发和测试试来说比比较有用用。在分分布式模模式下,,storm由一堆机机器组成成。当提提交topology给master的时候,,master负责分发发代码并并且负责责给topolgoy分配工作作进程。。如果一一个工作作进程挂挂掉了,,master节点会把把它重新新分配到到其它节节点8.8..2安安装Storm的基本本过程修改其中中的storm.zookeeper..servers和nimbus..host两个配置置项,即即取消掉掉注释且且都修改改值为127..0.0.1(我们只只需要在在单机上上运行)),如下下图所示示。第三步::安装Storm(单机))(续续)然后就可可以启动动Storm了。执行行如下命命令启动动nimbus后台进程程:$.//bin/stormnimbus8.8..2安安装Storm的基本本过程启动nimbus后,终端端被该进进程占用用了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论