Korzystanie z Ambari API jest przydatną rzeczą jeżeli na co dzień pracujemy z klastrem opartym o dystrybucję Hortonworks (obecnie Cloudera). W prosty sposób możemy uzyskiwać informacje na temat usług, samego klastra lub hostów. Od jego kondycji po dostępność usług. Zanim przejdziemy dalej krótko przypomnę czym jest API i o co tak na prawdę chodzi.
API czyli interfejs programowania aplikacji jest zbiorem definicji oraz protokołów, które pozwalają innym programom na komunikacje pomiędzy nimi.
W roku 2000 Roy Fielding zaproponował architekturę REST (Representational State Transfer) czyli nowe podejście do projektowania usług internetowych. REST został zaprojektowany w taki sposób, aby w komunikacji pomiędzy usługami lub urządzeniami korzystać z istniejących protokołów. Najczęściej wykorzystywanym protokołem w przypadku REST API jest HTTP.
Istotne jest to, że REST tak na prawdę to zbiór dobry praktyk, które służą jako powiedzmy drogowskaz. Często w przypadku aplikacji, w której implementuje się REST API, mówi się o RESTful.
Metody żądań HTTP
- GET – Wykorzystywana do pobierania danych z serwera
- PUT – Wykorzystywana do edycji danych
- POST – Wykorzystywana do umieszczanie nowych danych, utworzenia nowego zasobu
- DELETE – Wykorzystywana do usunięcie danych
Więcej informacji dotyczących innych metod znajdziesz pod tym linkiem.
Wybrane statusy HTTP
- 200 OK – zwracany w przypadku powodzenia metody GET oraz PUT.
- 201 Created – potwierdza umieszczenie nowych danych metodą POST.
- 400 Bad Request – Wysłano niepoprawne dane JSON.
- 401 Unauthorized – Używany użytkownik nie został uwierzytelniony. Istotne jest w takiej sytuacji sprawdzenie czy został umieszczony parametr dotyczący wprowadzenia hasła.
- 403 Forbidden – Użytkownik został uwierzytelniony, ale nie ma odpowiednich uprawnień.
- 404 Not Found – wiadomo 🙂
- 503 Service Unavailable – Połączenie z serwerem nie jest możliwe.
Przykładowe polecenia
W pierwszej kolejności musimy uwierzytelnić się. Tego wymaga Ambari API. Do przeprowadzenia podstawowego uwierzytelnienia możemy użyć narzędzia curl z przełącznikiem –user (user) podając użytkownika oraz hasło po dwukropku. Drugą metodą jest zastosowanie przełącznika -u nazwa_uzytkownika -p, gdzie hasło wpiszemy dopiero po kliknięciu Enter.
curl --user uzytkownik:haslo http://{adres.serwera.ambari}/api/v1/clusters
Następnie dodajemy nagłówek (przełącznik -H) „X-Requested-By: ambari”
Konstrukcja żądania, które wyświetli wszystkie powiązane hosty, na których zainstalowany jest HDFS może wyglądać następująco:
curl -u admin:admin -H "X-Requested-By: ambari" -X GET http://Adres_serwera_Ambari:8080/api/v1/clusters/NAZWA_KLASTRA/services/HDFS
Pobierz informacje o wszystkich hostach, na których zainstalowana jest usługa DATANODE
GET /clusters/NAZWA_KLASTRA/services/HDFS/components/DATANODE
Pobierz informacje o kondycji konkretnego hosta
GET api/v1/clusters/NAZWA_KLASTRA/hosts/NAZWA_WYBRANEGO_HOSTA ?fields=Hosts/host_state { "href" : "twoj.ambari.serwer/api/v1/clusters/NAZWA_KLASTRA/hosts/NAZWA_WYBRANEGO_HOSTA?fields=Hosts/host_state", "Hosts" : { "cluster_name" : "NAZWA_KLASTRA", "host_state" : "HEALTHY", "host_name" : "NAZWA_WYBRANEGO_HOSTA" } }
Pobieranie informacji o aktualnym stanie alertów na klastrze
GET api/v1/clusters/NAZWA_KLASTRA/alerts?format=summary { "href" : "http://twoj.ambari.serwer/api/v1/clusters/NAZWA_KLASTRA/alerts?format=summary", "alerts_summary" : { "OK" : { "count" : 227, "original_timestamp" : 1592503349003, "maintenance_count" : 0 }, "WARNING" : { "count" : 0, "original_timestamp" : 0, "maintenance_count" : 0 }, "CRITICAL" : { "count" : 2, "original_timestamp" : 0, "maintenance_count" : 1 }, "UNKNOWN" : { "count" : 0, "original_timestamp" : 0, "maintenance_count" : 0 } } }
Uzyskiwanie informacji o wersji aktualnie zainstalowanego stacka Hadoopa
GET http://twoj.ambari.server:8080/api/v1/clusters/NAZWA_KLASTRA/stack_versions/ { href: "http://twoj.ambari.server:8080/api/v1/clusters/NAZWA_KLASTRA/stack_versions", items: [ { href: "http://twoj.ambari.server:8080/api/v1/clusters/NAZWA_KLASTRA/stack_versions/1", ClusterStackVersions: { cluster_name: "NAZWA_KLASTRA", id: 1, repository_version: 1, stack: "HDP", version: "2.6" } } ] }
Uzyskiwani informacji o stanie usługi. W tym przykładzie HDFS. Status STARTED oznacza, że usługa jest zainstalowany i uruchomiona. Dozwolone są m.in. INSTALLED zainstalowany, ale nie uruchomiony. STOPPING, UNKOWN, UNINSTALLED lub UPGRADING.
GET api/v1/clusters/c1/services/HDFS/components/NAMENODE?fields=ServiceComponentInfo/state { "href" : "http://twoj.ambari.server/api/v1/clusters/NAZWA_KLASTRA/services/HDFS/components/NAMENODE?fields=ServiceComponentInfo/state", "ServiceComponentInfo" : { "cluster_name" : "NAZWA_KLASTRA", "component_name" : "NAMENODE", "state" : "STARTED", "service_name" : "HDFS" } }
Usunięcie usługi. Ostrożnie z komendą 🙂
DELETE api/v1/clusters/NAZWA_KLASTRA/services/NAZWA_USLUGI
Włączenie trybu Maintenance mode dla komponentów będących w trybie MASTER i SLAVE
Żeby nie zamieszać Tobie w głowie umieszczam całą przykładową komendę:
curl -u uzytkownik:haslo -X PUT -d '{"HostRoles": {"state": "MAINTENANCE"}}' http://twoj.ambari.serwer:8080/api/v1/clusters/NAZWA_KLASTRA/hosts/NAZWA_HOSTA/host_components/HDFS (przykład dla HDFS)
Usunięcie hosta z klastra
DELETE /api/v1/clusters/NAZWA_KLASTRA/hosts/NAZWA_HOSTA
Więcej przykładów możesz znaleźć w dokumentacji dotyczących Ambari API v.1 na GitHub
Posłuchaj podcastu o tym jakich usług potrzebujesz, aby uruchomić klaster w oparciu o Hadoop.
Niebawem startuje Szkoła Big Data – Jeżeli interesujesz się technologiami Big Data i chcesz rozwijać się w tym kierunku dołącz do grona zainteresowanych. Link do zapisu tutaj.