• 大数据面试(spark)


    spark

    1.scala闭包?

    闭包其实是一个函数,函数的返回值依赖于声明在函数外部变量。

    2.scala伴生对象?

    在同一个scala源文件中,class与object有同样的名字。

    object称为伴生对象,class称为伴生类。它们之间可以相互访问private属性。

    3.scala伴生对象apply方法?

    在伴生对象中定义apply方法,直接用对象名object就可以调用apply方法,也可以实现构造伴生类的功能。

    4.scala中var与val?

    var可以多次赋值

    5.scala柯里化?

    将原来接受两个参数的函数变成接受一个参数的函数过程。

    新函数返回一个原来以第二个参数作为参数的函数。

    6.scala隐式转化?

    在object定义隐式转换方法前加implicit def,在用到隐式转化地方用import引入类.方法,自动调用转化后的方法。

    7.scala匹配模式?

    match  {  case1  case2  }

    8.scala与java区别?

    1)申明变量不同。

    2)返回值,scala不用return。

    3)通配符,scala_ ,java*。

    4)接口,scala为trait继承使用extends,多继承使用with。java为interface继承使用implements多继承用逗号。

    9.spark集群运行模式?

    1)单节点运行。

    2)集群模式。

    3)运行在yarn上面。

    10.spark中reducebykey与groupbykey区别?

    1)都可以进行聚合操作,reducebykey更快适合大数据集。

    11.spark中的宽依赖和窄依赖?

    宽依赖:一个父RDD分区对应多个子RDD分区。

    窄依赖:一个父RDD分区对一个子RDD分区,多个父RDD分区对一个子RDD分区。

    12.spark shuffle与hadoop shuffle区别?

    1)spark处理任务输出结果放入内存中。hadoop处理任务结果放入磁盘中,需要大量IO操作。

    2)hadoop中MR在groupby前对分区key排序。

    13.spark产生数据倾斜的原因以及解决方法?

    1)计算数据时数据的分散度不够,导致大量的数据集中到集群一台或几台机器上,而集群其它节点空闲会导致整个计算过程慢。

         数据倾斜只会发生在shuffle过程中。

    2)解决办法?

         2.1)提高shuffle操作的并行度。增加shuffle read task的数量,可以让原本分配给一个task的多个key分配给多个task,从而让每个task处理比原来更少的数据。

         2.2)使用随机key进行双重聚合。将原本相同的key通过附加随机前缀的方式,变成多个不同的key,就可以让原本被一个task处理的数据分散到多个task上去做局部聚合,进而解                 决单个task处理数据量过多的问题。接着去除掉随机前缀,再次进行全局聚合,就可以得到最终的结果

         2.3)过滤少数导致倾斜的key。判断少数几个数据量特别多的key对计算结果不是特别重要,那么可以直接过滤掉那少数的几个key。

    14.spark shuffle过程?

    当rdd依赖中出现宽依赖的时候就会触发shuffle操作,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。

    Shuffle描述着数据从map task输出到reduce task输入的这段过程。shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。因为在分布式情况下,reduce task需要跨节点去拉取其它节点上的map task结果。这一过程将会产生网络资源消耗和内存,磁盘IO的消耗。通常shuffle分为两部分:Map阶段的数据准备和Reduce阶段的数据拷贝处理。一般将在map端的Shuffle称之为Shuffle Write,在Reduce端的Shuffle称之为Shuffle Read.

    https://www.cnblogs.com/itboys/p/9226479.html

    15.spark 物理执行流程?

    1.先把spark程序提交给driver,driver负责运行spark程序的main方法,运行完后生成逻辑执行图,然后把逻辑执行图调用Action。

    2.DAGScheduler会生成stage并划分成不同阶段,每个阶段对应一个TaskSet。

    3.DAGScheduler请求TaskScheduler调度TaskSet,TaskScheduler会询问集群有多少资源,资源返回给TaskScheduler。

    4.TaskScheduler把stage调度到executor中执行taskSet,得到结果再发送给driver。

  • 相关阅读:
    又一种Mysql报错注入
    PHP wget 增强脱裤脚本(PDO MYSQL)
    一种少见的跨目录写webshell方法
    过狗一句话
    在myql sqlserver里边怎么快速找到带有关键字的表
    php读取3389脚本
    学习OpenCV,看这些!
    Git 学习看这篇就够了!
    开发工具使用技巧和插件大总结
    (资源整理)带你入门Spark
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/12781603.html
Copyright © 2020-2023  润新知