https://blog.csdn.net/qq_32023541/article/details/79127882
让我们对kafka有个一初步的了解。其实吧,我们知道,数据可以从某个角度分成两类,第一类是批量数据,也就是已经放好的数据,打个比方,就像池塘的水,不会流动,你想怎么计算就怎么计算,你可以统计一下水量,也可以将它们做别的用途,但水就那么多放在那里,你可以把它放在任何一个水库慢慢用。另一类就是流式数据,就是会实时变动的数据,也打个比方,就像河流的水,它不是静止不动的,它是一直在流动的,每时每刻水都在发生改变,也就是你无法像之前一样,把它放在任何水库慢慢用,你只能取出一部分用,当你用完,新的水又流进来了。
kafka就是其中的一条河流,当然不只kafka而已,就像世界上存在很多河流,kafka只是其中之一。kafka是根据topic 来存储数据的,每个topic里面根据不同的偏移量来定位数据。比如下面的代码就是scala语言编写的往topic中发送数据,我们称之为制造者
一。
spark 是一个快速且通用的集群计算平台
基于内存的运算
通用性;降低维护成本
Spack的设计容纳了其它分布式系统拥有的功能
批处理,迭代式计算,交互查询和流处理等
spark是高度开放的;Python Java scala haddoop
二。
spark core:
包含spark的基本功能,任务调度,内存管理,容错机制
内部定义了RDDs,弹性分布式数据集
spark sql:
是spark处理结构化数据的库
spark streaming:
实时数据流处理组件,类似Storm
Spaek Streaming提供了API来提供操作实时流数据。
应用场景,企业中用来从Kafka接收数据做实时统计。
milb:
包含通用机器学习功能的包,分类,聚类,回归
支持起集群上的横向扩展
机器学习
graphx:
处理图的库,并进行图的并行计算
cluster managers:
集群管理,Spark自带一个集群管理是单独调度器。
常见的集群管理包括Hadoop YARN,Apache Mesos
紧密集成的优点
1.spark底层优化了,基于spark的底层组件也会得到相应的优化。
2.紧密继承节省了各个组价组合使用时的部署,测试等时间
3.向spark增加新的组件时,其他组件,可立刻享用新组建的功能。
三。
spark与Hadoop的比较
Hadoop的应用场景:离线处理,对时效性要求不高(数据储存在硬盘中,执行时间一般在几分钟,几个小时)
spark的应用场景:对时效性要求高,机器学习领域(spark中间的数据尽量储存在内存中大大加快了Spark任务的计算速度一般几秒钟或者几分钟,在迭代方面很适合)
Doug Cutting的观点
这是生态系统,每个组件都有其作用,各善其职即可
Spark不具有HDFS的存储能力,要借助HDFS等持久化数据
大数据将会孕育更多的新技术
四。Spark的安装
spark的运行环境:
基于Scala ,运行在JVM,运行环境Java7+
spark下载:
搭建spark不需要Hadoop,下载后解压
虚拟机(Linux)联网状态下,通过 wget+下载链接
Linux解压命令 tar -zxvf spark.....
spark目录
bin目录-可执行文件
core,streaming主要包含组件源代码
examples 包含单机例子
spark的shell:
梳理分布在集群上的数据
可以将数据加载到节点的内存中,因此分布式处理可在秒级完成。
快速迭代计算,实时查询、分析
spark提供了Python shell和Scala shell
Scala shell
/bin/spark-shell
3-2开发第一个Spark程序
创建一个Spark Context
加载程序
把每一行分割成单词
转换成pairs 并且计数
打包:
配置jar包
build
开发完spark程序后,启动集群:
启动master ./sbin/start-master.sh
启动worker ./bin/spark-class
提交作业 ./bin/spark-submit
RDDs介绍
Driver program:(程序入口的地方)
包含程序的main()方法,RDDs的定义和操作
它管理很多节点,我们称为executors
SparkContext:
Driver programs 通过SparkContext 对象访问 Spark。
SparkContext对象代表和一个集群的连接。
在Shell中SparkContext 自动创建好了,就是sc
RDDs:
Resilient distributed datasets(单性分布式数据集,简写RDDs)。
这些RDDs,并行的分布在整个集群中。
RDDs是Spark分发数据和计算的基础抽象类。
一个RDD是一个不可改变的分布式集合对象。
Spark中,所有的计算都是通过RDDs的创建,转换,操作完成的。
一个RDD内部由许多partitions(分片)组成。
分片计算完之后在进行汇总
RDDs的创建方法:
把一个存在的集合传给SparkContext的parallelize)方法,测试用
val rdd =sc.parallelize(Array(1,2,2,4),4)
第1个参数:待并行化处理的集合,第2个参数:分区个数
RDDs的创建方法:
加载外部数据集。
val rddText=sc.textFile("helloSpark.txt")
Scala的匿名函数和类型推断:
lines.filter(line=>line.contains("world"))
定义一个匿名函数,接收一个参数line,
使用line这个String类型变量上的contains()方法
line的类型不需指定,能够推断出来
Map()
Filter()
Flatmap()
集合运算
reduce():
接收一个函数,作用在RDD两个类型相同的元素上,返回新元素。
可以实现,RDD中元素的累加,计数,和其它类型的聚集操作。
reduce():
接收一个函数,作用在RDD两个类型相同的元素上,返回新元素。
可以实现,RDD中元素的累加,计数,和其它类型的聚集操作。
val sum=rdd.reduce(x,y)=>x+y)
take(n):
返回RDD的n个元素(同时尝试访问最少的partitions)。
返回结果是无序的,测试使用。
Collect():
遍历整个RDD,向driver program返回RDD的内容
需要单机内存能够容纳下(因为数据要拷贝给driver,测试使用)
大数据的时候,使用saveAs TextFile() action等。
foreach():
计算RDD中的每个元素,但不返回到本地。
可以配合println()友好的打印出数据。
RDDs的特性
延迟计算(Lazy Evaluation):
Spark对RDDs的计算是,他们第一次使用action操作的时候
这种方式在处理大数据的时候特别有用,可以减少数据的传输
Spark 内部记录metadata 表名transformations操作已经被响应了
加载数据也是延迟计算,数据只有在必要的时候,才会被加载进去
RDD.persist0:
默认每次在RDDs上面进行action操作时,Spark都重新计算RDDs
如果想重复利用一个RDD,可以使用RDD.persist)
unpersist()方法从缓存中移除
combineByKey0:
(createCombiner,merge Value,mergeCombiners,partitioner)
最常用的基于key的聚合函数,返回的类型可以与输入类型不一样
许多基于key的聚合函数都用到了它,像groupByKey0
combineByKey0:
遍历partition中的元素,元素的key,要么之前见过的,要么不是。
如果是新元素,使用我们提供的createCombiner)函数
如果是这个partition中已经存在的key,就会使用mergeValue()函数
合计每个partition的结果的时候,使用mergeCombiners0函数
kafka(流处理平台)
生活中无时无刻都在生产着数据,数据产生到存档会产生日志(存储模式)
有了数据,就有了数据的生产者,同时只有数据流动起来才能产生真正的价值
于是就有了数据流,既然有了数据流就有了数据的消费者。(消费模式)
特性:
1它是可以发布,订阅,记录数据的流 类似一个消息队列
2它是一个数据流存储的一个平台 并且有错误容忍的
3数据产生的时候就进行消息处理
应用场景
1.构建实时数据流管道 处理的数据有很强的数据依赖关系的时候(数据的传输上)
2.构建一个实时的数据处理应用程序 它能转换或者响应这个数据流 (数据的处理上)
Kafka基本概念
◆Producer:消息和数据的生产者,向Kafka的一个topic发布消
息的进程/代码/服务
·Consumer:消息和数据的消费者,订阅数据(Topic)并且处
理其发布的消息的进程/代码/服务
◆Consumer Group:逻辑概念,对于同一个topic,会广播给不
同的group,一个group中,只有一个consumer可以消费该
消息
Kafka基本概念
◆Broker:物理概念,Kafka集群中的每个Kafka节点
◆Topic:逻辑概念,Kafka消息的类别,对数据进行区分、隔离
·Partition:物理概念,Kafka下数据存储的基本单元。一个Topic
数据,会被分散存储到多个Partition,每一个Partition是有序
的
Kafka基本概念
Replication:同一个Partition可能会有多个Replica,多个
Replica之间数据是一样的
Replication Leader:一个Partition的多个Replica上,需要一
个Leader负责该Partition上与Producer和Consumer交互
ReplicaManager:负责管理当前broker所有分区和副本的信
息,处理KafkaController发起的一些请求,副本状态的切换
、添加/读取消息等
Kafka的基本结构
producer Api
Consumer Api
Steams Api
Connectors Api
Kafka特点
1多分区
2多副本
3多订阅者
4基于ZooKeeper
高性能
1高吞吐量
2低延迟
3高并发
4时间复杂度为O(1)
持久化与持久性
1数据可持久化
2容错性
3支持在线水平扩展
4消息自动平衡
Kafka的应用场景;
1消息队列
2行为跟踪
3元信息监控
4日志处理
5 流处理
6事件源
7持久性文件