как сравнить локальный файл и файл hdfs для согласованности - PullRequest
1 голос
/ 31 октября 2011
    public String getDirs() throws IOException{
        fs=FileSystem.get(conf);
        fs.copyFromLocalFile(new Path("/private/tmp/as"), new Path("/test"));
        LocalFileSystem lfs=LocalFileSystem.getLocal(conf);

//      System.out.println(new LocalFileSystem().ge (conf.getLocalPath("/private/tmp/as")));
        System.out.println("Local Path : "+lfs.getFileChecksum(new Path("/private/tmp/as")));   
        System.out.println("HDFS PATH : "+ fs.getFileChecksum(new Path("/test/as")));
        return "done";
    }

Выход

Локальный путь: ноль ПУТЬ HDFS: MD5-of-0MD5-of-512CRC32: a575c5e99b2e08605dc7c6723889519c

Не уверен, почему контрольная сумма равна нулю для локального файла

1 Ответ

0 голосов
/ 31 декабря 2012

Hadoop полагается на файловую систему, чтобы иметь контрольную сумму, готовую к сопоставлению. Он не генерирует один на лету.

По умолчанию LocalFileSystem (или конкретная реализация, используемая для путей file://) не создает / сохраняет контрольные суммы для всех файлов, создаваемых через него. Вы можете переключить это поведение с помощью API-вызова FileSystem # setWriteChecksum , и последующее получение контрольной суммы после записи будет работать.

...