| 1 | = Disco = #Disco-1 |
| 2 | Open source implementace systému MapReduce vyvinutá v [http://research.nokia.com/ Nokia Research Center]. |
| 3 | |
| 4 | == Požadavky == #Po.2BAX4-adavky |
| 5 | * přístup na stroj alba |
| 6 | * Python 2.7.3 |
| 7 | |
| 8 | == Konfigurace clusteru == #Konfigurace_clusteru |
| 9 | Master:: alba |
| 10 | Slaves:: aura asteriaXX nymfeXX |
| 11 | |
| 12 | 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. |
| 13 | |
| 14 | == Příklad použití - četnosti slov v textu == |
| 15 | * Uložte si následující zdroják do `$YOUR_DIR/count_words.py` |
| 16 | |
| 17 | {{{ |
| 18 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_1 1] #!/usr/bin/python |
| 19 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_2 2] import sys |
| 20 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_3 3] from disco.core import Disco, result_iterator |
| 21 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_4 4] from disco.func import sum_combiner |
| 22 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_5 5] master = "disco://neptun02" |
| 23 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_6 6] def fun_map(line, params): |
| 24 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_7 7] for word in line.split(): |
| 25 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_8 8] yield word, 1 |
| 26 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_9 9] def fun_reduce(iter, out, params): |
| 27 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_10 10] stats = {} |
| 28 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_11 11] for word, count in iter: |
| 29 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_12 12] stats[word] = stats.get(word, 0) + int(count) |
| 30 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_13 13] for word, total in stats.iteritems(): |
| 31 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_14 14] out.add(word, total) |
| 32 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_15 15] results = Disco(master).new_job(name='nlplab-test:count_words', |
| 33 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_16 16] input=sys.argv[1:], |
| 34 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_17 17] map=fun_map, |
| 35 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_18 18] reduce=fun_reduce).wait() |
| 36 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_19 19] for word, total in result_iterator(results): |
| 37 | [https://nlp.fi.muni.cz/cs/Disco#CA-00e712e83cb8133634ce8d6aa0a6fd0d6b049553_20 20] print word, total |
| 38 | |
| 39 | }}} |
| 40 | * Podívejte se na [http://neptun02:8989/index.html status]. Pokud svítí některý stroj červeně, zkuste: |
| 41 | |
| 42 | {{{ |
| 43 | ssh nymfeXX mkdir -p /tmp/disco_root/ddfs |
| 44 | }}} |
| 45 | |
| 46 | Chvilku počkejte, a pokud nepomohlo, odstraňte ho v [http://alba:8989/config.html nastavení] kliknutím na `remove` a `save table`. |
| 47 | |
| 48 | * Na stroji `neptun02`: |
| 49 | |
| 50 | {{{ |
| 51 | export PATH="$PATH:/home/xhancar/dp/disco/bin" |
| 52 | export PYTHONPATH="$PYTHONPATH:/home/xhancar/dp/disco/lib" |
| 53 | ddfs push data:test /home/xhancar/dp/bigdata/x* |
| 54 | }}} |
| 55 | * Potom můžete na všech strojích v labu, kde je Python 2.6 (např. na `neptunXX`), spustit `count_words.py`: |
| 56 | |
| 57 | {{{ |
| 58 | export PYTHONPATH="$PYTHONPATH:/home/xhancar/dp/disco/lib" |
| 59 | chmod u+x $YOUR_DIR/count_words.py |
| 60 | $YOUR_DIR/count_words.py data:test > results |
| 61 | }}} |
| 62 | == Debugování == |
| 63 | Základ je parameter `show` v `job.wait(show=True)` |
| 64 | |
| 65 | 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]. |
| 66 | |
| 67 | Pokud je problém jen na určitém stroji: Spustit tam master (`disco start`), nechat jako slave pouze `localhost` a spustit úlohu tam. |