有没有办法看到sqoop已经完成了对文件的写入?

vs91vp4v  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(390)

假设sqoop作业将增量导入写入hdfs目录。另一个(非sqoop)作业是周期性地将数据从此目录移到其他地方进行处理。我希望这项工作不移动文件正在修改的sqoop目前。有没有一种方法,一旦准备好的文件可以移动,就将它们重命名为特定的模式?
如果不移动文件,sqoop是否每次都将新内容附加到现有的part-m-000x文件中?

svmlkihl

svmlkihl1#

sqoop在引擎盖下使用mapreduce,默认情况下m/r作业将结果存储在 _temporary 进行中的子目录:
任务副作用文件
(…)当outputcommitter为fileoutputcommitter时,维护一个特殊的 ${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid} 子目录可通过 ${mapreduce.task.output.dir} 对于存储任务尝试输出的文件系统上的每个任务尝试。成功完成任务尝试后,中的文件 ${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid} (仅)升级为 ${mapreduce.output.fileoutputformat.outputdir} . 当然,框架会丢弃不成功任务尝试的子目录。这个过程对应用程序是完全透明的。
我刚刚执行了一个sqoop导入来验证这个信息,sqoop确实是这样工作的。

qjp7pelc

qjp7pelc2#

看看ambari/hdfs上传过程是如何工作的。当您将文件上载到hdfs时,在上载文件“x.txt”的过程中,ambari将其上载为“x.txt.\u copying”。上传完成后,只需将文件重命名为正确的名称。
如果您的另一个sqoop进程搜索“.txt”文件,它将在重命名它之前看不到它,因此完成并准备移动它。
在过去做过,效果很好。

相关问题