Disco
Open source implementace systému MapReduce? vyvinutá v Nokia Research Center.
Požadavky
- přístup na stroj alba
- Python 2.7.3
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 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 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
), spustitcount_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 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.
Last modified 9 years ago
Last modified on Mar 13, 2014, 4:23:56 PM