哪些HDFS操作是原子的?

时间:2013-09-03 05:52:04

标签: hadoop hdfs atomic mv

我正在尝试编写代码以将文件导入HDFS以用作hive外部表。我发现使用类似的东西:

foo | ssh hostname“hdfs dfs -put - / destination / $ FILENAME”

可能会导致创建临时文件的错误类型,然后在完成时重命名。这可能导致目录列表和查询执行之间的配置单元的竞争条件。

一种解决方法是将文件复制到临时目录并将“hdfs dfs mv”复制到位。

具体和一般/学术问题是:

  1. “hdfs dfs -mv”命令是原子的,对吧?
  2. 其他哪些HDFS命令或操作是原子的?
  3. 大约在同一时间发出的两个“hdfs dfs -mkdir”命令是否相信它们都成功了?
  4. 将文件移动到位时,是否有更好的方法可以避免使用配置单元的竞争条件?

1 个答案:

答案 0 :(得分:11)

Hadoop FS introduction中,您可以找到原子性要求

  

以下是与Hadoop兼容的文件系统的核心期望。一些FileSystems 满足所有这些期望;因此,某些程序可能无法按预期工作。

     

<强>原子性

     

有些操作必须是原子的。这是因为它们通常用于在集群中的进程之间实现锁定/独占访问。

     
      
  1. 创建文件。如果overwrite参数为false,则检查和创建必须是原子的。
  2.   
  3. 删除文件。
  4.   
  5. 重命名文件。
  6.   
  7. 重命名目录。
  8.   
  9. 使用mkdir()创建单个目录。
  10.         

    ...

         

    大多数其他操作都没有原子性的要求或保证。

因此,请确保您必须检查基础文件系统。但基于这些要求的答案是:

  1. 上面列出的
  2. 没有
  3. imho重命名文件是工作的不错选择