2017-06-27 42 views

回答

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()); 
      } 
      } 
     } 

你就只需要這個限制在水槽的服務。

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

+0

謝謝您的回覆,我將通過代碼去。我發現了一個使用RESTful模型的解決方法[curl -u admin:admin「localhost:7180/api/v13/clusters/Cloudera%20QuickSart/servic es/{servicename}/roles」]現在我試圖阻止角色代理)但失敗。我嘗試了[curl -X POST -u admin:admin「localhost:7180/api/v13/clusters/Cloudera%20QuickS tart/services/flume/roles/agent11/roleCommands/stop」] – Rana

+1

如果您試圖停止一個Flume代理,你需要做這樣的事情:curl -X POST -u admin:admin -H「Content-Type:application/json」-d'{「items」:[「agent11」]}'' localhost:7180/api/v13/clusters/Cloudera%20QuickS tart/services/flume/roleCommands/stop'。有關更多信息,請參見https://github.com/cloudera/cm_api/wiki/Start-Stop-Restart-JobTracker-Role和https://stackoverflow.com/questions/25004746/restart-jobtracker-through-cloudera-manager-api。例子。 – tk421

+0

非常感謝,它按預期工作。 – Rana