1、Spark的join有哪些?
a. Broadcast Hash Join
当一个表相对较小(可以通过broadcast提示或配置自动触发),可以将其广播到每个节点的内存中。 每个节点然后对其本地的大表数据进行遍历,并直接与内存中的小表匹配。
b. Shuffle Hash Join
类似于Broadcast Hash Join,但不涉及广播。相反,两个表都会基于连接键被重新分区(即Shuffle)。 然后在每个分区内部执行Hash Join。 这种方式要求有足够的内存来存储较大的表的一个分区的数据。
c. Sort Merge Join
当两个表都很大时使用,这两个表首先会被根据连接键排序。 排序后,两边的数据流可以按照顺序进行合并,从而实现高效的连接操作。 它需要先对输入数据按连接键排序,这通常通过Shuffle完成。
2、Spark(内存计算)的shuffle过程,和MR的区别
MapReduce Shuffle过程
Mapper输出的结果会写入缓存,随后经过分区、排序、合并等步骤,最终写入磁盘。 Reducer从各个Mapper所在的机器上拉取对应的Partition数据并进行归并处理。
Spark Shuffle过程
Spark的Shuffle机制有几种不同的实现方式,主要包括HashShuffle和SortShuffle。
1. HashShuffle
HashShuffle是早期的Shuffle实现,存在一些性能问题:
普通运行机制:每个Map任务为每个Reducer创建一个独立的文件,导致m*n个文件(m为Map任务数,n为Reducer任务数),文件数量过多。 合并机制:为了减少文件数量,可以通过配置参数让多个Map任务共享文件,但这仍然会产生大量的小文件,增加了GC压力和I/O开销。
2. SortShuffle
SortShuffle是当前默认的Shuffle实现,分为两种模式:
普通机制(默认)
按Key分区:Map任务根据Key的哈希值将其分配到不同的分区。写入缓冲区:中间结果首先写入内存中的缓冲区。 溢写(Spill):当内存不足时,数据会溢写到磁盘。每次溢写都会生成一个临时文件。 归并(Merge):所有溢写文件会被归并成一个索引文件(index file)和一个数据文件(data file)。这一步骤可以进行预聚合(如reduceByKey等操作),以减少数据量。 读取和归并:在Reduce阶段,Spark会从各个Map任务所在的节点拉取对应的分区数据,并进行归并处理。
Bypass运行机制
条件:当shuffle read task的数量小于spark.shuffle.sort.bypassMergeThreshold(默认200)时,启用Bypass机制。 不聚合类操作:适用于非聚合类的Shuffle算子(如groupByKey、join等),而不是reduceByKey这样的聚合类操作。 直接写入磁盘:中间结果直接写入磁盘,而不需要先写入内存缓冲区,减少了内存压力。 单个文件:每个Map任务只会生成一个文件,避免了大量小文件的问题。
3、小文件问题怎么处理
Hadoop: CombineFileInputFormat
Hive:
① 使用 hive 自带的 concatenate 命令,自动合并小文件
alter tabletest1 concatenate;
②如果数据源本身就是大量小文件;在Map输入的时候, 把小文件合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
③如果是动态分区插入数据,产生大量的小文件=maptask个数 * 分区数;
select * from table DISTRIBUTEBYrand();
④如果reduce个数越多, 小文件越多:设置reduce数量
set mapreduce.job.reduces=10;
Spark: 只考虑输出情况coalesce()方法和repartition()方法 或者用宽依赖shuffle
4、Hive on Spark和Spark on Hive有什么区别
Hive on Spark:语法是Hivesql, Hive既作为存储元数据、解析SQL和优化,,执行引擎变成了Spark,Spark负责采用RDD执行。
Spark on Hive :语法是sparkSQL,加载Hive的配置文件,获取Hive的元数据信息,sparkSQL来操作Hive表中的数据,执行引擎是Spark
--END--
扫下方二维码,限时领取优惠券,加入VIP社群,获得更多实用技术知识和工作经验,探索大数据的无限可能性!并且有很多大数据面试经验,面试技巧,简历修改等。
五分钟学大数据-VIP社群 是高质量圈子,无任何广告营销及杂乱无用内容!
一个人走得更快,一群人才能走得更远,加入VIP社群,学习持续进步。
想了解星球提供的具体服务?点击查看👉加入大数据VIP社群,限时开放!
非常欢迎大家加我个人微信,有关大数据的问题我们在群内一起讨论
长按上方扫码二维码,加我微信,拉你进群