哪些HDFS操作是原子的?

Set*_*jmp 11 hadoop atomic mv hdfs

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

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

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

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

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

  1. "hdfs dfs -mv"命令是原子的,对吗?
  2. 什么其他HDFS命令或操作是原子的?
  3. 几乎同时发出的两个"hdfs dfs -mkdir"命令是否相信它们都成功了?
  4. 将文件移动到位时,有没有更好的方法来避免使用配置单元的竞争条件?

two*_*rec 14

Hadoop FS介绍中,您可以找到原子性的要求

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

原子性

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

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

...

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

所以要确保你必须检查底层文件系统.但基于这些要求,答案是:

  1. 以上所列
  2. 没有
  3. imho重命名文件是这项工作的不错选择