Как включить пакет python с потоковой работой Hadoop?
Я пытаюсь включить пакет python (NLTK) с потоковым заданием Hadoop, но я не уверен, как это сделать без включения каждого файла вручную через аргумент CLI, "файл".
Изменить: одним из решений будет установка этого пакета на всех подчиненных устройствах, но в настоящее время у меня нет этой опции.
Ответы
Ответ 1
Я бы застегнул пакет в .tar.gz
или .zip
и передал весь архив или архив в опции -file
в вашу команду hadoop. Я делал это в прошлом с Perl, но не с Python.
Тем не менее, я думаю, что это все равно будет работать для вас, если вы используете Python zipimport
в http://docs.python.org/library/zipimport.html, что позволяет вам импортировать модули непосредственно из почтового индекса.
Ответ 2
Только что наткнулся на эту жемчужину решения: http://blog.cloudera.com/blog/2008/11/sending-files-to-remote-task-nodes-with-hadoop-mapreduce/
сначала создайте zip с желаемыми библиотеками
zip -r nltkandyaml.zip nltk yaml
mv ntlkandyaml.zip /path/to/where/your/mapper/will/be/nltkandyaml.mod
next, включить через аргумент "-file" потока Hadoop:
hadoop -file nltkandyaml.zip
наконец, загрузите библиотеки с помощью python:
import zipimport
importer = zipimport.zipimporter('nltkandyaml.mod')
yaml = importer.load_module('yaml')
nltk = importer.load_module('nltk')
Кроме того, на этой странице показано, как включить корпус: http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/
загрузите и распакуйте wordnet corpus
cd wordnet
zip -r ../wordnet-flat.zip *
в python:
wn = WordNetCorpusReader(nltk.data.find('lib/wordnet-flat.zip'))
Ответ 3
Вы можете использовать zip lib следующим образом:
import sys
sys.path.insert(0, 'nltkandyaml.mod')
import ntlk
import yaml
Ответ 4
Пример загрузки внешнего пакета python nltk
см. ответ
Запуск extrnal python lib like (NLTK) с потоковой передачей
Я выполнил следующий подход и успешно выполнил пакет nltk с успешной потоковой загрузкой.
Предположим, у вас уже есть ваш пакет или (nltk в моем случае) в вашей системе
первый:
zip -r nltk.zip nltk
mv ntlk.zip /place/it/anywhere/you/like/nltk.mod
Почему все будет работать?
Ans: - Поскольку мы предоставим путь к этому zip файлу .mod через командную строку, нам не нужно беспокоиться об этом.
второй:
изменения в вашем картографе или файле .py
#Hadoop cannot unzip files by default thus you need to unzip it
import zipimport
importer = zipimport.zipimporter('nltk.mod')
nltk = importer.load_module('nltk')
#now import what ever you like from nltk
from nltk import tree
from nltk import load_parser
from nltk.corpus import stopwords
nltk.data.path += ["."]
третий:
аргумент командной строки для запуска уменьшения карты
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
-file /your/path/to/mapper/mapper.py \
-mapper '/usr/local/bin/python3.4 mapper.py' \
-file /your/path/to/reducer/reducer.py \
-reducer '/usr/local/bin/python3.4 reducer.py' \
-file /your/path/to/nltkzippedmodfile/nltk.mod \
-input /your/path/to/HDFS/input/check.txt -output /your/path/to/HDFS/output/
Таким образом, выше шаг решил мою проблему, и я думаю, что он должен решать и другие.
приветствия,