Usługa jest przeznaczona dla użytkowników PLGrid, którzy chcą korzystać Moduł umożliwia korzystanie z najpopularniejszych narzędzi przetwarzania danych typu BigData . Na klastrze Zeus możemy prowadzić obliczenia uruchamianych na zasobach Infrastruktury PLGrid. Obecnie moduł jest dostępna na klastrze Zeus i Prometeusz, gdzie można prowadzić obliczenia wielowęzłowe z wykorzystaniem systemów Spark lub Hadoop wykorzystując wielowęzłową architekturęHadoop. W celu efektywnego używania oprogramowania Spark i Hadoop zalecamy zapoznanie się z Spark Programming Guide.
Aby uzyskać dostęp do usługi należy w pierwszej kolejności posiadać dostęp do UI klastra Zeus. Następnie, zawnioskować o usługę "Spark" w sekcji "Obsluga danych typu BigData" w Portalu PLGrid.
Dostępne w ramach modułu plgrid/apps/spark
Uruchomienie zadania Spark wykorzystującego 4 rdzenie na 1 węźle w trybie klastra Spark (Spark Standalone cluster in client deploy mode):
$
...
srun -N1 --ntasks-per-node=4 --pty /bin/bash
Wykorzystanie zostanie zaliczone na konto grantu osobistego PLGrid. W przypadku potrzeby podania innego grantu należy wykorzystać opcję -A specyfikując identyfikator aktywnego grantu PLGrid:
$ module load testplgrid/apps/spark
$
...
start
...
_spark
...
_cluster
Obliczenia:
$ $SPARK_HOME/bin/spark-submit $SPARK_HOME/examples/src/main/python/wordcount.py /etc/passwd
Zatrzymywanie klastra:
$
...
stop
...
_spark
...
_cluster
...
Podgląd uruchomionego klastra Spark oraz przetwarzanych na nim zadań dostępny jest przez przeglądarkę (na Zeus to aktualnie arora) na porcie 8080 węzła master.
Przykład 1:
rdd = sc.parallelize([1, 2, 3, 4])
rdd.map(lambda x: 2 * x).cache().map(lambda x: 2 * x).collect()
>>> [4, 8, 12, 16]
Opis:
parallelize() - tworzy obiekt RDD ze zbioru
map() - transformacja RDD, operuje funkcją lambda na wszystkich elementach RDD.
cache() - zachowuje w pamięci wybrany obiekt RDD. Metodę cache() wykorzystuje się, gdy chcemy użyć wybranego RDD więcej niż raz np. w algorytmach iteratywnych jak PageRank. Jeśli w takim wypadku nie zrobimy cache() to RDD będzie wyliczone za każdym razem od nowa. Możemy również użyć podobnej metody persist().
collect() - akcja RDD zwracająca pythonową listę elementów RDD
Przykład 2:
from operator import add
rdd.map(lambda x: 2 * x).reduce(add)
>>> 20
rdd.flatMap(lambda x: [x, x]).reduce(add)
>>> 20
Opis:
reduce() - akcja na RDD agregująca elementy obiektu RDD za pomocą funkcji lambda która ma przyjmować dwa argumenty i zwracać jeden wynik. reduce() zwróci ostatecznie jedną wartość. Działanie reduce() dobrze demeonstruje przykład wyszukiwania największej liczby w całej kolekcji: reduce(lambda a, b: a if (a > b) else b)
flatMap() dokonuje Transformacji na RDD. Stosuje funkcję lambda do wszystkich elementów RDD i zwraca ‘płaski’ wynik typu lista RDDs (bez zagnieżdżonych struktur), czyli elementów wyjściowych może być więcej niż wejściowych, co odróżnia działanie od map().
Dokumentacja Hadoop oraz Spark w Cyfronet
Oficjalny Spark Programming Guide
Dokumentacja Hadoop oraz Spark w Cyfronet