= Disco = #Disco-1 Open source implementace systému MapReduce vyvinutá v [http://research.nokia.com/ Nokia Research Center]. == Požadavky == #Po.2BAX4-adavky * přístup na stroj alba * Python 2.7.3 == Konfigurace clusteru == #Konfigurace_clusteru Master:: alba Slaves:: aura asteriaXX nymfeXX Na stroji aura je spouštěn Python 2.7.3 z modulu `pythn-2.7.3` (chybějící `o` není chyba!!!) - nastaveno v `/home/hadoopnlp/.bashrc` kvůli defaultní verzi 2.6.6. == Příklad použití - četnosti slov v textu == * Uložte si následující zdroják do `$YOUR_DIR/count_words.py` {{{ [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_1 1] #!/usr/bin/python [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_2 2] import sys [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_3 3] from disco.core import Disco, result_iterator [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_4 4] from disco.func import sum_combiner [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_5 5] master = "disco://neptun02" [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_6 6] def fun_map(line, params): [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_7 7] for word in line.split(): [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_8 8] yield word, 1 [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_9 9] def fun_reduce(iter, out, params): [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_10 10] stats = {} [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_11 11] for word, count in iter: [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_12 12] stats[word] = stats.get(word, 0) + int(count) [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_13 13] for word, total in stats.iteritems(): [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_14 14] out.add(word, total) [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_15 15] results = Disco(master).new_job(name='nlplab-test:count_words', [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_16 16] input=sys.argv[1:], [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_17 17] map=fun_map, [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_18 18] reduce=fun_reduce).wait() [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_19 19] for word, total in result_iterator(results): [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_20 20] print word, total }}} * Podívejte se na [http://neptun02:8989/index.html status]. Pokud svítí některý stroj červeně, zkuste: {{{ ssh nymfeXX mkdir -p /tmp/disco_root/ddfs }}} Chvilku počkejte, a pokud nepomohlo, odstraňte ho v [http://alba:8989/config.html nastavení] kliknutím na `remove` a `save table`. * Na stroji `neptun02`: {{{ export PATH="$PATH:/home/xhancar/dp/disco/bin" export PYTHONPATH="$PYTHONPATH:/home/xhancar/dp/disco/lib" ddfs push data:test /home/xhancar/dp/bigdata/x* }}} * Potom můžete na všech strojích v labu, kde je Python 2.6 (např. na `neptunXX`), spustit `count_words.py`: {{{ export PYTHONPATH="$PYTHONPATH:/home/xhancar/dp/disco/lib" chmod u+x $YOUR_DIR/count_words.py $YOUR_DIR/count_words.py data:test > results }}} == Debugování == Základ je parameter `show` v `job.wait(show=True)` Ve vzdáleně běžících funkcích (map, reduce, ...) nepište nic na STDOUT a výstupy na STDERR by měly mít [http://disco.readthedocs.org/en/0.4.4/howto/worker.html#message-format tento formát]. Pokud je problém jen na určitém stroji: Spustit tam master (`disco start`), nechat jako slave pouze `localhost` a spustit úlohu tam.