Подтвердить что ты не робот

Как включить пакет python с потоковой работой Hadoop?

Я пытаюсь включить пакет python (NLTK) с потоковым заданием Hadoop, но я не уверен, как это сделать без включения каждого файла вручную через аргумент CLI, "файл".

Изменить: одним из решений будет установка этого пакета на всех подчиненных устройствах, но в настоящее время у меня нет этой опции.

4b9b3361

Ответ 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/

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