我正在尝试编写代码以将文件导入HDFS以用作hive外部表。我发现使用类似的东西:
foo | ssh hostname“hdfs dfs -put - / destination / $ FILENAME”
可能会导致创建临时文件的错误类型,然后在完成时重命名。这可能导致目录列表和查询执行之间的配置单元的竞争条件。
一种解决方法是将文件复制到临时目录并将“hdfs dfs mv”复制到位。
具体和一般/学术问题是:
答案 0 :(得分:11)
在Hadoop FS introduction中,您可以找到原子性要求
以下是与Hadoop兼容的文件系统的核心期望。一些FileSystems 不满足所有这些期望;因此,某些程序可能无法按预期工作。
<强>原子性强>
有些操作必须是原子的。这是因为它们通常用于在集群中的进程之间实现锁定/独占访问。
- 创建文件。如果overwrite参数为false,则检查和创建必须是原子的。
- 删除文件。
- 重命名文件。
- 重命名目录。
- 使用mkdir()创建单个目录。
醇>...
大多数其他操作都没有原子性的要求或保证。
因此,请确保您必须检查基础文件系统。但基于这些要求的答案是: