При запуске процесса hadoop вы можете указать внешние файлы, которые должны быть доступны. Это делается с помощью аргумента -files
.
$HADOOP_HOME/bin/hadoop jar /usr/lib/COMPANY/analytics/libjars/MyJar.jar -files hdfs://PDHadoop1.corp.COMPANY.com:54310/data/geoip/GeoIPCity.dat
Я не знаю, должны ли файлы быть на HDFS, но если это работа, которая будет часто выполняться, было бы неплохо поместить их туда.
Из кода вы можете сделать что-то похожее на
if (DistributedCache.getLocalCacheFiles(context.getConfiguration()) != null) {
List<Path> localFiles = Utility.arrayToList(DistributedCache.getLocalCacheFiles(context.getConfiguration()));
for (Path localFile : localFiles) {
if ((localFile.getName() != null) && (localFile.getName().equalsIgnoreCase("GeoIPCity.dat"))) {
Path path = new File(localFile.toUri().getPath());
}
}
}
Это все, кроме копирования и вставки непосредственно из рабочего кода в несколько наших картографов.
Я не знаю насчет второй части вашего вопроса. Надеюсь, ответ на первую часть поможет вам начать. :)
В дополнение к -files
есть -libjars
для включения дополнительных банок; У меня есть немного информации о здесь - Если у меня есть конструктор, который требует путь к файлу, как я могу "подделать" это, если он упакован в банку?