大数据面试题Spark篇(2)

上一篇链接:大数据面试题Spark篇(1)_后季暖的博客-CSDN博客​​​​​​

hadoop篇:大数据常见面试题 Hadoop篇(1)_后季暖的博客-CSDN博客_大数据hadoop技试题

Hive篇:大数据面试题Hive篇_后季暖的博客-CSDN博客

Hbase篇:大数据面试题Hbase篇_后季暖的博客-CSDN博客

13.Spark on Yarn 模式有哪些优点?

    1)与其他计算框架共享集群资源(Spark框架与MapReduce框架同时运行,如果不用Yarn进行资源分配,MapReduce分到的内存资源会很少,效率低下);资源按需分配,进而提高集群资源利用等

    2)相较于Spark自带的Standalone模式,Yarn的资源分配更加细致 

    3)Application部署简化,例如Spark,Storm等多种框架的应用由客户端提交后,由Yarn负责资源的管理和调度,利用Container作为资源隔离的单位,以它为单位去使用内存,cpu等 

    4)Yarn通过队列的方式,管理同时运行在Yarn集群中的多个服务,可根据不同类型的应用程序负载情况,调整对应的资源使用量,实现资源弹性管理

14.Spark使用parquet文件存储格式能带来哪些好处?

    1)如果说HDFS是大数据时代分布式文件系统首选标准,那么parquet则是整个大数据时代文件存储格式实时首选标准。 

    2)速度更快:从使用spark sql操作普通文件CSV和parquet文件速度对比上看,绝大多数情况会比使用csv等普通文件速度提升10倍左右,在一些普通文件系统无法在spark上成功运行的情况下,使用parquet很多时候可以成功运行。 

    3)parquet的压缩技术非常稳定出色,在spark sql中对压缩技术的处理可能无法正常的完成工作(例如会导致lost task,lost executor)但是此时如果使用parquet就可以正常的完成。 

    4)极大的减少磁盘I/o,通常情况下能够减少75%的存储空间,由此可以极大的减少spark sql处理数据的时候的数据输入内容,尤其是在spark1.6x中有个下推过滤器在一些情况下可以极大的减少磁盘的IO和内存的占用,(下推过滤器)。 

    5)spark 1.6x parquet方式极大的提升了扫描的吞吐量,极大提高了数据的查找速度spark1.6和spark1.5x相比而言,提升了大约1倍的速度,在spark1.6X中,操作parquet时候cpu也进行了极大的优化,有效的降低了cpu消耗。 

    6)采用parquet可以极大的优化spark的调度和执行。我们测试spark如果用parquet可以有效的减少stage的执行消耗,同时可以优化执行路径。

15.Spark应用程序的执行过程是什么?

    1)构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源; 

    2)资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上; 

    3)SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor; 

    4)Task在Executor上运行,运行完毕释放所有资源。

16.collect功能是什么,其底层是怎么实现的?

        driver通过collect把集群中各个节点的内容收集过来汇总成结果,collect返回结果是Array类型的,collect把各个节点上的数据抓过来,抓过来数据是Array型,collect对Array抓过来的结果进行合并,合并后Array中只有一个元素,是tuple类型(KV类型的)的。

17.reduceByKey是不是action?

不是,很多人都会以为是action,reduce rdd是action

18.提交任务时,如何指定Spark Application的运行模式?

    1)cluster模式:./spark-submit --class xx.xx.xx --master yarn --deploy-mode cluster xx.jar 

    2)client模式:./spark-submit --class xx.xx.xx --master yarn --deploy-mode client xx.jar

19.一个task的map数量由谁来决定?

一般情况下,在输入源是文件的时候,一个task的map数量由splitSize来决定的,

那么splitSize是由以下几个来决定的 

goalSize = totalSize / mapred.map.tasks 

inSize = max {mapred.min.split.size, minSplitSize} 

splitSize = max (minSize, min(goalSize, dfs.block.size)) 

一个task的reduce数量,由partition决定。

20.列出你所知道的调度器,说明其工作原理

    1)FiFo schedular 默认的调度器  先进先出 

    2)Capacity schedular  计算能力调度器  选择占用内存小  优先级高的 

    3)Fair schedular 调度器  公平调度器  所有job 占用相同资源

21.Spark累加器有哪些特点?

    1)累加器在全局唯一的,只增不减,记录全局集群的唯一状态; 

    2)在exe中修改它,在driver读取; 

    3)executor级别共享的,广播变量是task级别的共享两个application不可以共享累加器,但是同一个app不同的job可以共享。

22.RDD、DataSet、DataFrame的区别?

dataframe和rdd主要区别在于 dataframe的数据多了一个结构

但是DataFrame每一行的类型固定为Row,只有通过解析才能获取各个字段的值 

Dataset在需要访问列中的某个字段时是非常方便的,然而,如果要写一些适配性很强的函数时,如果使用Dataset,行的类型又不确定,可能是各种case class,无法实现适配,这时候用DataFrame即Dataset[Row]就能比较好的解决问题。

下面是Dataset 可以直接通过属性名取 适配性指的是假如你每一行的类型都不一样 就只能用df df里面做区分是哪个case class的然后split然后通过下标来取出来

​​​​​​​

猜你喜欢

转载自blog.csdn.net/weixin_51981189/article/details/128542708