spark复习笔记(7):sparkstreaming
一、介绍
1.sparkStreaming是核心模块Spark API的扩展,具有可伸缩,高吞吐量以及容错的实时数据流处理等。数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字)中获取。并且可以使用以高级函数表示的复杂算法进行处理map,例如reduce,join和window。最后,处理后的数据可以推送到文件系统,数据库和实时仪表盘。[DStresam]:离散流,连续的RDD序列。准实时计算,以batch处理作业。

2.在内部,它的工作原理如下。Spark Streaming接收实时输入数据流并将数据分成批处理,然后由Spark引擎处理,以批量生成最终结果流。

3.sparkStreaming提供了一个高级的抽象discretized stream称之为DStream,表示连续的数据流。DStream可以通过像Kafka,Flume和Kinesis等源的输入数据流创建。或者通过应用在其他DStream上应用高级的操作得来。在内部DStream也表现为RDD序列。
4.在我们详细介绍如何编写自己的Spark Streaming程序之前,让我们快速了解一下简单的Spark Streaming程序是什么样的。假设我们想要计算从TCP套接字上侦听的数据服务器接收的文本数据中的字数。您需要做的就是如下。
二、体验spark Streaming
1.pom.xml文件
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.</artifactId>
<version>2.1.</version>
</dependency>
2.编写程序
package com.jd.spark.scala import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._ object SparkStreamingDemo {
def main(args: Array[String]): Unit = {
//这个地方要注意,并发线程数要大于1,创建一个配置对象,将其设置为本地模式,
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount");
//创建sparkStreaming上下文,批次时长是1s
val ssc = new StreamingContext(conf,Seconds());
//创建套接字文本流
val lines = ssc.socketTextStream("localhost",);
//将读取进来的行进行压扁操作,这个地方返回的都是离散流DStream
val words = lines.flatMap(_.split(" "))
//变换成对偶
val pairs = words.map((_,));
//聚合操作
val count = pairs.reduceByKey(_ +_);
count.print();
//开始进行相关的计算,等待其停止
ssc.start();
//等待结束
ssc.awaitTermination()
} }
3.启动nc服务器
4.导出stream程序的jar文件,丢到centos上去运行
(1)
(2)
(3)spark-submit --class com.jd.spark.scala.SparkStreamingDemo SparkDemo1-1.0-SNAPSHOT.jar
三、Kafka+ Spark Streaming做流计算
0.启动kafka集群
a)启动zk:zkServer.sh start
b)启动kafka: bin/kafka-server-start.sh config/server.properties
c)验证kafka服务器是否成功
$>netstat -anop | grep 9092
d)创建主题
$>bin/kafka-topics.sh --create --zookeeper s11:2181 --replication-factor 3 --partitions 3 --topic test1
e)查看主题列表
$>bin/kafka-topics.sh --list --zookeeper s11:2181
f)启动控制台生产者
$>bin/kafka-console-producer.sh --broker-list s12:9092 --topic test1
g)启动控制台消费者
$>bin/kafka-console-consumer.sh --bootstrap-server s12:9092 --topic test --from-beginning --zookeeper s202:2181
1.引入pom.xml文件
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka--10_2.</artifactId>
<version>2.1.</version>
</dependency>
2.Option[T]可选的
None //
3.
4.
三、windows:窗口化操作
1.batch interval:批次的间隔
2.windows length:窗口长度,跨批次。批次的整数倍
3.slide interval:滑动间隔,窗口计算的间隔时间,也是批次的整倍数
4.reduceByKeyAndWindow():按照key和窗口进行聚合。
reduceByKeyAndWindow(_ + _,windows length,sliding interval)
四、持久化
1.memory_only
2.memory_ser
3.spark-submit --class
五、生产环境下spark streaming的job的注意事项
避免单点故障。
Driver // 驱动,运行用户编写的程序代码的主机
Excutors //执行的spark driver提交的作业,内部含有附加组件,比如receiver,receiver接收数据并以block的方式保存在内存中,同时将数据块复制到其他的executor中,以备容错。每个批次的末端会形成新的DStream。如果receiver故障,其他执行程序会接收
spark streaming 实现容错
如果executor发生故障,所有未被处理的数据都会丢失,解决办法可以通过wal方式将数据预先写入到hdfs或者s3
如果Driver故障的,Driver程序会停止,所有的执行程序都会失去连接,他们会结束计算。解决办法,自动配置和编程
1:配置Driver程序,自动重启,配置自动重启,使用特定的集群管理器来实现
2.重启的时候,从宕机的地方开始重启,通过检查点记住可以实现该功能
//目录可以是本地,也可以是hdfs
jsc.checkpoint("d://....................");
不再使用new方式创建SparkStreamContext对象,而是通过工厂的方式JavaStreamingContext.getOrCreate()方式来创建上下文对象。首先会检查检查点目录,看是否有job运行,
spark复习笔记(7):sparkstreaming的更多相关文章
- spark复习笔记(1)
使用spark实现work count ---------------------------------------------------- (1)用sc.textFile(" &quo ...
- spark复习笔记(7):sparkSQL
一.saprkSQL模块,使用类sql的方式访问Hadoop,实现mr计算,底层使用的是rdd 1.hive //hadoop mr sql 2.phenoix //hbase上构建sql的交互过 ...
- spark复习笔记(6):RDD持久化
在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...
- spark复习笔记(6):数据倾斜
一.数据倾斜 spark数据倾斜,map阶段对key进行重新划分.大量的数据在经过hash计算之后,进入到相同的分区中,zao
- spark复习笔记(4):RDD变换
一.RDD变换 1.返回执行新的rdd的指针,在rdd之间创建依赖关系.每个rdd都有一个计算函数和指向父rdd的指针 Spark是惰性的,因此除非调用某个转换或动作,否则不会执行任何操作,否则将触发 ...
- spark复习笔记(5):API分析
0.spark是基于hadoop的mr模型,扩展了MR,高效实用MR模型,内存型集群计算,提高了app处理速度. 1.特点:(1)在内存中存储中间结果 (2)支持多种语言:java scala pyt ...
- spark复习笔记(4):spark脚本分析
1.[start-all.sh] #!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one ...
- spark复习笔记(3)
在windows上实现wordcount单词统计 一.编写scala程序,引入spark类库,完成wordcount 1.sparkcontextAPI sparkcontext是spark功能的主要 ...
- spark复习笔记(3):使用spark实现单词统计
wordcount是spark入门级的demo,不难但是很有趣.接下来我用命令行.scala.Java和python这三种语言来实现单词统计. 一.使用命令行实现单词的统计 1.首先touch一个a. ...
随机推荐
- LeetCode--102--二叉树的层次遍历(python)
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...
- C文件 CMakeList.txt编译器配置错误的问题 error:invalid conversion from 'int' to 'LAYER_TYPE' [-fpermissive]....
在编译C工程时,遇到了如下错误: 一般看到类型错误,主要考虑是不是编译器错了. 以下引用:https://www.cnblogs.com/liushui-sky/p/7729838.html 后缀为. ...
- 举个例子去理解vuex(状态管理),通俗理解vuex原理,通过vue例子类比
通俗理解vuex原理---通过vue例子类比 本文主要通过简单的理解来解释下vuex的基本流程,而这也是vuex难点之一. 首先我们先了解下vuex的作用vuex其实是集中的数据管理仓库,相当于数 ...
- 弹性盒子FlexBox简介(二)
弹性盒子属性 一.align-content属性 属性作用:用于修改flex-wrap属性行为.类似于justify-content,但它不是设置弹性子元素的对齐,而是设置各个行的对齐. 属性值: f ...
- 8,HashMap子类-LinkedHashMap
在上一篇随笔中,分析了HashMap的源码,里面涉及到了3个钩子函数(afterNodeAccess(e),afterNodeInsertion(evict),afterNodeRemoval(nod ...
- M(model)V(view)C(controller,serlvet),(分) 静态工厂模式,单例模式
- React-router的基本使用
1.安装使用 $ npm install -S react-router import { Router, Route, hashHistory } from 'react-router'; rend ...
- UOJ428. 【集训队作业2018】普通的计数题
http://uoj.ac/problem/428 题解 神仙题. 考虑最后一定是放了一个\(1\),然后把其他位置都删掉了. 再考虑到对于序列中的每个位置都对应了一次操作. 我们可以对于每个放\(1 ...
- [CSP-S模拟测试]:星际旅行(欧拉路)
题目传送门(内部题4) 输入格式 第一行两个整数$n,m$,表示行星和虫洞的数量.接下来$m$行,每行两个整数$u,v$,表示存在一个双向虫洞直接连接$u$和$v$.每一个虫洞最多会被描述一次. 输出 ...
- 修改docker默认网段
一. 修改普通docker run启动的容器的网段 https://blog.51cto.com/13670314/2345518?source=dra https://blog.csdn.net/w ...