首页 > 其他分享 >学习笔记8

学习笔记8

时间:2024-01-20 22:11:35浏览次数:17  
标签:转换 Streaming 笔记 学习 RDD 操作 Spark DStream

Streaming 原理
可以参考官网教程:http://spark.apache.org/docs/latest/streaming-programming-guide.html,Spark Streaming提供了称为离散流或DStream的高级抽象,它表示连续的数据流,在内部DStream表示为RDD序列,每个RDD包含一定间隔的数据,如下图所示:

所有对于DStream的操作都会相应地转换成对RDDs的操作,在上面的例子中,flatMap操作被应用到lines 中的每个RDD中生成了一组RDD(即words)

总结编写Spark Streaming程序的基本步骤是:

1.通过创建输入DStream来定义输入源

2.通过对DStream应用转换操作和输出操作来定义流计算

3.用streamingContext.start()来开始接收数据和处理流程

4.通过streamingContext.awaitTermination()方法来等待处理结束(手动结束或因为错误而结束)

5.可以通过streamingContext.stop()来手动结束流计算进程

StreamingContext
有两种创建StreamingContext的方式:通过SparkContext创建和通过SparkConf创建;

Spark conf创建:

val conf = new SparkConf().setAppName(appName).setMaster(master);

val ssc = new StreamingContext(conf, Seconds(1));

appName是用来在Spark UI上显示的应用名称。master是Spark、Mesos或Yarn集群的URL,或者是local[*]。batch interval可以根据你的应用程序的延迟要求以及可用的集群资源情况来设置。

SparkContext创建:

val sc = new SparkContext(conf)

val ssc = new StreamingContext(sc, Seconds(1))

输入DStreams和Receiver
在前面的例子中lines就是从源得到的输入DStream,输入DStream对应一个接收器对象,可以从源接收消息并存储到Spark内存中进行处理。Spark Streaming提供两种streaming源:

基础源:直接可以使用streaming上下文API的源,比如files和socket;
高级源:通过引用额外实体类得到的Kafka,Flume源;可以在应用中创建使用多个输入DStreams来实现同时读取多种数据流,worker/executor 是持久运行的任务,因此它将占用一个分给该应用的core,因此Spark Streaming需要分配足够的core去运行接收器和处理接收的数据;
在本地运行Spark Streaming程序时,不要使用“local”或“local[1]”作为主URL。这两者中的任何一个都意味着在本地运行任务只使用一个线程。如果使用基于receiver的输入DStream(如Kafka、Flume等),这表明将使用单个线程运行receiver,而不留下用于处理所接收数据的线程。因此在本地运行时,始终使用“local[n]”作为主URL,其中n必须大于运行的receiver数量,否则系统将接收数据,但不能处理它。

Kafka和Flume这类源需要外部依赖包,其中一些库具有复杂的依赖关系,Spark shell中没有这些高级源代码,因此无法在spark-shell中测试基于这些高级源代码的应用程序,但可以手动将包引入;

基于可靠性的考虑,可以将数据源分为两类:可靠的接收器的数据被Receiver 接收后发送确认到源头(如Kafka ,Flume)并将数据存储在spark,不可靠的接收器不会向源发送确认。

DStreams转换
与RDD类似,转换操作允许修改来自输入DStream的数据,转换操作包括无状态转换操作和有状态转换操作。

无状态转换操作实例:下节spark-shell中“套接字流”词频统计采用无状态转换,每次统计都只统计当前批次到达的单词的词频,和之前批次无关,不会进行累计。

有状态转换操作实例:滑动窗口转换操作和updateStateByKey操作;

窗口操作
每次窗口在源DStream上滑动,窗口内的源RDD被组合/操作生成了窗口RDD,在图例中,过去3个时间单位的数据将被操作,并按2个时间单位滑动。

标签:转换,Streaming,笔记,学习,RDD,操作,Spark,DStream
From: https://www.cnblogs.com/liucaizhi/p/17977211

相关文章

  • Java学习日记 Day6
    JavaSE:------------IO流------------①File类:就是待读取或写入的文件需要把他包装成一个file类②IO流:形象地理解是文件内容的输入输出通过两根管子,我们把这两个管子包装成对象,这两根管子就是IO流。③字符流:Fileread和FileWrite④字节流:一般都是读图片才使用⑤缓冲字节流(处理......
  • Day2--Java学习
    计算机1.1什么是计算机Compute:电子计算机,俗称电脑。能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成常见的形式:台式计算机、笔记本计算机、大型计算机等。广泛应用在:科学计算、数据处理、自动控制、计算机辅助设计、......
  • 1/20 学习进度笔记
    完成了搜索引擎日志分析小案例数据由两万条一下六列相同格式的单个数据组成 分别对应:搜索时间  用户ID搜索内容URL返回排名用户点击顺序用户点击的URL 使用到了python的jieba插件进行热词的分析TODO:需求1:用户搜索关键‘词’分析需求1结果:[('sc......
  • 数据库学习笔记(二)—— MySQL 之 存储引擎和索引篇
    存储引擎和索引 前言关于MySQL的学习着实有些混乱,虽然才到学习笔记二,但学习笔记四都已经写完了,其他写一点,可以说是东一榔头西一棒槌;写出的东西也不忍直视,省略了很多细节,还基本上都是到处搬运的,可即便是搬运,也都绞尽脑汁了。网上的知识大多都模糊不清,甚至还错误百出,为了......
  • VimScript笔记
    title:"VimScript笔记"date:2024-01-17T15:05:25+08:00tags:["Vim"]categories:[]draft:falsetoc:trueVimScript五分钟入门(翻译)-知乎wsdjeg/vim-plugin-dev-guide:Vim插件开发指南基本语法:source%:%表示当前文件的路径e#:切换到最近编辑的另一个文件e......
  • 算法分析与设计学习总结_2
    算法分析与设计四、动态规划(1)动态规划​ ①基本思想:n将原问题分解为若干个子问题,先求子问题的解,然后从这些子问题的解得到原问题的解。这些子问题的解往往不是相互独立的。​ ②基本要素:最优子结构和重叠子问题。​ ③最优子结构性质:最优解的子结构也是最优的。问题的最优......
  • 算法分析与设计学习总结_1
    算法分析与设计一、算法概述1.1算法和过程(1)算法和过程都是解决问题的一种方法的逐步描述(2)他们都是由若干条指令组成的有穷序列;每条指令意义确定;具有零个或多个输入;产生若干个输出。(3)算法的执行时间是有限的(终止性);过程的执行时间可能是无限的。1.2算法(1)程序和算法​ ①......
  • 人工智能学习总结_1
    人工智能一、人工智能绪论、基础(1)人工智能、基因工程、纳米科学被认为是21世纪的三大尖端技术。(2)人工智能的典型应用领域:交通、服务机器人、医疗健康、教育、公共安全、工作就业、娱乐。二、搜索(1)单智能体搜素:规划盲目搜索启发式搜索局部搜索(2)多智能体搜索:零和博弈极......
  • 人工智能学习总结_3
    人工智能七、神经网络7.1概述(1)适用问题:用于处理更加复杂的输入和输出之间的非线性关系问题(2)特点:​ ①可以用来拟合非常复杂的函数(3)应用:图像分类、语音识别、机器翻译、自动驾驶7.2人工神经网络设计(1)人工神经元:线性模型+激活函数(2)人工神经网络设计的三方面​ ①神经......
  • 人工智能学习总结_2
    人工智能四、线性回归4.1线性回归(1)线性回归特点:解释性强,简单,泛化能力稳定。(2)特征:输入的不同维度叫做特征。如果特征本身很重要,线性回归就很有效,但是挑选特征是非常困难的。(神经网络本质就是自动挑选、学习特征的机器)(3)最小化损失函数的方法:梯度下降法梯度下降法的计算4......