fbpx

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.