spark Streaming的入门

   1.概述

     spark streaming 是spark core api的一个扩展,可实现实时数据的可扩展,高吞吐量,容错流处理。

     从上图可以看出,数据可以有很多来源,如kafka,flume,Twitter,HDFS/S3,Kinesis用的比较少;这些采集回来的数据可以使用以高级的函数(map,reduce等)表达的复杂算法进行处理,经过sparkstreaming框架处理后的数据可以推送到文件系统,数据板或是实时仪表板上;除此之外,我们还可以在数据流上应用spark的机器学习算法和图像处理算法。

    spark streaming简单的个人定义:将不同数据源的数据经过spark Streaming框架处理之后将结果输出到外部文件系统。

    特点:

      低延迟

      能从错误中高效的恢复:fault-tolerant

      能够运行在成百上千的节点上

      能将批处理、机器学习、图计算等子框架和spark streaming综合起来使用

   2.应用场景:

     实时反映电子设备实时监测

     交易过程中实时的金融欺诈

     电商行业的推荐信息

   3.集成spark生态系统的使用

     

     spark SQL、spark streaming、MLlib和GraphX都是基于spark core的扩展和开发,那它们是如何进行交互的?(后期补充)

  4.spark的发展史

    

      

   5.从词频统计功能着手Spark Streaming入门

    • spark-submit执行(开发)

      1. package org.apache.spark.examples.streaming
      2.  
      3. import org.apache.spark.SparkConf
      4. import org.apache.spark.storage.StorageLevel
      5. import org.apache.spark.streaming.{Seconds, StreamingContext}
      6.  
      7. /**
      8. * Counts words in UTF8 encoded, '\n' delimited text received from the network every second.
      9. *
      10. * Usage: NetworkWordCount <hostname> <port>
      11. * <hostname> and <port> describe the TCP server that Spark Streaming would connect to receive data.
      12. *
      13. * To run this on your local machine, you need to first run a Netcat server
      14. * `$ nc -lk 9999`
      15. * and then run the example
      16. * `$ bin/run-example org.apache.spark.examples.streaming.NetworkWordCount localhost 9999`
      17. */
      18. object NetworkWordCount {
      19. def main(args: Array[String]) {
      20. if (args.length < ) {
      21. System.err.println("Usage: NetworkWordCount <hostname> <port>")
      22. System.exit()
      23. }
      24.  
      25. StreamingExamples.setStreamingLogLevels()
      26.  
      27. // Create the context with a 1 second batch size
      28. val sparkConf = new SparkConf().setAppName("NetworkWordCount")
      29. val ssc = new StreamingContext(sparkConf, Seconds())
      30.  
      31. // Create a socket stream on target ip:port and count the
      32. // words in input stream of \n delimited text (eg. generated by 'nc')
      33. // Note that no duplication in storage level only for running locally.
      34. // Replication necessary in distributed scenario for fault tolerance.
      35. val lines = ssc.socketTextStream(args(), args().toInt, StorageLevel.MEMORY_AND_DISK_SER)
      36. val words = lines.flatMap(_.split(" "))
      37. val wordCounts = words.map(x => (x, )).reduceByKey(_ + _)
      38. wordCounts.print()
      39. ssc.start()
      40. ssc.awaitTermination()
      41. }
      42. }
      43.  
      44. 使用spark-submit方式提交的命令如下(不懂看代码前面的解析):
      45. ./spark-submit --master local[] --class org.apache.spark.examples.streaming.NetworkWordCount --name NetworkWordCount /home/hadoop/app/spark/eaxmple/jars/spark-example_2.-2.2..jar hadoop0000
    • spark-shell执行(测试)
      1. val ssc = new StreamingContext(sparkConf, Seconds())
      2. val lines = ssc.socketTextStream("hadoop000", )
      3. val words = lines.flatMap(_.split(" "))
      4. val wordCounts = words.map(x => (x, )).reduceByKey(_ + _)
      5. wordCounts.print()
      6. ssc.start()
      7. ssc.awaitTermination()

      只需要运行./spark-shell --master loacal[2],之后直接把代码拷贝上去运行即可。

   6.工作原理

     粗粒度:spark streaming接受实时数据流,把数据按照指定的时间段切成一片片小的数据块(spark streaming把每个小的数据块当成RDD来处理),然后把这些数据块传给Spark Engine处理,处理完之后的结果也是分批次的返回。

        

       细粒度:application中有两个context,SparkContext和StreamingContext,使用receiver来接收数据。run receivers as taskes去executor上请求数据,当executor接收到数据后会将数据按时间段进行切分并存放在内存中,如设置了多副本将会拷贝到其他的Exceutor上进行数据的备份(replicate blocks), exceutor的receiver会将blocks的信息告诉StreamingContext, 每到指定的周期 StreamingContext 将会通知SparkContext启动jobs并把这些jobs分发到exceutor上执行。

学习笔记:spark Streaming的入门的更多相关文章

  1. Spark学习笔记——Spark Streaming

    许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用, 还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它允许用户 ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  4. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  5. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. 【转载】【时序约束学习笔记1】Vivado入门与提高--第12讲 时序分析中的基本概念和术语

    时序分析中的基本概念和术语 Basic concept and Terminology of Timing Analysis 原文标题及网址: [时序约束学习笔记1]Vivado入门与提高--第12讲 ...

  7. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  8. Spark学习之Spark Streaming(9)

    Spark学习之Spark Streaming(9) 1. Spark Streaming允许用户使用一套和批处理非常接近的API来编写流式计算应用,这就可以大量重用批处理应用的技术甚至代码. 2. ...

  9. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

随机推荐

  1. 基于Qt的图像处理技术和算法

    https://blog.csdn.net/silangquan/article/details/41008183

  2. SQL SEVER 开窗函数总结

    作为一名刚刚入门的开发人员,要学的东西很多很多,有些无从下手.秉着“问题是病.技术是药.对症下药”的原则,将工作中遇到的问题所需的技术进行梳理.归纳和总结. 一.什么是开窗函数 首先,什么是开窗函数, ...

  3. javascript 十进制转换为二进制

    1.十进制转换为二进制 var toBin = (n) => { if(n == 0) return '0'; var res = ''; while(n != 0) { res = n % 2 ...

  4. Android Studio修改apk打包生成名称

    在app的build.gradle文件的android{}括号里添加: android.applicationVariants.all { variant -> variant.outputs. ...

  5. 使用eclipse新建一个c项目

    一.打开eclipse并新建项目 1.快捷键:字体放大:Ctrl+Shift+“+” 字体缩小:Ctrl+“-”  

  6. 在IIS托管服务中设置Rewrite重定向到webapi接口

    最近公司遇到这样一个问题.公司以前使用一个SiteServer CMS开源框架来搭建网站,是以asp.net开发的,并且托管在IIS中.其中出现了一个问题,就是用ajax访问不了这个框架后台的weba ...

  7. CentOS-7-1804下MySQL安装及防火墙设置

    第一步,下载MySQL Linux 版本安装包,这里使用 这个版本. 第二步,上传安装包到Linux系统中. 第三步,解压安装包 tar -zxvf mysql--linux-glibc2.-x86_ ...

  8. method.invoke()s

    在框架中经常会会用到method.invoke()方法,用来执行某个的对象的目标方法.以前写代码用到反射时,总是获取先获取Method,然后传入对应的Class实例对象执行方法.然而前段时间研究inv ...

  9. Java实训:实训一 ——长春职业技术学院 16级网络工程

    Java实训:实训一 本文会解释一些设计思路. 想看具体过程,请转:https://www.cnblogs.com/lxwlxw/p/10114187.html 笑维的码云项目命名不太对,所以我来:h ...

  10. python入门(四)

    今天主要记录下python中文件的编辑与函数. 一.修改文件 一)简单粗暴--直接修改 1.打开一个文件,获取到所有内容2.对内容进行修改3.清空原来的文件4.把新的内容写进去 f = open('u ...