有没有办法看到sqoop写完文件?

时间:2017-01-19 13:04:33

标签: hadoop etl sqoop

假设一个sqoop作业正在将增量导入写入hdfs目录。 另一个(非sqoop)作业定期将数据从此目录移动到其他地方进行处理。 我希望这个工作不要移动目前正由sqoop修改的文件。有没有办法让准备好的文件一旦被移动就重命名为某种模式?

如果没有移动文件,sqoop是否每次都会将新内容附加到现有的part-m-000x文件中?

2 个答案:

答案 0 :(得分:0)

了解Ambari / HDFS上传过程的工作原理。当您将文件上传到hdfs时,在上传文件" xxxx.txt" Ambari将其上传为" xxxx.txt._COPYING"。上传完成后,只需将文件重命名为正确的名称。

如果您的其他sqoop进程搜索" .txt"

,它在重命名之前无法看到它,因此已经完成并准备移动。

过去完成此操作并且完美无缺。

答案 1 :(得分:0)

Sqoop在底层使用MapReduce,默认情况下M / R作业将结果存储在_temporary子目录中:

Task Side-Effect Files

  

(...)当OutputCommitter是FileOutputCommitter时,维护一个特殊的${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid}子目录,可以通过${mapreduce.task.output.dir}访问FileSystem上的每个任务尝试,其中存储任务尝试的输出。成功完成任务尝试后,${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid}(仅限)中的文件将提升为${mapreduce.output.fileoutputformat.outputdir}。当然,框架会丢弃不成功的任务尝试的子目录。此过程对应用程序完全透明。

我刚刚执行了Sqoop导入以验证此信息,而Sqoop确实以这种方式工作。