Spark Streaming初探

原创 2014年04月14日 18:32:19

Spark Streaming初探

Spark Streaming是一个基于Spark核心的流式计算的扩展。

主要有以下两个特点:

1. 高吞吐量

2. 容错能力强

1.原理:

Spark Streaming支持多种数据源的输入,向Flume,Kafka,HDFS,ZeroMQ,Twitter以及原始的TCP sockets。

数据可以使用Spark的RDD的Transformation,也可以应用很多Spark内置的机器学习算法,还有图计算。

以下是Spark官方截图:


1.1主要实现原理

Spark Streaming会接收线上的数据流,然后将数据流分成独立的批次。

然后Spark Streaming Engine就会分别处理这些独立的批数据,最后生成分批的结果。


Spark Streaming 提出了一种高度的抽象叫 DStream(discretized stream)离散流,代表了一段持续的数据流。

创建DStream可以从文件创建,也可以从Kafka或者Flume,代表了一个RDD的序列。


2.WorkCount流式计算实例

摘自官方例子的代码:
package org.apache.spark.streaming.examples

import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.storage.StorageLevel

object NetworkWordCount {
  def main(args: Array[String]) {
    if (args.length < 3) {
      System.err.println("Usage: NetworkWordCount <master> <hostname> <port>\n" +
        "In local mode, <master> should be 'local[n]' with n > 1")
      System.exit(1)
    }

    StreamingExamples.setStreamingLogLevels()

    // Create the context with a 1 second batch size
    val ssc = new StreamingContext(args(0), "NetworkWordCount", Seconds(1),
      System.getenv("SPARK_HOME"), StreamingContext.jarOfClass(this.getClass))

    // Create a NetworkInputDStream on target ip:port and count the
    // words in input stream of \n delimited text (eg. generated by 'nc')
    val lines = ssc.socketTextStream(args(1), args(2).toInt, StorageLevel.MEMORY_ONLY_SER)
    val words = lines.flatMap(_.split(" "))
    val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
    wordCounts.print()
    ssc.start()
    ssc.awaitTermination()
  }
}

首先我们需要建立一个发送数据的端口连接:
nc -lk 9999
进程会阻塞,当我们输入数据的时候,会向9999这个端口发送我们的数据。

首先我们先创建一个Spark Streaming engine
现在我们需要Spark Streaming Engine来监听这个端口。
 val ssc = new StreamingContext(args(0), "NetworkWordCount", Seconds(1),
      System.getenv("SPARK_HOME"), StreamingContext.jarOfClass(this.getClass))


这里args(1)就是ip, args(2)就是port
我们看到这里实践是创建了一个socketTextStream,其实还有很多选择。
StorageLevel是Memory_only,很明显,创建的是一个RDD
val lines = ssc.socketTextStream(args(1), args(2).toInt, StorageLevel.MEMORY_ONLY_SER)

WordCount的逻辑很简单,这里不赘述。
最后要启动Spark Streaming要使用这句:
ssc.start()
ssc.awaitTermination()

运行结果:
1.在终端输入
# nc -lk 9999
what is your name ? 
my name is sheng li ~ haha



-------------------------------------------
Time: 1397470893000 ms
-------------------------------------------
(is,1)
(what,1)
(your,1)
(?,1)
(name,1)

-------------------------------------------
Time: 1397470894000 ms

-------------------------------------------
Time: 1397470962000 ms
-------------------------------------------
(haha,1)
(my,1)
(is,1)
(~,1)
(li,1)
(sheng,1)
(name,1)

大致流程:
1.Spark Streaming Engine 监听9999这个端口发送的信息,当作数据源,其实是一个RDD。
2.这里会有一个lines是一个DStream,是一个不可变的分布式弹性数据集。
lines实际上是带一个带版本的RDD,每一个时刻它代表的是不同的数据,比如第一个输入的是what is your name,那么这个时刻Lines代表的是这句话。
第二次输入的是my name is shengli ~ haha 这是另一个时刻的Lines。
3.DStream可以应用和RDD一样的API,其中Transformation变形成其它的RDD。
这里会变成Words DStream。

4.最后计算完成,输出wordCounts.print()。


总结:

实际上每次的input都是一个RDD@time N

每个RDD@time N 都可以被transform成其它的RDD进行处理。

看起来相当简单。


再来看下官方的解释图,会很好的理解:




参考文献:http://spark.apache.org/docs/0.9.1/streaming-programming-guide.html


原创文章,转载注明出处http://blog.csdn.net/oopsoom/article/details/23692079

Spark-Spark Streaming例子整理(一)

(摘自王家林) 流(Streaming),在大数据时代为数据流处理,就像水流一样,是数据流;既然是数据流处理,就会想到数据的流入、数据的加工、数据的流出。 日常工作、生活中数据来源很多不同...
  • youdianjinjin
  • youdianjinjin
  • 2016年05月19日 11:50
  • 36854

Spark2.1.0文档:Spark Streaming 编程指南(上)

本文翻译自spark官方文档,仅翻译了Scala API部分,目前版本为2.1.0,如有疏漏错误之处请多多指教。 原文地址:http://spark.apache.org/docs/latest/st...
  • u013468917
  • u013468917
  • 2017年05月06日 18:11
  • 2096

sparkStreaming

速查手册: 1,读取socket端数据   JavaReceiverInputDStream lines = jssc.socketTextStream("master", 9999); 2,监控HD...
  • u011263983
  • u011263983
  • 2016年05月16日 18:38
  • 1107

SparkStreaming如何优雅的停止服务

我们都知道SparkStreaming程序是一个长服务,一旦运转起来不会轻易停掉,那么如果我们想要停掉正在运行的程序应该怎么做呢? 如果运行的是spark on yarn模式直接使用 yarn...
  • u010454030
  • u010454030
  • 2017年03月22日 13:55
  • 2621

Spark Streaming 教程文档--概述、基本概念、性能调优

SparkStreaming教程 本文章主要讲述SparkStreaming概念原理、基本概念、以及调优等一些知识点。 1      概述 1.1  SparkStreaming是什么 Spark S...
  • a822631129
  • a822631129
  • 2017年03月31日 17:05
  • 1755

sparkstreaming完整例子

博客地址:http://www.fanlegefan.com 原文地址:http://www.fanlegefan.com/index.php/2017/07/19/sparkstreamingliz...
  • woloqun
  • woloqun
  • 2017年07月25日 09:49
  • 1614

Spark 以及 spark streaming 核心原理及实践

导语 spark 已经成为广告、报表以及推荐系统等大数据计算场景中首选系统,因效率高,易用以及通用性越来越得到大家的青睐,我自己最近半年在接触spark以及spark streaming之后,对...
  • zhigang1007
  • zhigang1007
  • 2017年12月14日 21:30
  • 82

org.apache.spark.examples.streaming.StreamingExamples Scala 版本 无Java版本

org.apache.spark.examples.streaming.StreamingExamples  Scala 版本 无Java版本 这个模块就设置了日志级别,在org.apache.sp...
  • duan_zhihua
  • duan_zhihua
  • 2016年04月23日 08:55
  • 1658

整合Kafka到Spark Streaming——代码示例和挑战

作者Michael G. Noll是瑞士的一位工程师和研究员,效力于Verisign,是Verisign实验室的大规模数据分析基础设施(基础Hadoop)的技术主管。本文,Michael详细的演示了如...
  • stark_summer
  • stark_summer
  • 2015年03月03日 14:58
  • 114561

通过案例对SparkStreaming 透彻理解三板斧之一:解密SparkStreaming另类实验

从spark框架的角度来说,spark包含了如下图所示的功能: 从最近spark发布的几个版本来看,GraphX一直没有大的变化,MLlib涉及大量的数学,spark sql则是涉及了大量的sq...
  • feihuanzhuimeng8
  • feihuanzhuimeng8
  • 2016年05月02日 13:31
  • 2104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spark Streaming初探
举报原因:
原因补充:

(最多只允许输入30个字)