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. ...
随机推荐
- flex的12个属性
容器(父元素)的属性: flex-direction属性决定主轴的方向 flex-wrap 属性决定项目在一行排不下的情况下是否换行 flex-flow flex-flow属性是flex-direct ...
- Gparted for partition of Linux on graphic interface
You can change the partition table on Linux by a group of tools, which is tool comprehansive for a n ...
- luogu 3488 [POI2009]LYZ-Ice Skates 线段树 + 思维
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin), ...
- js返回上一页并刷新 代码整理
真正好用: 强制载入后刷新一次 在要载入的页面加入以下代码: <script> if(window.name != "bencalie"){ location.relo ...
- 树状数组板子 x
树状数组! 参考 http://www.cnblogs.com/zzyh/p/6992148.html 洛谷 P3374 [模板]树状数组 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: ...
- C++ 对象间通信框架 V2.0 ××××××× 之(二)
公共头文件:ss_type_def.h ================================================================================ ...
- [BZOJ2225][SPOJ2371]LIS2 - Another Longest Increasing Subsequence Problem:CDQ分治+树状数组+DP
分析 这回试了一下三级标题,不知道效果怎么样? 回到正题,二维最长上升子序列......嗯,我会树套树. 考虑\(CDQ\)分治,算法流程: 先递归进入左子区间. 将左,右子区间按\(x\)排序. 归 ...
- Oracle Like子句
Oracle Like子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle LIKE运算符来测试列中的值是否与指定 ...
- Linux内核调试方法总结之死锁问题分析
死锁问题分析 死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进程本身是解决不了的,需要外在的推动,才能解决,最重要的是死锁不仅仅影响进程业务, ...
- Flask中的路由配置
在Flask中也同样有django中的路由配置只不过没有djngo那么严格主要的参数有一下六个记住常用的就可以了 1.endpoint 反向生成url地址标志,默认视图函数名 2.methods ...