spark笔试题下

本文深入探讨Spark的关键特性,包括持久化、容错机制、共享变量、提交方式、资源调度、日志查看、优化策略、序列化、配置优先级、Streaming与Storm对比、核心抽象、数据源、容错语义、应用程序升级、消费Kafka数据方式、即时查询、与Hive区别、SparkSQL特点、RDD与DataFrame区别、开窗函数、自定义函数等,以及Spark 1.0与2.0的主要差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

23.持久化?

持久化的算子:cache和persist
cache底层实现的是persist

24.容错?

lineage和checkpoint

25.共享变量?

累加器和广播变量

26.spark 提交方式? 区别?

一.client mode: In client mode, the driver is launched in the same process as the client that submits the application…也就是说在Client模式下,Driver进程会在当前客户端启动,客户端进程一直存在直到应用程序运行结束。
工作流程如下:
1.启动master和worker . worker负责整个集群的资源管理,worker负责监控自己的cpu,内存信息并定时向master汇报
2.在client中启动Driver进程,并向master注册
3.master通过rpc与worker进行通信,通知worker启动一个或多个executor进程
4.executor进程向Driver注册,告知Driver自身的信息,包括所在节点的host等
5.Driver对job进行划分stage,并对stage进行更进一步的划分,将一条pipeline中的所有操作封装成一个task,并发送到向自己注册的executor进程中的task线程中执行
6.应用程序执行完成,Driver进程退出
二.cluster模式:In cluster mode, however, the driver is launched from one of the Worker processes inside the cluster, and the client process exits as soon as it fulfills its responsibility of submitting the application without waiting for the application to finish.也就是说,在cluster模式下,Driver进程将会在集群中的一个worker中启动,而且客户端进程在完成自己提交任务的职责后,就可以退出,而不用等到应用程序执行完毕
工作流程如下:
1.在集群的节点中,启动master , worker进程,worker进程启动成功后,会向Master进行注册。
2.客户端提交任务后,ActorSelection(master的actor引用),然后通过ActorSelection给Master发送注册Driver请求(RequestSubmitDriver)
3.客户端提交任务后,master通知worker节点启动driver进程。(worker的选择是随意的,只要worker有足够的资源即可) driver进程启动成功后,将向Master返回注册成功信息
4.master通知worker启动executor进程
5.启动成功后的executor进程向driver进行注册
6.Driver对job进行划分stage,并对stage进行更进一步的划分,将一条pipeline中的所有操作封装成一个task,并发送到向自己注册的executor进程中的task线程中执行
7.所有task执行完毕后,程序结束。

27.spark 资源调度方式?

yarn standalone(本地) mesos

28.spark 查看日志的方式?

聚合日志 分散和webui

29.spark 优化? 记住10个以上 (硬件 配置 代码)

1.避免创建重复的RDD
2.尽可能使用同一个RDD
3.对多次使用的RDD进行持久化
4.尽量避免使用shuffle类算子
5.使用map-side预聚合的shuffle操作
6.使用高性能的算子
7.使用Kryo优化序列化性能
8.广播大变量
9.优化数据结构
10.尽量减少shuffle

30.JVM ?

堆 栈 方法区

31.GC的策略?

GC是垃圾回收。GC采用的算法是引用计数算法。可达性分析算法。垃圾收集算法。
垃圾收集算法主要有下面三种:标记-清除算法、复制算法、标记-整理算法

32.spark 序列化?

序列化在分布式应用中起到很重要的作用。那些会让对象序列化过程缓慢,或是会消耗大量字节存储的序列化格式会大大降低计算速率。通常这会用户在优化Spark应用程序中的第一件事。Spark旨在在便利(允许您使用您的操作中的任何Java类型)和性能之间实现平衡。

33.spark 配置优先级?

配置文件 脚本 代码(逐渐增大)

34.sparkStreagming 和storm 对比?

Storm 是来了一条处理 一条,没有就不处理。
sparkStreaming,每隔多长时间计算一次spark的任务。批处理。
Storm 优点:实时性好,容错机制好 事务性
缺点:吞吐量一般
sparkStreaming:缺点:实时性没有storm好,容错处理起来也非常麻烦。
优点:吞吐量非常不错,最关键是可以和spark 离线批处理(rdd),spark的交互式查询语句(离线处理)进行无缝的整合。处理一些非常复杂的业务时候是有一定的优势的。

35.storm核心?

storm:Spark架构下面的(准)实时的流式计算框架。对接的数据源主要都是kafka,都是从kafka 里面拿到数据。

36.sparkStreagming核心抽象?

Dstream:sparkstreaming的数据抽象。其实Dstream 就是spark 对rdd进行的一个封装,底层走到流程还是我们之前讲的RDD的那一套。

37.什么是Dstream?

Dstream:sparkstreaming的数据抽象,代表一个持续不断的数据流。

38.sparkStreagming 对象调用stop 方法,参数解释?

39.sparkStreagming 特有算子?

  • transform(func) 大致是rdd可以转化成df,通过对源DStream的每RDD应用RDD-to-RDD函数返回一个新的DStream,这可以用来在DStream做任意RDD操作。
  • updateStateByKey(func) 保留上一次计算的状态去计算下一个,如果上一次计算是2下一次计算就是2+3,返回一个新状态的DStream,其中每个键的状态是根据键的前一个状态和键的新值应用给定函数func后的更新。这个方法可以被用来维持每个键的任何状态数据。
  • window(windowLength, slideInterval) 返回一个基于源DStream的窗口批次计算后得到新的DStream。

40.sparkStreagming 数据源?

hdfs flume kafka
Spark streaming的数据源主要是kafka,就是spark Streaming作为kafka的消费者。目前有两种方式。
一种是基于receiver的方式,另一种基于direct的方式

41.sparkStreagming receive?

就是可能因为程序失败而丢失数据。为了让它不丢失数据,还得启动一个叫write ahead log–>WAL机制才能保证数据不丢,但是启动这种机制之后,也有不足的地方。
第一,只能数据不丢,但是不能保证数据有没有被重复的消费。
第二,开启wal机制之后,性能会比较低下,影响网络读写速度。

42.sparkStreagming 持久化 容错?

持久化算子是cache和persist。
容错有checkPoint和lineage容错机制

43.程序挂掉分为?

程序挂,分两种:driver 挂了
Executor挂了

44.driver 挂了,如何解决?

1.配置spark-submit --supervise ,让集群能够给我提供机器启动driver
2.在启动dirver的时候,能够从ck中恢复元数据

45.可以对那些数据 checkPoint?

做实时运算的程序是不会停止运行的。会一直的跑下去,我们必须防止,程序万一挂了之后,能够容错。
对两种数据容错:元数据和运行时的计算数据

46.容错的语义?

最多一次
至少一次
有且仅有一次(最高语义)
1、基于文件的数据源
如果所有的输入数据都在一个容错的文件系统中,比如HDFS,Spark Streaming一定可以从失败进行恢复,并且处理所有数据。这就提供了一次且仅一次的语义,意味着所有的数据只会处理一次。

2、基于Receiver的数据源

对于基于Receiver的数据源,容错语义依赖于失败的场景和Receiver类型。

可靠的Receiver:这种Receiver会在接收到了数据,并且将数据复制之后,对数据源执行确认操作。如果Receiver在数据接收和复制完成之前,就失败了,那么数据源对于缓存的数据会接收不到确认,此时,当Receiver重启之后,数据源会重新发送数据,没有数据会丢失。

如果在接受和复制完成之前,就挂了,receiver挂了,那么没有给数据源反馈成功接受信息。
相当于这个数据没有接受成功,kafka也是做到的。

不可靠的Receiver:这种Receiver不会发送确认操作,因此当Worker或者Driver节点失败的时候,可能会导致数据丢失。

47.应用程序如何升级?

1、升级后的Spark应用程序直接启动,先与旧的Spark应用程序并行执行。当确保新的应用程序启动没问题之后,就可以将旧的应用程序给停掉。但是要注意的是,这种方式只适用于,能够允许多个客户端读取各自独立的数据,也就是读取相同的数据。

2、小心地关闭已经在运行的应用程序,使用StreamingContext的stop()方法,可以确保接收到的数据都处理完之后,才停止。然后将升级后的程序部署上去,启动。这样,就可以确保中间没有数据丢失和未处理。因为新的应用程序会从老的应用程序未消费到的地方,继续消费。但是注意,这种方式必须是支持数据缓存的数据源才可以,比如Kafka、Flume等。如果数据源不支持数据缓存,那么会导致数据丢失。

48.sparkStreagming 消费kafka 的数据方式?

一种是基于receiver的方式,另一种基于direct的方式
1.Receiver方式:高阶Api,采用的是zookeeper保存offset。
2.Direct方式:低阶Api,是自己管理偏移量,是可靠的,能保证有且仅有一次的语义。

49.receive 方式 如何保证消息的可靠性?

利用wal

50.direct 方式 自己如何保存偏移量?

利用 zk和 ck

51.即席查询:用户根据需求 自定义查询

52.hive 和 spark sql 有什么区别?

hive是分布式又是数据仓库,同时又是查询引擎,Spark SQL只是取代的HIVE的查询引擎这一部分。
Hive:负责廉价的数据仓库存储,底层是mapreduce
Spark Sql:负责高速的计算,底层是rdd

53.spark sql特点?

易整合
统一的数据访问
兼容hive
标准的数据连接

54.spark1.0与2.0的差别?

2.0版本的sparksession统一了sqlcontext和hivecontext
2.0版本的dataSet是dataFrame 的数据集

55.spark sql的核心抽象?

56.Rdd 和 dataFrame 的区别?

当我们以两种不同的方式读取到Person数据,Person会作为RDD的类型参数,但是Spark无法知晓内部结构,而dataFrame可以清楚加载到Person实体的内部结果和具体的数据。RDD是分布式的Java对象集合(这也就是为什么RDD会有Broadcast广播变量的方法),DataFrame是分布式的Row对象的集合。
DataFrame除了提供比RDD更丰富的算子之外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化。

57.spark on hive: hive作为数据源使用spark计算 hive on spark: spark作为计算引擎,使用hive计算

58.Rdd 创建DF 的两种方式?

通过反射创建,通过云数据创建

59.开窗函数?

开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。
开窗函数的调用格式为:
函数名(列名) OVER(partition by 列名 order by列名) 。

60.hive 自定义函数?

udf udaf udtf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值