В python MRJob, как настроить параметр для временного выходного каталога

Я использую MRJob для запуска очень простого подсчета слов в качестве стандартного задания Hadoop:

python word_count.py -r hadoop hdfs:///path-to-my-data

Эта ошибка печати указывает на то, что он не может создать временный каталог для временного вывода:

STDERR: mkdir: Incomplete HDFS URI, no host: hdfs:///user/path-to-tmp-dir
...
...
subprocess.CalledProcessError: Command '['/opt/mapr/hadoop/hadoop-0.20.2/bin/hadoop', 'fs', '-mkdir', 'hdfs:///user/

Предположим, я не могу создать каталог, требуемый по умолчанию для MRJob. Можно ли передать опцию MRJob через командную строку? Единственный вариант, который я нашел, — это base_tmp_dir. В описании упоминается «Путь для размещения локальных временных каталогов». где «локальный» - это не совсем то, что я ищу, поскольку временный выходной каталог должен находиться в hdfs. Тем не менее, я хотел попробовать (:

python word_count.py --base-tmp-dir=./tmp/ data.txt 

or

python word_count.py -r hadoop --base-tmp-dir=hdfs:///some-path hdfs:///path-to-data

но не удалось, так как MRJob жалуется, что такой опции нет:

word_count.py: error: no such option: --base-tmp-dir

word_count.py – это стандартный вариант, который можно найти здесь. Возможно, мне не хватает некоторых важных знаний о MRJobj, или мне придется вернуться к потоковой передаче Hadoop.


person Causality    schedule 09.09.2014    source источник


Ответы (1)


mrjob вызывает двоичный файл hadoop при взаимодействии с HDFS. Команде hadoop необходимо знать, где в сети находится NameNode, поэтому URI, такие как hdfs:///some-path, не требуют полного хоста (что-то вроде hdfs://your-namenode:9000/some-path). Команда определяет, где находится NameNode, читая XML-файлы конфигурации.

В Интернете есть много противоречивых отчетов о какую переменную среды установить, но в моей среде с последней версией mrjob и Apache Hadoop 2.4.1 мне пришлось установить переменные окружения HADOOP_PREFIX. Вы можете установить это с помощью команды:

export HADOOP_PREFIX=/path/to/your/hadoop

Как только это установлено, вы узнаете, что это установлено правильно, если вы наберете:

ls $HADOOP_PREFIX/etc/hadoop

и это показывает ваши файлы конфигурации XML.

Теперь запустите вашу команду. Он должен работать.

person Ikai Lan    schedule 13.09.2014