Hadoop 检查路径是否有效,如果无效,则创建



我有一个简单的MR作业,需要根据时间戳在hdfs中创建目录。我很难找到正确的 api(在 hadoop 2.0.3 中查找状态并创建一个目录(如果不存在)。有人可以建议正确的方法吗?这是现有的代码:

FileSystem fileSystem = FileSystem.get(new Configuration());
Calendar c = Calendar.getInstance();
String basepath = "/dev/group/data/json/";
for ( Record record: records){
    c.setTimeInMillis(record.timestamp );
    Path path = new Path(basepath + c.get(Calendar.YEAR) + "/" + c.get(Calendar.MONTH));
    // Check if the path is valid and create hdfs folder if not
    FileStatus[] status = filesystem.???
    context.write(key, new Text(mapper.writeValueAsString(record)));            
}

感谢

如果文件夹创建失败,则mkdirs返回 false,如果成功,则返回 true。因此,只需使用它,然后知道它在返回 false 时没有创建它。

首先检查它是否存在根本没有帮助,因为这是对 NameNode 的额外操作。 此外,还必须担心多个作业之间的争用。请考虑以下情况:

  1. 映射器 1 检查目录abc是否存在 - 它不存在
  2. 映射器 2 检查目录abc是否存在 - 它不存在
  3. 映射器 1 尝试创建目录abc - 它确实
  4. 映射器 2 尝试创建目录abc - 它没有

长话短说,只需使用mkdirs,因为它是原子的并且没有上述问题,并且需要NameNode的工作更少。

相关内容

  • 没有找到相关文章

最新更新