Импорт внешних библиотек в сценарии Hadoop MapReduce - PullRequest
2 голосов
/ 13 февраля 2011

Я запускаю скрипт Python MapReduce поверх реализации Amazons EMR Hadoop. В результате из основных сценариев я получаю сходство предметов. На этапе послепродажного обслуживания я хочу разделить этот вывод на отдельную корзину S3 для каждого элемента, поэтому каждый элемент содержит список элементов, похожих на него. Чтобы достичь этого, я хочу использовать библиотеку Amazons boto python в функции сокращения шага послеоперационного ухода.

  • Как импортировать внешние (python) библиотеки в hadoop, чтобы их можно было использовать в шаге сокращения, написанном на python?
  • Возможно ли получить доступ к S3 таким образом в среде Hadoop?

Заранее спасибо, Томас

1 Ответ

4 голосов
/ 16 февраля 2011

При запуске процесса 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 для включения дополнительных банок; У меня есть немного информации о здесь - Если у меня есть конструктор, который требует путь к файлу, как я могу "подделать" это, если он упакован в банку?

...