join 操作优化经验是什么? join 其实常见的就分为两类: map-side join 和 reduce-side join。当大表和小表 join 时,用 map-side join 能显著提高效率。将多份数据进行关联是数据处理过程中非常普遍的用法,不过在分布式计算系统中,这个问题往往会变的非常麻烦,因为框架提供的 join 操作一般会将所有数据根据 key 发送到所有的 reduce 分区中去,也就是 shuffle 的过程。 造成大量的网络以及磁盘 IO 消耗,运行效率极其低下,这个过程一般被称为 reduce-sid 阅读全文 → 2023-01-17
Spark 为什么要持久化,一般什么场景下要进行 persist 操作? spark 所有复杂一点的算法都会有 persist 身影,spark 默认数据放在内存, spark 很多内容都是放在内存的,非常适合高速迭代,1000 个步骤只有第一个输入数据,中间不产生临时数据,但分布式系统风险很高,所以容易出错,就要容错,rdd 出错或者分片可以根据血统算出来,如果没有对父 rdd 进行persist 或者 cache 的化,就需要重头做。 以 下 场 景 会 使 用 persist 1)某个步骤计算非常耗时,需要进行 persist 持久化 2)计算链条非 阅读全文 → 2023-01-17
Spark 的数据本地性有哪几种? Spark 中的数据本地性有三种: 1)PROCESS_LOCAL 是指读取缓存在本地节点的数据 2)NODE_LOCAL 是指读取本地节点硬盘数据 3)ANY 是指读取非本地节点数据 通常读取数据 PROCESS_LOCAL>NODE_LOCAL>ANY,尽量使数据以PROCESS_LOCAL 或 NODE_LOCAL 方式读取。其中 PROCESS_LOCAL 还和cache 有关,如果 RDD 经常用的话将该 RDD cache 到内存中,注意,由于cache 是 lazy 的,所以必须 阅读全文 → 2023-01-17
Spark 的 shuffle 过程? 从下面三点去展开 1)shuffle 过程的划分 2)shuffle 的中间结果如何存储 3)shuffle 的数据如何拉取过来 阅读全文 → 2023-01-17
RDD 有哪些缺陷? 1)不支持细粒度的写和更新操作(如网络爬虫),spark 写数据是粗粒度的。所谓粗粒度,就是批量写入数据,为了提高效率。但是读数据是细粒度的也就是说可以一条条的读。 2)不支持增量迭代计算,Flink 支持 阅读全文 → 2023-01-17
RDD 的弹性表现在哪几点? 1)自动的进行内存和磁盘的存储切换; 2)基于 Lineage 的高效容错; 3)task 如果失败会自动进行特定次数的重试; 4)stage 如果失败会自动进行特定次数的重试,而且只会计算失败的分片; 5)checkpoint 和 persist,数据计算之后持久化缓存; 6)数据调度弹性,DAG TASK 调度和资源无关; 7)数据分片的高度弹性。 阅读全文 → 2023-01-16