大数据面试题01

Spark
Application
用户自己写的程序,批处理作业的集合,Application的main方法时程序的入口,定义了RDD以及对RDD的操作
SparkContext
spark的重要api,用户逻辑与spark的交互接口。会和Cluster manager进行交互,包括向它申请计算资源
Driver 主控进程,执行main方法,提交job,并将job转化为task,在各个Executor进程间协调Task的调度
Executor 运行在worker上,负责执行task,结果返回Diver,提供RDD的储存功能
两种部署模式,clean和cluster,clean diver在cliean节点上,cluster diver在worker节点上,又Cluster Manager负责启动
RDD:弹性分布式数据集,只读分区记录的集合,spark对所处理对象的基本抽象
spark的计算可以抽象为对RDD的创建,转换,和返回操作结果的过程
创建:外部储存,HDFS,或者内部创建的List,一但创建,不能修改
转换:对已有的RDD执行计算转换,产生新的RDD,在这个过程中可能会产生中间RDD,spark对转换采取的是惰性计算机制,遇到需要转换时,并不会立即执行,而是等到遇到Action时在执行
返回数据(Action):在对已有的RDD中的数据执行计算结果,将结果返回到Driver中,在Action的过程中同样会产生中间的RDD
partition(分区):每个RDD在物理上分为多个partition,每个partition作为spark的基本处理单位,决定了并行处理的粒度,而partition中的每条数据则为基本的处理单位,例如,在对某个RDD进行mao映射操作时,在具体执行时是由多个并行的task对每个partition的每一条数据进行map映射
Dependency(依赖):对RDD的转换和Action操作,是RDD之间产生父子依赖关系(和中间RDD也存在依赖关系),这种依赖关系分为宽依赖和窄依赖两种:
窄依赖:NarrowDependency
parent RDD中的每个partition最多被一个child RDD的partition使用,让RDD产生窄依赖的操作可以称为窄依赖操作,例如:map
宽依赖:wideDependency
parent RDD中的每个partition可以被多个child RDD的partition使用
这时根据每条数据的key进行重组,这个过程叫做shuffle(洗牌
例如:reduceByKey,groupByKey
spark根据application提供的RDD的转换和提交,来生成RDD之间的亲属关系,这种关系组成了RDD之间的血统,也叫做DAG(有向无环连),spark可以根据这种关系追溯RDD的计算过程,这就是saprk实现容错的一种手段
JOB
在一个Application中,以Actio为边界的spark的批处理作业。spark采用的惰性机制,对RDD的创建和转换不会立即执行,只有在遇到第一个Action时才会生成一个JOB,统一调度执行,一个JOB含有N个转换和1个Action
Shuffle
在转换和Action的过程中会有一部分让RDD产生宽依赖,这样的过程就是将所有的parent RDD中的记录进行洗牌,数据被打散重组,如转换操作的join,Action错做的reduce等,都会产生Shuffle
Stage
一个JOB中,以shuffle进行划分边界,每个阶段包含可以被串行执行的窄依赖或宽依赖操作
在对JOB的所有阶段进行shuffle时,一般会按照顺序进行,从Action开始,遇到宽依赖操作和或者窄依赖操作划分到不同的执行阶段,新的阶段为之前阶段的parent,然后以此类推递归执行,child stage需要在parent stage执行完成之后才能执行,因此Stage之间的以来关系构成了一个大的DAG,在一个stage内,所有的操作以串行的管道进行计算,由一组Task进行执行
Task
对一个Stage的RDD进行串行操作的计算任务。
每个Stage有一组并发执行的Task组成(即TaskSet),这些Task执行的计算完全相同,只是位于的分区不同,一个Stage的Task的数量由stage中最后一个RDD 的partition决定
spark deiver根据数据所在位置的不同分配任务,即把Task根据所在Partition的位置不同分配给不同的Executor,一个Executor所可以并发执行的Task的数量由总的cpu数/每个Task占用的cpu数
Task分为Shuffle Task和Result Task,位于最后一个Stage的task为ResultTask
其它的为ShuffleMAp Task
Persits
RDD利用persits使RDD的分区数据持久化到内存或者储存中去,RDD也可以利用cache将数据缓存到内存中,cache利用的是MEMORY—ONLY进行的持久化,所以说缓存也是一种持久化
spark提交job是在遇到第一个Action之后才开始计算的,当计算完成之后进行持久化,在job间进行共享,这样如果两个JOB用到相同的RDD时,可以不用计算了,提高了Application的运算速度,所以说持久化也是提高spark的运算速度的一种方法
CheckPoint
调用RDD的checkPoint方法,可以使RDD保存到硬盘或者HDFS中,spark引入checkpoint机制,是因为持久化的数据可能会丢失或者替换,checkpoint可以在这个时候发生作用,避免重新计算,创建checkpoint实在当前job完成后,有另外一个job进行完成
一个Job在开始处理RDD的partition时,或者说是,在Execture中运行任务的时获取到RDD的partition数据时,会先进行判断是不是持久化,如果没有命中,则去检查是不是checkpoint,如果没有的话,则重新获取数据进行计算
DAG是在Driver上生成的,具体点说,有个DAGScheduler负责将用户提交的计算任务按照DAG划分为不同的阶段,每个阶段包含一组Task。然后通过TaskScheduler将Task提交给集群
====================================================================================
saprk streaming
spark Streaming是就saprk的实时计算框架,提供了丰富的API,和基于内存的高速执行引擎,用户可以结合流式,批处理和交互式查询应用
spark是一个类似于mapReduces的分布式计算框架,其核心是分布式数据集,提供了比mapReduces更加丰富的模型,更好的支持数据挖掘算法和图形计算算法,Spark Streaming就是基于spark的实时计算框架,它丰富了spark对大规模实时数据的处理
spark streaming 的优点:
可以部署在100+的节点上,达到秒级的延迟
以spark作为执行引擎,具有高效和容错的机制
具有apark的交互式和批处理机制
为实现复杂的计算提供了和批处理类似的简单接口
spark的所有的子框架,都是基于spark的核心api的,Spark
============================================================================
Streaming就是从指定的数据储存介质中读取数据,然后按照一定的时间间隔将数据拆分为一批一批的数据,然后通过spark engine处理这些数据,然后得到一批一批的处理结果
对应的批数据,在spark中对应-个个RDD实例,因此,对应的数据流DStream可以看作-组RDDS,即RDD的一个序列,简单说就是,在数据流分成一批一批后,通过一个先进先出原则的队列,然后spark engine从该队列中依次去获取一个个的批数据,把数据封装成一个个RDD,然后进行处理,典型的生产者消费者模型,模型的调优就是生产者和消费者之间的速率
术语定义:
离散流(DStream):这是spark streaming对内部持续数据流的描述,即我们处理的一个实时数据流.在spark streaming中对应一个DStream实例
批数据:这是人为对数据进行定量的标准,
以时间片作为拆分数据的依据,一个时间片对应一个RDD实例
窗口长度:一个窗口覆盖的流处理时间的长度,必须是处理时间间隔的倍数
滑动时间间隔:前一个窗口到后一个窗口的时间间隔,必须是,处理时间间隔的倍数
input Dsream:一个特殊的DStream,连接spark Streaming和外部数据源
==================================================================
Storm
被称为实时版Hadoop
storm核心组件:
nimbus:即storm的master,一个集群只有一个nimbus
Supervisor:即storm的slave,接收nimbus分配的任务.一个supervisor可以包含多个worker进程
worker:工作进程,每个工程中含有多个Task Task:任务,集群中的每个spout和bolt都由若干个task来执行,每个任务都与一个执行线程相对应
topology:计算拓扑,storm的计算拓扑是对实时计算逻辑的封装,它的作用和mapreduces的job差不多,只不过mapreduces的job在执行完成之后自动关闭,但是topology只能进行手动关闭,拓扑[可以理解为一系列的通过的数据流相互关联的spout和bolt组成的拓扑结构
Stream:数据流是Storm中最核心的抽象概念。 一个数据流是指在分布式环境中创建,处理的一组元组的无界序列
spout: 数据源是拓扑数据流的来源。一般来说,spout会从数据源中读取元组发送到拓扑中,根据需求的不同,spout可以分为可靠和不可靠spout,可靠的spout在发送元组失败后会重新发送,不可靠的不会重新发送,一个spout可以发送多个数据流
bolt:拓扑中所有的数据流都在bolt中完成,通过数据过滤,函数处理,聚合,联结,数据库交互等功能,bolt几乎可以完成任何一种数据处理需求,一个bolt可以实现简单的数据流转换,但是复杂的数据流转换就需要多个bolt来完成
Stream grouping:确定bolt的输入流是拓扑中的一个重要的环节,系统分组定义了在bolt的不同任务中划分数据流的方式,storm中定义了8中方式
reliability:可靠性,storm通过拓扑来判断发送的元组是不是处理完成,通过跟踪spout发出的每个元组构成的元组树可以确定元组是不是处理完成,每个拓扑都有一个延时参数,如果storm在延时参数内没有检测到元组处理成功,就会将该元组标记为处理失败,并会在稍后重新发送元组
zookeeper是storm重要的外部依赖资源,nimbus和supervisor甚至是运行的worker都是把心跳保存在zookeeper上的,nimbus是根据zookeeper上的心跳和任务运行状态及逆行调度和任务分配的
storm集群的运行方式:
client---》topology--->Nimbus---->supervisor---->worker
为什么topolog比较重要:
开发程序的主要用的组件
Topology和mapreduce相似
mapreduce是mao获取数据,reduce进行处理数据
topology是spout进行获取数据,bolt进行处理数据
一个topology由多个spout和bolt组成
分布式实时计算系统的特点:
低延迟,高性能,分布式,可扩展,容错,提供丰富的接口和消息不易丢失(创新的ack消息追踪框架)
hadoop的缺点:
延迟大,响应缓慢,运维复杂
storm topology的结构:
1.hadoop有master与slave,Storm与之对应的节点是什么?
2.Storm控制节点上面运行一个后台程序被称之为什么?
3.Supervisor的作用是什么?监听分配给他的那台机器的工作
4.Topology与Worker之间的关系是什么?一个运行的Topology由运行在很多机器上的很多工作进程 Worker(类似 Child)组成。
5.Nimbus和Supervisor之间的所有协调工作有master来完成,还是Zookeeper集群完成?
nimbus----主控节点,用于提交任务,分配集群任务,集群监控等-----> zookeeper集群------集群中协调,共有书据的存放(如心跳信息,集群状态和配置信息),nimbus将分配给supervisor的任务写入zookeeper---------> supervisor组------负责接收numbus分配的任务,管理属于自己的worker进程----->每个supercisor对应多个worker----运行具体处理组建逻辑的进程
6.storm稳定的原因是什么?
nimbus和supervisor之间所有的协调工作都是由zookeeper集群负责的,所有的状态要不在zookeeper集群中,要不在本地磁盘中,这也意味着,可是使用kill -9 来杀死numbus和supervisor进程,然后重启他们,他们可以继续工作,这个实际是的storm具有超强的稳定性
7.如何运行Topology?
 
strom jar all-your-code.jar backtype.storm.MyTopology arg1 arg2
8.spout是什么?
9.bolt是什么?
10.Topology由两部分组成?
11.stream grouping有几种?
shuffle grouping 随机发送任何一个task
fields grouping 保证相同field值得tuple会进入同一个task,对于wordCount非常关键

猜你喜欢

转载自www.cnblogs.com/songdongdong6/p/9827439.html