Day47[20180728]_Spark Streaming(二)
Spark StreamingStreamingContext: scc-a. 实时处理流式数据框架Apache Spark框架中一个模块-b. 按照时间间隔将流式数据划分为很多批次batch每批次数据进行处理,底层属于SparkCore中RDD处理batchInterval-c. 数据结构DStream:离散的流、分离的流DStream = List<RDD>-d. 处理数据流程:-i. 数据源从哪里接收实时流式数据kafka/Flume/Tcp Socket-ii. 数据处理业务并不复杂:- 统计类型的数据分析- 在线机器学习D -> A -> M, 依据模型实时预测推荐transformation 转换函数将DStream转换为另为一个DStream大部分函数与RDD中转换函数一样尽量使用transform函数进行数据处理操作:针对每批次RDD操作的-iii. 存储结果针对每批次处理RDD的结果进行输出操作DStream#output输出函数: foreachRDD(rdd => {// .....})输出地方:Console(测试)、Redis、HBase、RDBMS
1、 Streaming运行在Driver端(底层是SparkContext)
2、 Receive运行在Excutor上面
3、 SparkContext让Receiver 以task的形式运行在Excutor上面
4、 每个接收输入流然后将它们划分(按照时间间隔 默认200ms)为很多块比如:1s可以划分为5个block,相当于rdd中的五个分区
5、 Excutor讲block放到内存中去
注意:为什么要设置3个线程
针对SparkStreaming开发测的时候,设置本地模式运行--master local[3]最好设置为3个线程运行,从Socket 接收数据,需要一个Task运行一个Receiver接收源端数据,占用一个Thread线程使用。剩余2个Thread,可以并行处理数据Task,分布式计算
blockInterval
Streaming 统计信息
每5秒一个批次,运行了1分2秒,从2018/07/28 09:44:57开始运行(完成了12个批次,接收了
444条数据)
输入流:
接收器:1个接收器
平均接收数据:6.15条/秒
调度延迟时间 + 处理时间 = 总的时间
横向:时间 纵向:接收数据数
调度时间越平就说明性能越好,延迟越低
Scheduling Delay:上一批次没有处理完,处理下一批次数据就得等这时候就产生的延迟
Processing Time:每一批次处理数据的时间
Total Dealy = Scheduling Delay + Processing Time
企业中的性能调优:Scheduling Delay这条线接越平越好,说明流式计算是实时处理的。Processing Time < = batchInterval
blockInterval
默认值为200ms, 官方建议最小推荐值为50ms,依据实际情况调整
优化项:Total Delay(Processing Time) > batchInterval (需要处理)
每批次数据处理的时间 大于 batchInterval时间:每批次的数据是RDD进行执行计算的,可以增加RDD的分区数,相当于增加Task数目,在资源充分的情况下,增加并行执行的Task数目。减少blockInterval的值,比如设置为100ms(默认200ms,每一批次1s的话,blockInterval就是分成了10个block也就是10个分区)
总的延迟=调度延迟+处理时间
处理时间<=批处理时间 才不会出现延迟
在大数据集群中会有个别高峰期,这时处理时间会大于批处理时间造成调度延迟(由于资源不足导致的
个别时期数据延迟),
但是这时是可以接受的
注意:在实际开发中业务很简单的,主要是性能的调优,程序出问题能不能快速恢复
Kafka
Kafka 高吞吐量的分布式消息系统,发布订阅的消息系统
消息系统Kafka - 分布式消息队列(Message Queue)系统topic: 主题/类别分区partition -> 设置副本数- 发布订阅的功能比喻:发布者 -> 推送文章微信公众号: 订阅者1订阅者2订阅者3.....
Kafka官网的三种功能
注意:我们只要了解消息队列系统使用,其他功能不需要掌握
消息队列系统类似于flume的架构模型
点到点的消息队列
一个发布多个订阅的过程(类似于公众号订阅的过程)一份数据可以给多种接收器订阅:然后做不的功能(比如推荐系统,机器学习,精准营销…)
1、读写流的数据像消息系统一样
2、0.0.1版以后,通过自带的api可以自己编写一些扩展的流处理应用,接受实时的时间数据
3、存储数据发布订阅的功能
Kafka如何进行数据分区以及存储数据
1、Topic &Partition
存储有三个部分:
1、 偏移量(偏移量越小数据就越老)
2、 Key说的是放到哪个partitions(partition分区器默认hashcode取模进行分区的)
3、 Value消息的值
注意:偏移量越小数据就越旧,偏移量越大数据越新
2 、副本数
不同类型放到不同的Topic中去(下图设置了两个Topic: Topic Click Topic Upload)
三个分区两个副本
3、Kafka原理
分布式的提交日志,将接收日志顺序写到磁盘
1、在kafka中Topic就是用户定义的类别,将消息发布到Topic去
2、Kafka生产者发布信息到一个或多个消费者,消费者订阅者这些数据处理这些发布的数据
3、kafka集群包含一个或多个服务器,称为broker用来管理Topic的分区数据已经持久化数据.
zookeeper 保存的集群配置信息、元数据、多少个Broker、Broker中分区数
比如三台机器选取一个当leader(主节点),其他都是从节点
Zookeeper存放的是Kafka的配置信息和元数据
4、Kafka的安装
1、Kafaka是Scala编写的,所以安装Scala
2、Scala是基于Java虚拟机,所以安装java
3、配置信息和元数据都是放在Zookeper中
Kafka是一个发布订阅的消息系统,作为一个分布式、分区、副本提交日志服务
5、消息队列
消息队列系统代表的就是将转换数据从这个程序发送到另一个程序,
因此程序注重的是数据,而不用担心如何分享它.
点到点的消息队列(一对多) –> 发布订阅的消息队列(一对多)以前是单机运行系统点对点的系统就可以完成现在需要一对多的使用,一个数据发布多个Receiver接收(实时统计,推荐系统,算法分析)
6、kafka安装
kafka 下载:http://archive.apache.org/dist/kafka/
针对SCALA 2.11编译包:http://archive.apache.org/dist/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz
API文档;http://kafka.apache.org/082/documentation.html
快速安装:http://kafka.apache.org/082/documentation.html#quickstart
安装java和scale:
安装zookeeper:
安装Kafka伪分布式集群环境:
类似Zookeeper框架分布式安装部署- 单机模式:standalone在一台机器上启动有一个JVM进程服务- 伪分布式模式在一台机器上启动多个JVM进程服务
启动服务:kafka-server-start.sh
停止服务:kafka-server-stop.sh
查看topic相关信息:kafka-topics.sh
消费者:kafaka-console-consumer.sh
生产者:kafaka-console-producer.sh
Kafka依赖的jar包:可以看出依赖zookeeper和scala中的jar包
Kafka的配置文件:
7、配置server9092、server9093、server9094
broker.id 唯一的标识符
port 端口号
host.name 运行的主机名称
Broker.id = 9092 表示:Broker机器唯一标识符
host.name 如果不设置就绑定到所有的接口上
在kafka中创建三个临时目录用于配置
按照同样的方式配置9093、9094
启动kafka 9092、9093、9094:
启动三个kafka:
创建Topic
zookeeper: 配置信息存放在zookeeper的那台机器上
replication-factor:副本数
partitions:分区数
topic:topic名称
创建后zookeeper中存储的信息
partitions中三个分区两个副本
0:第1分区 两个副本 存放9092 9093
1:第2分区 两个副本 存放9093 9094
2:第3分区 两个副本 存放9094 9092
8、发送数据到Topic
生产数据:
消费数据:
类似于微信公众号,一个发布,多个订阅
zookeeper中存入了每条数据偏移量
Day47[20180728]_Spark Streaming(二)相关推荐
- java streaming编程_Spark Streaming编程实战(开发实例)
本节介绍如何编写 Spark Streaming 应用程序,由简到难讲解使用几个核心概念来解决实际应用问题. 流数据模拟器 在实例演示中模拟实际情况,需要源源不断地接入流数据,为了在演示过程中更接近真 ...
- Hadoop Streaming二次排序
由于Hadoop机器内存不足,所以需要把数据mapred进来跑. 这样,就需要,同一个key下的输入数据是有序的,即:对于keyA的数据,要求data1先来,之后data2再来--.所以需要对data ...
- sparksql 保存点_Spark(十二)【SparkSql中数据读取和保存】
一. 读取和保存说明 SparkSQL提供了通用的保存数据和数据加载的方式,还提供了专用的方式 读取:通用和专用 保存 保存有四种模式: 默认: error : 输出目录存在就报错 append: 向 ...
- sparkstreaming监听hdfs目录_Spark Streaming消费Kafka数据的两种方案
下午的时候翻微信看到大家在讨论Spark消费Kafka的方式,官网中就有答案,只不过是英文的,当然很多博客也都做了介绍,正好我的收藏夹中有一篇文章供大家参考.文章写的通俗易懂,搭配代码,供大家参考. ...
- Day46[20180726]_Spark Streaming(一)
目录 Apache Spark核心编程模块 安装nc工具 SparkStreaming 处理数据的流程 技术框架 SparkStreaming原理 Apache Spark核心编程模块 集批处理(离线 ...
- java读写德卡数据_Spark Streaming 读取Kafka数据写入ES
简介: 目前项目中已有多个渠道到Kafka的数据处理,本文主要记录通过Spark Streaming 读取Kafka中的数据,写入到Elasticsearch,达到一个实时(严格来说,是近实时,刷新时 ...
- 共享单车数据集_Spark Streaming 共享单车数据集
地球资源有限,但是人类需求无限,城市规划专家意识到这一点,于是有了"智慧城市"这个新词汇,为了完成这个KPI考核,就需要对城市环境的各个方面进行测量,以实现最佳的资源利用.共享.规 ...
- 使用IIS 7.0 Smooth Streaming 优化视频服务
http://www.cnblogs.com/dudu/archive/2013/06/08/iis_webserver_settings.html (支持高并发的IIS Web服务器常用设置) ht ...
- Centos6.8 安装spark-2.3.1 以及 scala-2.12.2
一.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面,Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和 ...
最新文章
- 知识管理系统Data Solution研发日记之六 窗体设计器
- PyTorch基础(一)-----张量(Tensor)
- html怎么一段时间把网页背景更换_复盛螺杆压缩机故障怎么维修?
- python书写风格_python书写风格
- 百度百科做起来也不难
- React-Native 之 GD (三)近半小时热门
- js阻止鼠标右击_使用JS 禁止键盘快捷方式和禁止鼠标右键操作弹窗提示
- Opencv车牌号字符分割
- 程序化广告 - 小抄
- excel模板 基金账本_有哪些好用的Excel个人账单模板?
- 等待其他线程执行完后执行(CountDownLatch)
- python随机图片api_用fastapi搭建随机图api(雁陎二次元随机图api开放试用)
- python新手入门——————字符串函数(2)
- Python3中print函数的换行
- Shopee上新,真的很重要吗?
- Python~~~有料才能 有派
- 算法创作 | 一元二次方程求解问题解决方法
- eclipse 中 git 解决冲突(重点)
- 语言设计中的鸭子类型风格
- 什么是网站劫持,发现网站被劫持该怎么办?
热门文章
- dawg (directed acyclic word graphic)
- STM32的C与汇编语言混合编程
- List集合中remove方法的使用
- 究竟该考哪个版本的OCP证书
- 3D游戏建模 电脑配置介绍
- leetcode887. 鸡蛋掉落 谷歌经典面试题的一般情况
- 华为EC1260-通话短信 http://majszt.blog.hexun.com/33967361_d.html
- 什么是渗透测试,多方面为你详细介绍
- 银河麒麟服务器操作系统 V10 SP1 防火墙(firewalld)指令
- EC20模块GPS功能的AT指令顺序