Я пытаюсь выяснить, поддерживают ли каталоги символические ссылки, созданные кешем Hadoop.
- Хорошо работает в распределенном режиме
- Не работает в локальном режиме
- Javadoc/документация очень скудна и ничего не говорит об этом
Укороченная версия
Я ожидаю, что DistributedCache.addCacheFile(URI.create("file:/tmp/myfile#foo/bar"), conf)
сделает /tmp/myfile
доступным в текущем рабочем каталоге под именем foo/bar
.
На кластере все нормально, а в локальном режиме не работает. По сути, LocalDistributedCacheManager.setup
пытается создать символическую ссылку, используя ln -s /tmp/myfile $cwd/foo/bar
, но foo
никогда не создается.
Подробные требования
Я хочу добавить один или несколько Avro SortedKeyValueFile в распределенный кэш Hadoop.
SortedKeyValueFile
похожи на Hadoop MapFile
. На самом деле они представляют собой каталог, состоящий из двух файлов: файла индекса и файла данных. Эти два файла должны иметь определенное имя (index
и data
) и должны находиться в одном каталоге.
Если я хочу иметь возможность поместить хотя бы два из этих «файлов» в распределенный кеш, я не могу свести файлы в корневой каталог. Я должен сохранить/определить файловую иерархию.
Установка: Hadoop 2.6.0/CDH 5.4/Crunch. Поскольку я использую Crunch, мне приходится использовать устаревший API DistributedCache
, поскольку Job.addCachefile()
не доступен.
Вопросы, на которые нужно ответить
- Это ошибка в локальном режиме или я злоупотребляю распределенным кешем?
- Как люди помещают такие вещи, как
MapFile
илиSortedKeyValueFile
в кеш Hadoop?