spark相关提问

1、spark和hadoop优势?

  1. Spark 把中间数据放到内存中,迭代运算效率高。MapReduce 中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而 Spark 支持 DAG 图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。(延迟加载)
  2. 其次,Spark 容错性高。Spark 引进了弹性分布式数据集 RDD (Resilient DistributedDataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即允许基于数据衍生过程)对它们进行重建。另外在RDD 计算时可以通过 CheckPoint 来实现容错
  3. 最后,Spark 更加通用。mapreduce 只提供了 Map 和 Reduce 两种操作,Spark 提供的数据集操作类型有很多,大致分为:Transformations 和 Actions 两大类。Transformations包括 Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort 等多种操作类型,同时还提供 Count, Actions 包括 Collect、Reduce、Lookup 和 Save 等操作

资源分配方面?

MapReduce多进程模型

每个Task运行在一个独立的JVM进程中, 每个Task运行完后,将释放所占用的资源,这些资源不能被其他Task复用,即使是同一个作业相同类型的Task。也就是说,每个Task都要经历“申请资源—> 运行Task –> 释放资源”的过程。

 Spark多线程模型

每个Executor单独运行在一个JVM进程中,每个Task则是运行在Executor中的一个线程; Executor一旦启动后,将一直运行,且它的资源可以一直被Task复用,直到Spark程序运行完成后才释放退出

同一个Executor内部的Task可共享内存,比如通过函数SparkContext#broadcast广播的文件或者数据结构只会在每个Executor中加载一次,而不会像MapReduce那样,每个Task加载一次;

2、spark缺点?

  1. JVM的内存overhead太大,1G的数据通常需要消耗5G的内存 -> Project Tungsten 正试图解决这个问题  也就是运行过程吃内存 会导致经常oom;
  2. 不同的spark app之间缺乏有效的共享内存机制
  3. 能否自动调优

3、上游是?dw  下游是  ods

4、如何保证高可用?

5、spark常用算子

6、shuffle调优

7、调优用到的参数?

8、shuffle过程如果减少shuffle buffer ,会导致拉取task变多,如何权衡利弊

9、shuffle的过程

猜你喜欢

转载自blog.csdn.net/chixushuchu/article/details/86650452
今日推荐