Он будет вызываться и оцениваться каждый раз. Компилятор не может определить, является ли метод (или геттер) детерминированным и чистым (без побочных эффектов).
Обратите внимание, что фактическая оценка свойства может быть встроена компилятором JIT, что делает его эффективным как быстро как простое поле.
Хорошая практика - сделать оценку свойств недорогой. Если вы выполняете тяжелые вычисления в getter, подумайте о том, чтобы кешировать результат вручную или изменить его на метод.
По-видимому, причина в том, что хранилище Azure не может сохранить исходную метку времени скопированного файла. Я искал обходной путь, который рекомендовал изменить исходный код yarn-common
, чтобы отключить блок кода проверки меток времени при копировании файла, чтобы избежать исключений, чтобы работа MR продолжалась непрерывно.
Вот исходный код в последней версии yarn-common
, который проверяет метку времени для скопированного файла и выдает исключение.
/** #L255
* Localize files.
* @param destination destination directory
* @throws IOException cannot read or write file
* @throws YarnException subcommand returned an error
*/
private void verifyAndCopy(Path destination)
throws IOException, YarnException {
final Path sCopy;
try {
sCopy = resource.getResource().toPath();
} catch (URISyntaxException e) {
throw new IOException("Invalid resource", e);
}
FileSystem sourceFs = sCopy.getFileSystem(conf);
FileStatus sStat = sourceFs.getFileStatus(sCopy);
if (sStat.getModificationTime() != resource.getTimestamp()) {
throw new IOException("Resource " + sCopy +
" changed on src filesystem (expected " + resource.getTimestamp() +
", was " + sStat.getModificationTime());
}
if (resource.getVisibility() == LocalResourceVisibility.PUBLIC) {
if (!isPublic(sourceFs, sCopy, sStat, statCache)) {
throw new IOException("Resource " + sCopy +
" is not publicly accessible and as such cannot be part of the" +
" public cache.");
}
}
downloadAndUnpack(sCopy, destination);
}