В настоящее время я пытаюсь написать работу по сокращению карты, где входные данные отсутствуют в HDFS и не могут быть загружены в HDFS в основном потому, что программы, использующие данные, не могут использовать данные из HDFS, и есть слишком чтобы скопировать его в HDFS, по крайней мере, 1 ТБ на узел.Node-Local Map уменьшить вакансию
Итак, у меня есть 4 каталога на каждом из 4 узлов в моем кластере. В идеале я хотел бы, чтобы мои картографы просто получали пути для этих 4 локальных каталогов и читали их, используя что-то вроде файла: /// var/mydata/..., а затем 1 картограф может работать с каждым каталогом. т.е. всего 16 карт.
Однако, чтобы быть в состоянии сделать это, мне нужно убедиться, что я получаю ровно 4 картографа на узел и точно 4 устройства, которым были назначены пути, локальные для этой машины. Эти пути являются статическими и поэтому могут быть жестко закодированы в файле fileinputformat и recordreader, но как я могу гарантировать, что данные расщепления заканчиваются на данном узле с известным именем хоста. Если бы это было в HDFS, я мог бы использовать переменную в параметре FileInputFormat isSplittable для false, и hadoop позаботится об этом, но поскольку все данные являются локальными, это вызывает проблемы.
В общем, все, что я хочу, - это возможность обходить локальные структуры каталогов на каждом узле моего кластера ровно один раз, обрабатывать коллекцию SSTables в этих каталогах и испускать строки (на картографе) и уменьшать результаты (в уменьшить шаг) в HDFS для дальнейшей массовой обработки.
Я заметил, что inputSplits предоставляют функцию getLocations, но я считаю, что это не гарантирует локальность выполнения, только оптимизирует ее и четко, если я пытаюсь использовать файл: /// some_path в каждом картографе Мне нужно обеспечить точную локальность в противном случае я могу закончить чтение некоторых каталогов многократно, а другое - совсем не так.
Любая помощь была бы принята с благодарностью.
спасибо за совет, 1 не хорошо, это должно быть обновляться, так что данные будут полезны только в течение дня или около того, и как файлы Читаем являются частью активного базы данных, данные будут намного более прочными. 2 интересно, NLineInputFormat звучит как часть ответа, но, как вы указываете, не гарантирует локальность. 3.звучит правдоподобно, но что вы имеете в виду, удалив остальные 3 узла, я не могу принимать части кластера в автономном режиме, если это то, что вы имеете в виду, кластер должен также реагировать на другие задания, это должно быть фоновая задача с учетом вероятного времени выполнения. – feldoh
Привет, Фельдо, ты меня понял. Включение кластера в автономный режим. Теперь я понимаю, что это невозможно, так как это производственный кластер. – Rags
При использовании вышеуказанного метода способ убедиться, что он выполняется локально, - это проверить местоположение файла на карте, если он удален, выдает исключение, чтобы выполнить задачу. трекер задания будет пытаться, пока задача не будет успешной, что означает, что он находит файл локально. Но это грубый метод. Чтобы продолжить работу, вам может потребоваться увеличить максимальное количество попыток для задач карты до большого числа. – Rags