| 1 | = Hadoop = #Hadoop |
| 2 | Tento manuál popisuje jednoduché použití systému Hadoop v CZPJ. Správa tohoto systému je popsána [[#service|níže #service|níže]]. |
| 3 | |
| 4 | == Manuál == #manual |
| 5 | === Začátek === #top |
| 6 | {{{ |
| 7 | export PATH="$PATH:/packages/run.64/hadoop-0.20.2-cdh3u1/bin" |
| 8 | export HADOOP_HOME="/packages/run.64/hadoop-0.20.2-cdh3u1" |
| 9 | export HADOOP_CONF_DIR="/home/hadoopnlp/conf" |
| 10 | }}} |
| 11 | Je potřeba být ve skupině `hadoopnlp` (viz příkaz `groups`). Jsou tam všichni členové CZPJ. |
| 12 | |
| 13 | ==== Jak udržet nymfy přes noc v chodu ==== #nightrun |
| 14 | musí na nich být někdo aktivně přihlášený, což zajistí příkaz |
| 15 | |
| 16 | [http://nlp.fi.muni.cz/cs/Hadoop# Přepnout zobrazení čísel řádků] |
| 17 | |
| 18 | {{{ |
| 19 | cssh nymfe{01..86} |
| 20 | }}} |
| 21 | (nechat spuštěné cssh kolem 22:00 h zabrání automatickému vypnutí) |
| 22 | |
| 23 | To samé platí v pátek kolem 20:00h, ale pokud chceme nechat úlohu běžet přes víkend, je potřeba to napsat na [mailto:unix@fi.muni.cz] a cssh musí běžet i v sobotu a v neděli kolem 22:00. |
| 24 | |
| 25 | V pracovní dny by měly výpočty skončit do 7:00, nejpozději do 7:30. |
| 26 | |
| 27 | === Webová rozhraní === #web |
| 28 | * [http://alba:50070/ http://alba:50070] - web démonu !NameNode (spravujícího HDFS) |
| 29 | |
| 30 | * [http://alba:50030/ http://alba:50030] - web démonu !JobTracker (spravujícího úlohy) |
| 31 | |
| 32 | === Nahrání dat do HDFS === #loadhdfs |
| 33 | {{{ |
| 34 | hadoop dfs -put /corpora/vert/bnc/bnc.vert my_bnc.vert |
| 35 | }}} |
| 36 | Vytvoří v HDFS adresář `/user/<tvuj_login>` a uloží soubor `bnc.vert` jako `/user/<tvuj_login>/my_bnc.vert`. Viz příkaz: |
| 37 | |
| 38 | {{{ |
| 39 | hadoop dfs -ls my_bnc.vert |
| 40 | }}} |
| 41 | === Spouštění úloh typu roura === #pipe |
| 42 | Pomocí nadstavby [http://hadoop.apache.org/docs/r1.2.1/streaming.html Hadoop Streaming] a frontendu `/corpora/programy/hadpipe.sh`. |
| 43 | |
| 44 | [http://cs.wikipedia.org/wiki/Roura_%28Unix%29 Roura] musí být jeden soubor. Ten je zkopírován na všechny uzly clusteru a spuštěn. Pokud volá další programy, musí tyto fungovat na všech uzlech clusteru. |
| 45 | |
| 46 | Aby se zpracoval dokument jako celek, je nutné spustit `hadpipe.sh` s parametrem `-d '<doc'`, nebo `-t '</doc>'`. Při použití `-t '</doc>'` je třeba dát na začátek roury `sed 's/<doc /<\/doc>\n<doc /'`. |
| 47 | |
| 48 | ==== Desamb ==== #desamb |
| 49 | {{{ |
| 50 | # Nakopirujeme nejaka data do HDFS |
| 51 | cut -f1 /corpora/vert/czes/czes10M.vert | hadoop dfs -put - czes10M.vert |
| 52 | # a spustime desamb |
| 53 | /corpora/programy/hadpipe.sh -d '<doc' -s 4 /home/hadoopnlp/stat/desamb.utf8.sh czes10M.vert czes10M.tagged |
| 54 | }}} |
| 55 | Desamb spouštějte s parametry `-d '<doc' -s 4` (vyzkoušeno na !CzTenTenu2). Znamenají, že po 4 KiB bude na nejbližším '<doc' začínat nový split. Na některých datech totiž výpočet nedoběhne do konce, takže je dobré dávat malé vstupy, aby (po nevyhnutelném násilném ukončení výpočtu) byly co nejmenší ztráty. |
| 56 | |
| 57 | ==== Set ==== #Set |
| 58 | {{{ |
| 59 | /corpora/programy/hadpipe.sh -d '<doc' /home/hadoopnlp/bin/setmarx.sh czes10M.tagged czes10M.set |
| 60 | }}} |
| 61 | ==== Počet pozic v korpusu ==== #sumcorpus |
| 62 | {{{ |
| 63 | echo -e '#!/bin/sh\ngrep -cv "^<"' > /tmp/token_count.sh |
| 64 | echo -e '#!/bin/sh\npaste -sd+ | bc' > /tmp/sum.sh |
| 65 | /corpora/programy/hadpipe.sh -r /tmp/sum.sh /tmp/token_count.sh czes10M.vert tcount |
| 66 | hadoop dfs -cat tcount/part-* |
| 67 | }}} |
| 68 | ==== Četnosti pozic v korpusu ==== #freqcorpus |
| 69 | {{{ |
| 70 | echo -e '#!/bin/sh\ngrep -v "^<"' > /tmp/tokens.sh |
| 71 | echo -e '#!/bin/sh\nuniq -c' > /tmp/uniqc.sh |
| 72 | /corpora/programy/hadpipe.sh -c 0.95 -r /tmp/uniqc.sh /tmp/tokens.sh czes10M.vert counts |
| 73 | hadoop dfs -cat counts/part-* |
| 74 | }}} |
| 75 | Parametr `-c 0.95` nastavuje počet reducerů 0.95 * <počet jader>. |
| 76 | |
| 77 | Hadoop Streaming odděluje mezi Map a Reduce klíč a hodnotu na znaku <TAB>. Např. při sčítání bigramů rozdělených znakem <TAB> je potřeba zadat `hadpipe.sh` s parametrem `-k 2`. |
| 78 | |
| 79 | === Výstupní data === #output |
| 80 | Jsou v HDFS v souborech `<vystupni_adresar>/part-<cislo>`. Pro jejich kopírování slouží: |
| 81 | |
| 82 | {{{ |
| 83 | hadoop dfs -getmerge czes10M.tagged /tmp/czes10M.tagged |
| 84 | }}} |
| 85 | nebo |
| 86 | |
| 87 | {{{ |
| 88 | hadoop dfs -cat my_czes.tagged/part-* | less |
| 89 | }}} |
| 90 | === Zabití úlohy === #kill |
| 91 | {{{ |
| 92 | hadoop job -kill <job-id> |
| 93 | #Napriklad |
| 94 | hadoop dfs -kill job_201212191726_0001 |
| 95 | }}} |
| 96 | `<job-id>` najdete na [http://alba:50030/ webu JobTrackeru]. |
| 97 | |
| 98 | === Řešení problémů === #problems |
| 99 | Logy démonů jsou v `/tmp/hadoop-logs` na všech strojích, logy úloh v `/tmp/hadoop-logs/userlogs`. |
| 100 | |
| 101 | === Přístupová práva === #rights |
| 102 | Adresář `/user/<tvuj_login>` má přístupová práva `drwxrwxr-x`. Pokud nechceš, aby ostatní mohli přepisovat Tvá data, zadej: |
| 103 | |
| 104 | {{{ |
| 105 | [http://nlp.fi.muni.cz/cs/Hadoop#CA-4b494de2cc18ef7cf4c8be33147ceec930af60d0_1 1] hadoop dfs -chmod g-w /user/<tvuj_login> |
| 106 | }}} |
| 107 | Právo čtení pro všechny se hodí při prohlížení [http://alba:50070/nn_browsedfscontent.jsp HDFS na webu]. |
| 108 | |
| 109 | == Správa systému == #service |
| 110 | === Konfigurace === #konfig |
| 111 | Adresář s konfiguračními soubory: `/home/hadoopnlp/conf`. |
| 112 | |
| 113 | Seznam podřízených uzlů: `/home/hadoopnlp/conf/slaves`. |
| 114 | |
| 115 | ==== Restart clusteru ==== #restart |
| 116 | jako uživatel `hadoopnlp`. |
| 117 | |
| 118 | {{{ |
| 119 | [http://nlp.fi.muni.cz/cs/HadoopAdmin#CA-8fdd76c399cc467ea734def3e4e0cc49086f82f3_1 1] stop-all.sh && start-all.sh |
| 120 | }}} |
| 121 | |
| 122 | ==== Restart clusteru s vymazáním dat a logů ==== #restart2 |
| 123 | Jako uživatel `hadoopnlp`. |
| 124 | |
| 125 | {{{ |
| 126 | [http://nlp.fi.muni.cz/cs/HadoopAdmin#CA-b1be983b52128b49db09a69809ac2dad488ca631_1 1] reset_hadoop.sh |
| 127 | }}} |
| 128 | |
| 129 | ==== Restart clusteru s mazáním a novou konfigurací ==== #restart3 |
| 130 | |
| 131 | {{{ |
| 132 | [http://nlp.fi.muni.cz/cs/HadoopAdmin#CA-b05e0bda1a14a99cd401b350cd50abe1e774f8f9_1 1] # 14 uzlu z B130, kde neni nkdo prihlaseny |
| 133 | [http://nlp.fi.muni.cz/cs/HadoopAdmin#CA-b05e0bda1a14a99cd401b350cd50abe1e774f8f9_2 2] stop-all.sh && available_nymfes.sh -bf | head -14 > ~/conf/slaves && echo y | reset_hadoop.sh |
| 134 | }}} |
| 135 | |