【原創】大叔問題定位分享(23)Ambari安裝嚮導點擊下一步卡住

 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選擇頁面

相關文章
相關標籤/搜索