hadoop检查路径是否有效,如果不是则创建

时间:2013-10-01 14:02:22

标签: hadoop path mapreduce hdfs

我有一个简单的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)));            
}

THX

1 个答案:

答案 0 :(得分:1)

如果文件夹创建失败,则

mkdirs返回false,如果成功则返回true。所以只需使用它,然后知道它在返回false时没有创建它。

检查它是否存在并不是真正有用,因为这是对NameNode的额外操作。此外,您必须担心多个作业的争用。请考虑以下情况:

  1. Mapper 1检查dir abc是否存在 - 它不是
  2. Mapper 2检查dir abc是否存在 - 它不是
  3. Mapper 1尝试创建目录abc - 它确实
  4. Mapper 2尝试创建目录abc - 它不是
  5. 长话短说,只需使用mkdirs因为它是原子的并且没有上述问题,并且还需要较少的NameNode工作。