一.SparkStreaming简介

  SparkStreaming是核心Spark API的扩展,可以实现实时【准实时】数据流的可伸缩、高吞吐及容错处理。数据可以从像Kafka、Flume、HDFS/S3、Twitter或TCP套接字等许多来源获取。并且可以使用高级的算子例如,map,reduce,join和window等。最后,可以将处理后的数据推送到文件系统,数据库和实时仪表盘。实际上,它还可以在数据集上应用Spark的机器学习和图像处理算法。

  

  在内部,它的工作方式如下:SparkStreaming接收实时输入数据流,并将数据分成微批处理,然后由Spark引擎进行处理,以分批生成最终结果流。

  

  SparkStreaming提供了称为离散流或DStream的高级抽象,它表示连续的数据流。可以根据来自Kafka,Flume和Kinesis等来源的输入数据流来创建DStream,也可以通过对其它DStream应用高级的算子来转换成新的DStream。在内部,DStream为RDD的序列。

二.SparkStreaming特点

  1.便于使用

    Spark Streaming将Apache Spark的 语言集成API 引入流处理,使您可以像编写批处理作业一样编写流式作业。它支持Java,Scala和Python。

  2.容错

    Spark Streaming可以开箱即用,恢复丢失的工作和操作状态【例如滑动窗口】,而无需任何额外的代码。

  3.Spark集成

    将流式传输与批量交互式查询相结合。通过在Spark上运行,Spark Streaming允许您重复使用相同的代码进行批处理,将流加入历史数据,或者在流状态下运行即席查询。构建强大的交互式应用程序,而不只是分析。

  4.部署选项

    Spark Streaming可以从HDFS, FlumeKafka, Twitter和 ZeroMQ读取数据 。您还可以定义自己的自定义数据源。

在Spark的独立集模式 或其它受支持的集群资源管理器上运行Spark Streaming 。它还包括一个本地运行模式进行开发。在生产中,Spark Streaming使用ZooKeeperHDFS实现高可用性。

三.代码实现

package big.data.analyse.streaming

import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext} /**
* Created by zhen on 2017/11/19.
*/
object StreamingDemo {
Logger.getLogger("org").setLevel(Level.WARN) // 设置日志级别
def main(args: Array[String]) {
val conf = new SparkConf().setMaster("local[2]").setAppName("StreaingTest")
val ssc = new StreamingContext(conf,Seconds(10))
val lines = ssc.socketTextStream("master",) // 与nc端口对应
val words = lines.flatMap(_.split(" "))
val pairs = words.map(word=>(word,1)).reduceByKey(_+_)
pairs.foreachRDD(row => row.foreach(println))
ssc.start()
ssc.awaitTermination()
ssc.stop()
}
}

  注意:还可以使用sparkContext创建StreamingContext,例如:new StreamingContext(sc, Seconds(1))

四.启动nc和执行程序

  1.简介

    NetCat简称nc,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

  2.启动

    

  3.执行

    ./bin/run-example streaming.NetworkWordCount master 9999

五.执行结果

  nc端: 

    

  Spark Streaming端:

    

    

六.备注

  1.streamingContext.start()表示开始接受数据并进行处理。

  2.streamingContext.awaitTermination()表示等待停止使用【手动或由于任何错误】。

  3.streamingContext.stop()表示可以是有手动停止。

  4.一旦启动stremingContext,就无法设置新的流计算或将其添加到该流计算中。

  5.streamingContext一旦停止,就无法重新启动。

  6.streamingContext上的stop也会关闭sparkContext。要仅停止streamingContext,需要设置可选参数stopSparkContext为false。

  7.只要在创建下一个streamingContext之前停止【不停止SparkContext】上一个StreamingContext,即可将SparkContext重新用于创建多个StreamingContext。

  8.在本地模式时,请勿使用local或local[1]。这两种方式均意味着仅有一个线程用于运行本地任务。如果你使用的是基于接收器的输入DStream,则将使用单个线程来运行接收器,而不会留下线程来处理接收到的数据。因此,在本地运行时,请始终使用local[n],其中n>要运行的接收者数。

Spark Streaming 快速入门的更多相关文章

  1. 学习笔记:spark Streaming的入门

    spark Streaming的入门 1.概述 spark streaming 是spark core api的一个扩展,可实现实时数据的可扩展,高吞吐量,容错流处理. 从上图可以看出,数据可以有很多 ...

  2. Spark2.x学习笔记:Spark SQL快速入门

    Spark SQL快速入门 本地表 (1)准备数据 [root@node1 ~]# mkdir /tmp/data [root@node1 ~]# cat data/ml-1m/users.dat | ...

  3. Spark Streaming 编程入门指南

    Spark Streaming 是核心Spark API的扩展,可实现实时数据流的可伸缩,高吞吐量,容错流处理.可以从许多数据源(例如Kafka,Flume,Kinesis或TCP sockets)中 ...

  4. Spark GraphX快速入门

    GraphX是Spark用于图形并行计算的新组件.在较高的层次上,GraphX通过引入一个新的Graph抽象来扩展Spark RDD:一个定向的多图,其属性附加到每个定点和边.为了支持图计算,Grap ...

  5. Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN

    快速入门 使用 Spark Shell 进行交互式分析 基础 Dataset 上的更多操作 缓存 独立的应用 快速跳转 本教程提供了如何使用 Spark 的快速入门介绍.首先通过运行 Spark 交互 ...

  6. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...

  7. Spark Streaming入门

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文将帮助您使用基于HBase的Apache Spark Streaming.Spark Streaming是Spark API核心的一个扩 ...

  8. [转] Spark快速入门指南 – Spark安装与基础使用

    [From] https://blog.csdn.net/w405722907/article/details/77943331 Spark快速入门指南 – Spark安装与基础使用 2017年09月 ...

  9. Spark快速入门 - Spark 1.6.0

    Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...

随机推荐

  1. .net Lambda表达式与Linq (LINQ TO object)

    Lambda表达式,是用来写匿名方法的. 在委托用得比较多,因为委托是传递方法的.   定义几个委托: public delegate void DoNoThing();//无参无返回值   publ ...

  2. MySQL8.0新特性——支持原子DDL语句

    MySQL 8.0开始支持原子数据定义语言(DDL)语句.此功能称为原子DDL.原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中.即使服务器在操作期间暂 ...

  3. 为View设置左右切换动画

    本文同步自http://javaexception.com/archives/64 问题: 近期的需求中,碰到了一个view切换动画的需求.要实现的是点击按钮,从左到右滑动view,左边的view消失 ...

  4. 还在用AIDL吗?试试EasyMessenger吧

    EasyMessenger 直达Github项目地址 一款用于Android平台的基于Binder的进程间通信库,采用annotationProcessor生成IPC通信需要的代码.EasyMesse ...

  5. Nginx 一个高性能的HTTP和反向代理服务器

    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解过,欢迎留言交流. Nginx能做什么 ——反向 ...

  6. SQL 高效运行注意事项(二)

    SQL Server高效运行总的来说有两种方式: 一. 扩容,提高服务器性能,显著提高CPU.内存,解决磁盘I/O瓶颈.硬件的提升是立竿见影的,而且是风险小,在硬件更新换代非常快的年代, 当SQLSe ...

  7. 自学python的日记分享

    2019.4.22登记 课堂笔记 2019.4.8 在windows环境下,用python写出第一个程序“hello world” print("Hello World!!!") ...

  8. Kubernetes 笔记 012 Pod 的自动扩容与缩容

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...

  9. python之读取配置文件模块configparser(二)参数详解

    configparser.ConfigParser参数详解 从configparser的__ini__中可以看到有如下参数: def __init__(self, defaults=None, dic ...

  10. kubernetes系列09—Ingress控制器详解

    本文收录在容器技术学习系列文章总目录 1.认识Ingress 1.1 什么是Ingress? 通常情况下,service和pod仅可在集群内部网络中通过IP地址访问.所有到达边界路由器的流量或被丢弃或 ...