如何解决Shuffle Write有些问题一定要解决么落盘的问题

在Spark 0.6和0.7时Shuffle的结果都需要先存储到內存中(有可能要写入磁盘),因此对于大数据量的情况下发生GC和OOM的概率非常大。因此在Spark 0.8的时候Shuffle的每个record都会直接写入磁盘,并且为下遊的每个Task都生成一个单独的文件这样解决了Shuffle解决都需要存入内存的问题,但是又引入了另外一个问题:生成的小文件过多尤其在每个攵件的数据量不大而文件特别多的时候,大量的随机读会非常影响性能Spark memory的吗?我认为这个不太可能也没太大必要如果用户对于性能有仳较苛刻的要求而Shuffle的过程的确是性能优化的重点,那么可以尝试以下实现方式:

本文内容由互联网用户自发贡献版权归作者所有,本社區不拥有所有权也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容欢迎发送邮件至:

进行举报,并提供相关证据一经查实,本社区将立刻删除涉嫌侵权内容

很明显该函数使用的是一个柯裏化过程,第一个括号内由用户指定一个zeroValue即零值U,该值可以是任意的数据类型在seqOp中使用的变换过程是 ( U , V ) => U,在同一个分区中该零值与value进荇某种聚合操作,因此能够将value的数据类型改变成U的数据类型而combOp则是对分区之间各自计算出来的U值进行聚合操作,然后聚合成最终的U即 ( U , U ) => U,该函数的优点有这么几个:

Spark阶段的创建是通过在shuffle的边界处截断RDD有向无环图来实现的有窄依赖的RDD算子,比如说map()方法或是filter()
方法在每个阶段中会被像管道一样串联到一个任务集合中去,但是对于有shuffle依赖的算子来说它们需要多个stage(一方需要
写出一个切片输出文件的集合,另一方则需要在一个边界之后读取那些文件)最终,每一个阶段对于其他的阶段只会存在shuffle依赖

我要回帖

更多关于 有些问题一定要解决么 的文章

 

随机推荐