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

ctzwtxfj  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(342)

我有一个简单的mr作业,需要根据时间戳在hdfs中创建一个目录。我很难找到正确的api(在Hadoop2.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)));            
}

谢谢

qxgroojn

qxgroojn1#

mkdirs 如果文件夹创建失败,则返回false;如果成功,则返回true。所以只要使用它,然后知道当它返回false时并没有创建它。
首先检查它是否存在并没有真正的帮助,因为这是namenode的额外操作。此外,你还必须担心多个工作之间的竞争。考虑以下情况:
Map器1检查dir 存在——不存在 Map器2检查是否 存在——不存在
Map器1尝试创建目录 --是的 Map器2尝试创建目录 --它没有
长话短说,就用 mkdirs 因为它是原子的,不存在上述问题,而且需要namenode做的工作更少。

相关问题