通过案例对SparkStreaming透彻理解三板斧之一

7 篇文章 0 订阅
6 篇文章 0 订阅

I.Spark Streaming另类在线实验

II.瞬间理解Spark Streaming本质

扩展Spark的内容来适合自己的业务模型,自己能够进行框架的维护,就好比你拿到一个开源源代码,即使你编译引用库,那么你后期的维护和后期的扩展都会受到极大的限制,如果你自己依据于Spark的源码进行改造,那么自己后期的维护和扩展都是依赖于自己的设计来适合公司的业务逻辑,从而方便维护和可扩展

Spark Streaming本来就是Spark Core中的一个子框架,为什么选Spark Streaming,目前用的最多的是Spark core,Spark SQL涉及到很多SQL语法的解析和优化,不适合作为一个子框架来研究,而Spark R不太成熟支持的功能有限,Spark Graph似乎没有扩展,那么Spark Graph后期的发展可能不大,并且图计算涉及到很多数学级别的算法,机器学习关键是大部分的库涉及到太多的数学知识,所以选择Spark Streaming作为学习的基石。

超过50%的人认为Spark StreamingSpark开发人员最具有吸引力,大家考虑使用Spark主要是Spark Streaming

1.流式计算,这是一个流处理的时代,一切数据如果不是流的方式,那么就是一个无效的数据

2.流式处理才是真正的我们对大数据的真正影响,而不是批处理和数据挖掘,Spark非常强悍的是可以在线的利用spark R,Spark图计算,Spark SQL,你根本不需要任何的设置,Spark Streaming 就可以调用其它的子框架。

3.整个Spark的所有程序,基于Spark Streaming的程序最容易出问题,因为数据是不断流动的,要动态地控制数据的流入,作业的切分和数据的处理,数据量的不确定性

4.其实Spark Streaming与其他子框架的不同之处在于,Spark Streaming很像Spark Core之上的一个应用程序

通过将Spark Streaming中的batch interval放到足够的大,从而方便理解整个过程

二.Spark Streaming另类在线实验

附上Spark在线黑名单程序如下:
package com.dt.spark.com.dt.spark.streaming
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

/*DT大数据梦工厂微信公众号DT_Spark */


/**
  * 使用Scala开发的集群运行的Spark 在线黑名单过虑的程序
  *
@author DT大数据梦工厂
  * 背景描述:在广告点击计费系统中,我们在线过滤黑名单的点击,进而保护广告商的利益,只进行有效的广告商利益或者在防刷屏评分(或者流量)系统,过滤掉无效的投票或者评分或者流量
  * 实现技术:使用trasform API直接基于RDD编程,进行join操作
  */
object OnlineBlackListFilter {
   def main(args: Array[ String]){
     /**
      * 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
      * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置
      * 为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如
      * 只有1G的内存)的初学者       *
      */
    
val conf = new SparkConf() //创建SparkConf对象
    
conf.setAppName( "OnlineBlackListFilter") //设置应用程序的名称,在程序运行的监控界面可以看到名称
    
conf.setMaster( "spark://Master:7077") //此时,程序在本地运行,不需要安装Spark集群
    
val ssc = new StreamingContext(conf, Seconds( 300))
     //黑名单数据准备,实际上黑名单一般都是动态的,例如在Redis或者数据库中,黑名单的生成往往有复杂的逻辑,具体情况算法不同,但是
    //在Spark Streaming进行处理的时候每次都能访问完整的信息
    
val blackList = Array(( "Hadoop", true), ( "mahout", true))
     val blackListRDD = ssc.sparkContext.parallelize(blackList, 4)
     val adsClickStream = ssc.socketTextStream( "Master", 9999)

     /*此处模拟的是广告点击的每条数据的格式:time,name此处map操作的结果是name,(time,name)的格式*/
   
val adsClickStreamFormatted = adsClickStream.map{ads => (ads.split( " ")( 1),ads)}
    adsClickStreamFormatted.transform(userClickRDD => {
       //通过leftOuterJoin操作标刘了左侧用户广告点击内容的RDD的所有内容,又获得了相应点击内容是否过滤
      
val joinedBlackListRDD = userClickRDD.leftOuterJoin(blackListRDD)
       /*进行filter过滤的时候,起输入元素是一个Tuple:(name,((time,name),boolean))
      * 其中第一个元素是黑名单的名称,第二个元素的第二个元素是进行leftOuterJoin的时候是否存在值
      * 如果村在的话,表示当前广告点击的是黑名单,需要过滤掉,否则的话则是有效点击内容:
      * */

/*IMF晚8点大数据实战YY直播频道号:68917580*/
      
val validClicked = joinedBlackListRDD.filter(joinedItem => {
        if(joinedItem._2._2.getOrElse(false)){
          false
        
}else{
          true
        
}
      })
      validClicked.map(validClicked => {validClicked._2._1})
    }).print()
    ssc.start()
    
ssc.awaitTermination()
    ssc.stop()
  }
}

将程序的Batch Interval 设置为300

 val ssc = new StreamingContext(conf,Seconds(300))

启动数据发送端口:nc -kl 9999

[root@Master sbin]# nc -kl 9999

123 Hadoop

345 Spark

789 Hadoop

899 AAA

999 BBB

111 CCC

运行完毕后查看History日志记录

 

发现应用执行的时间为3.1min

进入应用查看每个job的执行情况

发现一共完成了5job

   点击进入job id0job查看发现

 

MakeRDD作为整个job的一个独立的Stage,只是在一个Worker Node上执行,此Job不体现我们的业务逻辑代码。这个Job是出于对后面计算的负载均衡的考虑

Job 1:运行的是时间花了2.8min而且只有一个stage

 

点击stage发现:

原来Receiver是通过一个Job来启动的。那肯定有一个Action来触发它。

 查看Tasks部分:


只有一个Worker运行此Job。是用于接收数据。

 Locality LevelPROCESS_LOCAL,原来是内存节点。所以,默认情况下,数据接收不会使用磁盘,在内存足够大的情况下会直接使用内存中的数据。

那么它就是一个专门用来接收数据的线程,一直进行listen/reciver数据

从而我们发现:Spark Streaming中可以启动很多Job,而且每个job可以互相配合

  Job 2:看Details可以发现整个代码的流动过程,体现在Stage 3Stage 4Stage 5


发现stage4是在两个worker上执行,且启动4个task


Stage 5只在Worker4上。这是因为这个Stage有Shuffle操作。

三. 瞬间理解Spark Streaming本质


DStream是一个没有边界的集合,但是没有大小的限制,不但的产生RDD,对于DStream的处理是作用在RDD

       Spark Streaming接收KafkaFlumeHDFSKinesis等各种来源的实时数据输入,进行处理后,处理结果保存在HDFSDatabases等各种地方。

 Spark Streaming接收这些实时输入数据流,会将他们按批次划分,然后交给Spark引擎处理,生成按照批次划分的结果流。

 Spark Streaming提供了表示连续数据流的,高度抽象的被称为离散流的DstreamDstream本质上表示RDD的序列。任何对DStream的操作都会转变为对底层RDD的操作

 Spark Streaming使用数据源产生的数据流创建Dstream,也可以在已有的Dstream上使用一些操作来创建新的Dstream.

DStream是一个没有边界的集合,没有大小的限制。

DStream代表了时空的概念。随着时间的推移,里面不断产生RDD

锁定到时间片后,就是空间的操作,也就是对本时间片的对应批次的数据的处理。

下面用实例来讲解数据处理过程。


Spark Streaming程序转换为Spark执行的作业的过程中,使用了DstreamGraph.

    Spark Streaming程序中一般会有若干个对DStream的操作,DstreamGraph就是由这些操作的依赖关系构成。

本例中,从每个foreach开始,都会进行回溯,从后往前回溯这些操作之间的依赖关系,也就形成了DstreamGraph

    执行从Dstream到RDD的转换,也就形成了RDD Graph,如下图所示:

新浪微博:http://www.weibo.com/ilovepains


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据透彻理解全文共14页,当前为第1页。对大数据透彻理解全文共14页,当前为第1页。对大数据透彻理解大数据透彻理解全文共14页,当前为第1页。 对大数据透彻理解全文共14页,当前为第1页。 一、 大数据基本概念 大数据Big Data是指大小超出了常用的软件工具在运行时间内可以承受的收集,管理和处理数据能力的数据集;大数据是目前存储模式与能力、计算模式与能力不能满足存储与处理现有数据集规模产生的相对概念。 大数据的预处理 主要完成对已接收数据的辨析、抽取、清洗等操作。 (1)抽取:因获取的数据可能具有多种结构和类型,数据抽取过程可以帮助我们将这些复杂的数据转化为单一的或者便于处理的构型,以达到快速分析处理的目的。 (2)清洗:对于大数据,并不全是有价值的,有些数据并不是我们所关心的内容,而另一些数据则是完全错误的干扰项,因此要对数据通过过滤"去噪"从而提取出有效数据。 大数据带来的数学问题 在数学上来看,计算机中存在不断变大的数据集,不存在绝对的大数据,计算机中的所有数据集都是有限集合。 大数据采样——把大数据变小、找到与算法相适应的极小样本集、采样对算法误差的影响 大数据表示——表示决定存储、表示影响算法效率 大数据不一致问题——导致算法失效和无解、如何消解不一致 大数据中的超高维问题——超高维导致数据稀疏、算法复杂度增加 大数据中的不确定维问题——多维度数据并存、按任务定维难 大数据中的不适定性问题——高维导致问题的解太多难以抉择 大数据的特征 稠密与稀疏共存:局部稠密与全局稀疏 冗余与缺失并在:大量冗余与局部缺失 显式与隐式均有:大量显式与丰富隐式 静态与动态忽现:动态演进与静态关联 多元与异质共处:多元多变与异质异性 量大与可用矛盾:量大低值与可用稀少 对大数据透彻理解全文共14页,当前为第2页。对大数据透彻理解全文共14页,当前为第2页。目前大数据的外延 对大数据透彻理解全文共14页,当前为第2页。 对大数据透彻理解全文共14页,当前为第2页。 大数据规模大小是一个不断演化的指标: 当前任务处理的单一的数据集,从数十TB到十几PB级的数据规模(TB«PB«EB«ZB) 处理大数据的可等待的合理时间依赖任务的目标: 地震数据预测要求在几分钟内才有效、气象数据应该在小时级别、失联飞机数据处理要在7天之内、数据挖掘一般要求在12小时内 二、 大数据悖论 大数据已被定义为科学探索的第四范式。继几千年前的实验科学、数百年前的理论科学和数十年前的计算 科学之后,当今的数据爆炸孕育了数据密集型科学,将理论、实验和计算仿真等范式统一起来。大数据已被誉为"非竞争性"生产要素。大数据具有"取之不尽,用 之不竭"的特性,在不断的再利用、重组和扩展中持续释放其潜在价值,在广泛的公开、共享中不断创造着新的财富。根源在于,大数据的价值在于预测未知领域、 非特定因素的未来趋势,在于破解长期的、普遍的社会难题。而目前的大数据技术和应用,依然局限于历史和实时数据的关联分析,局限于满足短线的、特定的市场 需求。解决悖论的过程,恰恰是理论和方法应运而生的过程。而人们试图解决悖论的努力,正好是大数据落地生根的推动力。 方法论缺位 自2008年《自然》杂志推出"大数据"专刊以来,大数据概念就从学术大讨论,转向了企业的数字化 转型,进而上升到"开放政府数据"的战略布局。然而,单纯的数量上的规模庞大,并不能轻易地将大数据与以往的"海量数据"、"超大规模数据"等区别开,因 为三者均没有设置数量级等门槛。 方法论缺位是最大的障碍。大数据发展的核心动力源于人们测量、记录和分析世界的渴望,满足这些渴望 需要数据、技术和思维三大要素。在计算技术、通信技术日益成熟的今天,在廉价的、便捷的数字化存储普及的当下,数据无处不在,技术正以标准化、商品化的方 式提供,事实上思维和方法论才是决定大数据成败的关键,但目前来看,跨越学术与产业、技术与应用之间鸿沟的方法论依然不完善。 对大数据透彻理解全文共14页,当前为第3页。对大数据透彻理解全文共14页,当前为第3页。在社会难题中淘金 对大数据透彻理解全文共14页,当前为第3页。 对大数据透彻理解全文共14页,当前为第3页。 正如数学史上三次危机分别促成公理几何的诞生、集合论的创立和现代数据的发展一样,悖论是理论、技 术和应用进步的巨大推动力。大数据悖论的解决,也将推动大数据应用的普及和社会价值的释放。经过新闻媒体和学术会议的大肆宣传之后,大数据技术趋势一下子 跌到谷底,许多数据创业公司变得岌岌可危……根据这条著名的Gartner技术成熟度曲线,大数据已经走过了萌芽期和泡沫化的炒作期,并将在未来3~5年 内步入低谷期。 市场中的鸿沟 大数据营销模型将经历创新者、早期采用者、早期大众、后期大众和落后者等5

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值