ambari安裝第一步是輸入集羣name,點擊next時頁面卡住不動,以下圖:web
注意到其中一個接口請求結果異常,http://ambari.server:8080/api/v1/version_definitions 重現以下:ajax
curl -u admin:admin "http://ambari.server:8080/api/v1/version_definitions?fields=VersionDefinition/stack_default,VersionDefinition/stack_repo_update_link_exists,VersionDefinition/max_jdk,VersionDefinition/min_jdk,operating_systems/repositories/Repositories/*,operating_systems/OperatingSystems/*,VersionDefinition/stack_services,VersionDefinition/repository_version&VersionDefinition/show_available=true&VersionDefinition/stack_name=HDP&_=1547529429429"
{
"href" : "http://ambari.server:8080/api/v1/version_definitions?fields=VersionDefinition/stack_default,VersionDefinition/stack_repo_update_link_exists,VersionDefinition/max_jdk,VersionDefinition/min_jdk,operating_systems/repositories/Repositories/*,operating_systems/OperatingSystems/*,VersionDefinition/stack_services,VersionDefinition/repository_version&VersionDefinition/show_available=true&VersionDefinition/stack_name=HDP&_=1547529429429",
"items" : [ ]
}apache
跟進代碼發現對應的js代碼爲:json
ambari-web/app/controllers/installer.jscentos
/** * query every stack names from server * @return {Array} */ loadStacksVersions: function () { var requests = []; const dfd = $.Deferred(); this.get('stackNames').forEach(function (stackName) { requests.push(App.ajax.send({ name: 'wizard.stacks_versions_definitions', sender: this, data: { stackName: stackName, dfd: dfd }, success: 'loadStacksVersionsDefinitionsSuccessCallback', error: 'loadStacksVersionsErrorCallback' })); }, this); this.set('loadStacksRequestsCounter', requests.length); return dfd.promise(); },
這段代碼要訪問全部的stack version,可是服務器返回空,因此一直卡住api
注意到服務器啓動時有一段日誌:promise
2019-01-15 12:03:45,452 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.0 is not active, skipping VDF
2019-01-15 12:03:45,452 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.0.6 is not active, skipping VDF
2019-01-15 12:03:45,452 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.0.6.GlusterFS is not active, skipping VDF
2019-01-15 12:03:45,452 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.1 is not active, skipping VDF
2019-01-15 12:03:45,452 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.1.GlusterFS is not active, skipping VDF
2019-01-15 12:03:45,452 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.2 is not active, skipping VDF
2019-01-15 12:03:45,453 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.3 is not active, skipping VDF
2019-01-15 12:03:45,453 INFO [ambari-client-thread-44] AmbariMetaInfo:1430 - Stack HDP-2.3.ECS is not active, skipping VDF
2019-01-15 12:03:45,453 INFO [ambari-client-thread-44] AmbariMetaInfo:1428 - Stack HDP-2.3.GlusterFS is not valid, skipping VDF: The service 'OOZIE' in stack 'HDP:2.3.GlusterFS' extends a non-existent service: 'common-services/OOZIE/5.0.0.2.3'服務器
跟進日誌代碼發現app
org.apache.ambari.server.api.services.AmbariMetaInfocurl
private synchronized void ensureVersionDefinitions() { ... StackId stackId = new StackId(stack); if (!stack.isValid()) { LOG.info("Stack {} is not valid, skipping VDF: {}", stackId, StringUtils.join(stack.getErrors(), "; ")); } else if (!stack.isActive()) { LOG.info("Stack {} is not active, skipping VDF", stackId); }
這裏isActive是在StackModule.populateStackInfo中賦值:
org.apache.ambari.server.stack.StackModule
private void populateStackInfo() { ... StackMetainfoXml smx = stackDirectory.getMetaInfoFile(); ... stackInfo.setActive(smx.getVersion().isActive());
能夠看到isActive取值自StackMetainfoXml
org.apache.ambari.server.state.stack.StackMetainfoXml
這個類對應的metainfo.xml爲
/var/lib/ambari-server/resources/stacks/HDP/$version/metainfo.xml
cat /var/lib/ambari-server/resources/stacks/HDP/2.6/metainfo.xml
<metainfo>
<versions>
<active>false</active>
</versions>
<extends>2.5</extends>
<minJdk>1.7</minJdk>
<maxJdk>1.8</maxJdk>
</metainfo>
查看metainfo.xml發現安裝完成以後各個版本的metainfo.xml中active默認都是false;
將active改成true,而後重啓ambari-server,若是重啓以後解決問題,那麼恭喜你,若是還有問題請繼續看:
嘗試手工註冊vdf
curl -v -k -u admin:admin -H "X-Requested-By:ambari" -X POST http://ambari.server:8080/api/v1/version_definitions -d '{"VersionDefinition": {"version_url":"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos7/2.x/BUILDS/2.6.5.0-292/HDP-2.6.5.0-292.xml"}}'
各個版本的vdf能夠在這裏找到:http://s3.amazonaws.com/dev.hortonworks.com/HDP/hdp_urlinfo.json
終於見到stack選擇頁面