合并小文件spark开发

历时一个星期的讨论与开发,终于得出了一个合并小文件的雏形。

作为一个开发新生代,实属不易,发布出来与大家共勉。

思路:

这个思路是我与一个大佬一起完成的。接到合并小文件的任务以后,我们开始再网上各种找资料,跟朋友沟通学习。其中在网上找到了一篇博客写的很好:

https://www.cnblogs.com/heguoxiu/p/10691019.html   这篇博客已经很完善了,但是我们后边并没有完全按照他的思路来,其中他这里边缺少了校验的过程,就是小文件合并以后对文件条数的校验

* 合并文件
* 合并步骤:
* 1. 将小文件目录(srcDataPath)下的文件移动到临时目录/mergePath/${mergeTime}/src
* 2. 计算临时目录(/mergePath/${mergeTime}/src)的大小。 根据大小确定分区的数。
* 3. 使用coalesce或者repartition, 传入分区数。 将临时目录数据写入临时的数据目录(/mergePath/${mergeTime}/data)

*4.校验srcDataPath目录下数据条数和/mergePath/${mergeTime}/src目录下的条数是否一致,如若一致那么进行步骤5,6,否则,将小文件原封不动的放回去
* 5. 将临时数据目录文件move到文件目录(srcDataPath)
* 6. 删除临时目录(/merge/tmp)

以上这个思路是第一版,后来考虑到一个问题就是如果我们把小文件移动到临时目录的时候,那段时间这个目录对应的表是无法查询的,为了避免这个问题,我们没有选择移动文件,而是选择了通过read读取文件,转成DF,然后再把DF写入一个临时目录,这样就不会出现合并目录对应的表无法查询的问题了。

h

原文地址:https://www.cnblogs.com/xuziyu/p/12028690.html