API Cloudera Manager для получения списка агентов Flume

Я пытаюсь получить количество агентов Flume, работающих на моем кластере CDH5.8, с помощью Cloudera Manager API.

https://cloudera.github.io/cm_api/

До сих пор я не мог понять, какую модель RESTful следует рассмотреть или связанный с ней класс Java. Если кто-то может помочь или проинформировать упомянутый Java-класс для изучения, это будет здорово

С уважением

1 ответ

Решение

Если вы используете следующий API:

https://cloudera.github.io/cm_api/apidocs/v13/path__clusters_-clusterName-_services_-serviceName-_roles.html

Размер items массив в возвращаемом объекте JSON будет числом агентов Flume. Чтобы узнать количество работающих агентов, для каждого элемента отметьте roleState равняется STARTED,

Класс Java ApiRole это, вероятно, то, что вам нужно. Этот фрагмент кода из примера whirr-cm близок к тому, что вы хотите.

https://github.com/cloudera/whirr-cm/blob/edb38ca7faa3e4bb2c23450ff0183c2dd631dcf4/src/main/java/com/cloudera/whirr/cm/server/impl/CmServerImpl.java#L486

        for (ApiService apiService : apiResourceRootV3.getClustersResource().getServicesResource(getName(cluster))
            .readServices(DataView.SUMMARY)) {
          for (ApiRole apiRole : apiResourceRootV3.getClustersResource().getServicesResource(getName(cluster))
              .getRolesResource(apiService.getName()).readRoles()) {
            if (apiRole.getRoleState().equals(ApiRoleState.STARTED)) {
              servicesNotStarted.remove(apiRole.getName());
            }
          }
        }

Вам просто нужно ограничить это сервисом Flume.

https://cloudera.github.io/cm_api/javadoc/5.11.0/index.html

Другие вопросы по тегам