Я анализирую большое количество файлов в задании Hadoop MapReduce с входными файлами в формате .txt. И мой маппер, и мой редуктор написаны на Python.
Однако моему модулю mapper требуется доступ к содержимому внешнего csv-файла, который в основном представляет собой просто большую таблицу для поиска эталонных значений для преобразования, которое выполняет mapper.
До сих пор я только что маппером загружал файл в память из локального каталога, чтобы сделать его доступным как переменная Python. Поскольку файл довольно большой (несколько тысяч строк и столбцов), загрузка занимает относительно много времени (около 10 секунд, слишком много для моих целей). Проблема в том, что Hadoop, кажется, повторно выполняет скрипт mapper для каждого нового входного файла или разбивает большие входные файлы на более мелкие, что приводит к ненужной загрузке моего csv-файла в память снова и снова каждый раз, когда новый ввод- файл обработан.
Есть ли способ заставить Hadoop загрузить файл только один раз и каким-то образом сделать его доступным для всех? После поиска в Google таких имен, как Hive, Pig, sqlite, но я никогда не видел примеров, чтобы проверить, действительно ли они полезны для этой цели.
По сути, мне нужно было бы быстро получить доступ к какой-либо базе данных или словарю при выполнении задания Hadoop. Формат моей справочной таблицы не обязательно должен быть CSV, я достаточно гибок в преобразовании этих данных в разные форматы.