wiki:cs/Disco

Version 1 (modified by xkocinc, 10 years ago) (diff)

--

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), 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 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.