180 likes | 384 Views
Spracovanie logov on-line hry Divoké kmene. Michal Lulčo FIIT, STU Bratislava 6.12.2010 Vedúci projektu: Mgr. Martin Šeleng, PhD. Cieľ. Vytvorenie programu na spracovanie logov hry divoké kmene Získanie štatistických informácií o hráčoch (vek, pohlavie, bydlisko) Určenie typov hráčov
E N D
Spracovanie logov on-line hry Divoké kmene Michal Lulčo FIIT, STU Bratislava 6.12.2010 Vedúci projektu: Mgr. Martin Šeleng, PhD.
Cieľ • Vytvorenie programu na spracovanie logov hry divoké kmene • Získanie štatistických informácií o hráčoch (vek, pohlavie, bydlisko) • Určenie typov hráčov • Určenie aktivity počas dňa a počas týždňa
Existujúce riešenia • Doteraz žiadne • Jediné informácie dostupné v logoch • TW Stats – interná aplikácia hry, ktorá však neposkytuje informácie, ktoré boli požadované, len vypisuje dáta z logov v inom formáte
Vstupné dáta • Textové súbory, v ktorých sú jednotlivé záznamy v riadkoch a jednotlivé stĺpce sú oddelené čiarkou • Stĺpce, ktoré majú textový charakter sú este URL Enkódované
Riešenie • Pomocou jazyka PigLatin • Vstavané funkcie (LOAD, GROUP, JOIN...) • Možnosť definovania vlastných funkcií (UDF) v jave
Ukážka UDF v jave package sk.fiit.lulco.vi; import org.apache.pig.EvalFunc; import org.apache.pig.backend.executionengine.ExecException; import org.apache.pig.data.Tuple; publicclass GetGender extends EvalFunc <String> { public String exec(Tuple input) throws ExecException { String str = (String)input.get(0); if (str != null) { if (str.equals("m")) { return "man"; } elseif (str.equals("f")) { return "woman"; } } return "undefined"; } }
Ukážka scriptu v jazyku Pig -- genders -- zaregistruje jar súbor s UDF REGISTER kmene.jar; -- definuje skratku pre UDF GetGender DEFINE GG sk.fiit.lulco.vi.GetGender(); -- načíta záznamy zo súboru a stĺpcom dá im názvy profiles = LOAD 'profile.txt' USING PigStorage(',') AS (id, date, gender, city); -- zoskupí riadky podľa stĺpca gender a dá ich do jedného riadku genders = GROUP profiles BY gender; -- pre každý riadok vytvorí slovný popis pohlavia (z UDF GG), a spočíta koľko pôvodných riadkov obsahuje genderList = FOREACH genders GENERATE GG(group), COUNT(profiles) AS count; -- zoradí zoznam podľa stĺpca count zostupne genderList = ORDER genderList BY count DESC; -- uloží výstup do priečinka output/profiles/genders, názov súboru je part-r-00000 STORE genderList INTO 'output/profiles/genders';
Dosiahnuté výsledky • Týždňový rozvrh hráča • Denný rozvrh hráča • Typ hráča • Pohlavie a vekové kategórie hráčov • Najčastejšie dobyté dediny
Problémy pri riešení • Spojazdnenie HDFS • Vyriešené použitím lokálneho prístupu • Spočiatku vytváranie vyhodnocovacích UDF • Vyriešené pomocou overridnutia metód, ktoré určujú typ vstupu • Neskôr vytváranie UDF na uloženie dát • Vyriešené pomocou javovských funkcií pre prácu so súbormi
Spustenie programu • Po rozbalení zip archívu sa program spúšťa príkazom pig-0.7.0/bin/pig –x local script.pig • Možnosť nahradenia vstupných dát novšou verziou, alebo verziou z iného sveta či servera => všobecná použiteľnosť pre hru divoké kmene z rôznych krajín
Záver • Podarilo sa mi splniť cieľ, ktorý som si dal, aj keď niektoré výstupy majú v súčasnosti iný formát (napríklad denný a týždenný rozvrh hráčov mal byť v jednom súbore)