/parallel-log-analizer

Program do równoległej analizy logów na 7 laboratoria z Programowania Równoległego

Primary LanguageCMIT LicenseMIT

Równoległa analiza logów

Program do analizy logów serwera www napisany z wykorzystaniem standardu MPI.

Celem zadania jest implementacja wzorca MapReduce z zastosowaniem równoległego mapowania realizowanego przez wiele procesów.

Działanie programu

Program jest podzielony na 3 główne części.

Wczytanie danych

Proces główny czyta plik z danymi linia po linii. Każdy wiersz jest parsowany. Wybrane przez użytkownika pole jest zapisywane do wektora.
Na tym etapie następuje generalizacja danych polegająca na przejściu z wybranego pola logów do ogólnego typu realizowanego przez ciąg znaków. Dzięki temu bardzo łatwo można zmodyfikować dostępne pola lub strukturę pliku bez ingerencji w pozostały kod.

Mapowanie

Po wczytaniu dane są możliwie równo dzielone i rozsyłane pomiędzy procesami. W tym celu wykorzystuję utworzenie typu MPI MPI_Type_contiguous() oraz MPI_Scatterv().

Każdy proces tworzy mapę zliczającą liczę wystąpień danego ciągu znaków (czyli konkretnej wartości w logach).

Redukcja

Mapy utworzone przez procesy w poprzednim kroku są spłaszczane do tablic i przesyłane do procesu głównego.
W tym celu wykorzystuję MPI_Type_create_struct() oraz MPI_Gatherv().

Następnie proces główny łączy mapy stworzone przez poszczególne procesy w jedną wspólną mapę. Wyniki są potem sortowane po liczbie wystąpień i wypisywane na ekran.

Uruchomienie programu

Program będący zadania znajduje się w katalogu solution.

Program korzysta z biblioteki MPI. Trzeba ją zainstalować przed kompilacją i uruchomieniem.

Kompilacja

Do kompilacji programu można wykorzystać narzędzie makefile.

Przykład kompilacji

make

Alternatywnie można użyć celu debug by włączyć dodatkowe informacje o działaniu programu.

make debug

Uruchomienie

Program przyjmuje dwa argumenty - wybranie pole oraz nazwę pliku z logami.

Program expects 2 arguments: <field_selection> <log_file_name>
Possible fields:
addr - ip addres
time - time with minutes precision
metod - HTTP method
url - request url
protocol - protocol version
stat - request status
browser - browser fingerprint

Przykładowe uruchomienie:

➜ mpirun -n 4 ./log-analizer stat fragment.log
403 -> 2080
200 -> 356
304 -> 116
302 -> 6
206 -> 4
404 -> 1
301 -> 1