1.什么是spark?

Spark 是一个用来实现快速而通用的集群计算的平台。

2.Spark生态系统?

spark core:spark 核心计算
spark sql: 对历史数据的交互式查询
spark streaming : 近实时计算
spark ml : 机器学习
spark graphx : 图计算

3.常见的 分布式文件系统?

hdfs fastdfs Tachyon TFS(淘宝用) GFS(谷歌) S3

4.master资源分配有哪些?

尽量集中 尽量打散(默认)

5.spark 可以代替hadoop 吗?

不可以。Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的概念。RDD可以cache到内存中,那么每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。但是,我们也要看到spark的限制:内存。我认为Hadoop虽然费时,但是在OLAP等大规模数据的应用场景,还是受欢迎的。目前Hadoop涵盖了从数据收集、到分布式存储,再到分布式计算的各个领域,在各领域都有自己独特优势。

6.spark 特点?

不可变 可分区 无副本

7.DAG: 有向无环图

8.spark 开发语言选择?

java scala python。最少要掌握两个

9.什么是Rdd?

弹性的分布式数据集。spark的计算核心。弹性是指扩展无上限

10.Rdd的属性?

rdd的5个特性
1.分区列表(a list of partitions)
2.每一个分区都有一个计算函数(a function for computing each split)
3.依赖于其他RDD的列表(a list of dependencies on other RDDs)
4.key-value数据类型的RDD分区器(-Optionally,a Partitioner for key-value RDDS)
5.每个分区都有一个优先位置列表(-Optionally,a list of preferred locations to compute each split on)

11.分片的个数由什么决定?

默认(2个) 手动 hdfs(由块决定) kafka(topic里面的kafka决定)

12.分片的意义?

决定并行。并行的高低是否影响速率这个要考虑资源情况

13.spark 的容错?

lineage:血统关系 (重新计算)
checkpoint:设置检查点

14.创建Rdd的方式?

  1. 使用程序中的集合创建RDD,主要用于进行测试,可以在实际部署到集群运行之前,自己使用集合构造测试数据,来测试后面的spark应用的流程
  2. 使用本地文件创建RDD,主要用于的场景为:在本地临时性地处理一些存储了大量数据的文件 (使用最多)
val rdd = sc.textFile(“/home/hadoop/data.txt”)
  1. 使用HDFS文件创建RDD,应该是最常用的生产环境处理方式,主要可以针对HDFS上存储的大数据,进行离线批处理操作

15.spark 算子分为? 区别? 写出10个以上常用的算子

spark算子分为Transformation算子和action算子
Transformation算子:不会运行,只会记录操作,遇到action算子才会执行
action算子:执行算子map(func) 可以把(k)变成(k,v)的形式
源 DStream的每个元素通过函数func返回一个新的DStream。

  • flatMap(func) 一对多。类似与map操作,不同的是每个输入元素可以被映射出0或者更多的输出元素。
  • filter(func) 过滤。在源DSTREAM上选择Func函数返回仅为true的元素,最终返回一个新的DSTREAM 。
  • repartition(numPartitions) 设置分区。 通过输入的参数numPartitions的值来改变DStream的分区大小。
  • union(otherStream) 连接两个rdd。返回一个包含源DStream与其他 DStream的元素合并后的新DSTREAM。
  • count() 计数,统计。对源DStream内部的所含有的RDD的元素数量进行计数,返回一个内部的RDD只包含一个元素的DStreaam。
  • reduce(func) 计算。使用函数func(有两个参数并返回一个结果)将源DStream中每个RDD的元素进行聚 合操作,返回一个内部所包含的RDD只有一个元素的新DStream。
  • countByValue() 计算DStream中每个RDD内的元素出现的频次并返回新的DStream[(K,Long)],其中K是RDD中元素的类型,Long是元素出现的频次。
  • reduceByKey(func, [numTasks]) 当根据key计算值
  • join(otherStream, [numTasks]) 当被调用类型分别为(K,V)和(K,W)键值对的2个DStream 时,返回类型为(K,(V,W))键值对的一个新 DSTREAM。
  • cogroup(otherStream, [numTasks]) 当被调用的两个DStream分别含有(K, V) 和(K, W)键值对时,返回一个(K, Seq[V], Seq[W])类型的新的DStream。
  • transform(func) 大致是rdd可以转化成df。通过对源DStream的每RDD应用RDD-to-RDD函数返回一个新的DStream,这可以用来在DStream做任意RDD操作。
  • updateStateByKey(func) 保留上一次计算的状态去计算下一个,如果上一次计算是2下一次计算就是2+3

16.如何产生job?

Spark Application在遇到action算子时,SparkContext会生成Job

17.map 和mappartition 的区别?

map是对rdd中的每一个元素进行操作;速率慢
mapPartitions则是对rdd中的每个分区的迭代器进行操作,可能导致OOM(OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”)

18.repartition 和 coalesce 的区别?

都是分区的算子,repartition底层调用的是coalesce。但是repartition的shuffle默认是false。coalesce的shuffle默认是ture。在增大分区时要用repartition,如果用coalesce就要把shuffle变为ture。

19.什么是宽依赖 窄依赖?

窄依赖:父Rdd的partition只对应一个子Rdd的partiiton 一对一
宽依赖:父Rdd的partition对应多个子Rdd的partiiton 一对多

20.宽依赖的算子有哪些?

bykey的算子:如groupBykey
repartition:
部分join算子

21.reduceByKey aggregateByKey combineByKey 区别?

combineByKey 时最底层的。reduceByKey和aggregateByKey底层都是实现combineByKey的。
reduceByKey 与groupByKey相比,通过使用local combiner先做 一次聚合运算,减少数据的shuffler。
.aggregateByKey 和reduceByKey类似,但更具灵活性,可以自定义在分区内和分区间的聚合操作。
combineByKey 与aggregateByKey类似,都调用了combineByKeyWithClassTag,在aggregateByKey中的

第一个参数是zero value,此函数的第一个参数需要提供一个初始化函数,通过第一个函数完成分区内计算,通过第二个函数完成分区间计算