背景
- 可以從
/ambari-server/src/main/resources/stacks
源碼中查找Stack
的相關定義;- 當安裝完ambari-server后,可以在
/var/lib/ambari-server/resources/stacks
目錄下查找stack相關定義;
關于metainfo.xml
詳解參考:http://www.lxweimin.com/p/6c937f10ccbc
Stack配置
stack必須包含或者集成以下兩個配置: stack_features.json and stack_tools.json,配置目錄必須在stack根目錄下;
stack_features.json
: 該配置包含了在ambari中定義的一些的特征,并包含該特征的版本、描述信息。比如,配置如下:
{
"stack_features": [
{
"name": "rolling_upgrade",
"description": "Rolling upgrade support",
"min_version": "0.1.0.0"
},
{
"name": "config_versioning",
"description": "Configurable versions support",
"min_version": "0.1.0.0"
},
{
"name": "snappy",
"description": "Snappy compressor/decompressor support",
"min_version": "0.1.0.0"
},
{
"name": "ranger_kerberos_support",
"description": "Ranger Kerberos support",
"min_version": "0.1.0.0"
},
{
"name": "ranger_audit_db_support",
"description": "Ranger Audit to DB support",
"min_version": "0.1.0.0"
}
]
}
stack_tools.json
: 該配置包含了stack_selector
和conf_selector
安裝路徑;比如:
{
"stack_selector": ["hdp-select", "/usr/bin/hdp-select", "hdp-select"],
"conf_selector": ["conf-select", "/usr/bin/conf-select", "conf-select"]
}
定義一個stack和component
一個Service中metainfo.xml
文件定義了該Service所依賴的組件及該組件的管理腳本等;Service組件的狀態(tài)可以為: MASTER, SLAVE 或者 CLIENT狀態(tài),在metainfo.xml
文件中是通過 <category>指定的;
Component Catergory | Default LifeCycle |
---|---|
Master | install, start, stop, configure, status |
Slave | install, start, stop, configure, status |
Clinet | install, configure, status |
Ambari支持基于Python的各種命令, 你也可以通過定義customCommands
實現(xiàn)不在lifecycle之內(nèi)的其他生命周期執(zhí)行命令;
比如說YARN的metainfo.xml
配置如下:
<component>
<name>RESOURCEMANAGER</name>
<category>MASTER</category>
<commandScript>
<script>scripts/resourcemanager.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
<customCommands>
<customCommand>
<name>DECOMMISSION</name>
<commandScript>
<script>scripts/resourcemanager.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
</customCommand>
</customCommands>
</component>
其中, RESOURCEMANAGER
是一個master組件,執(zhí)行腳本為scripts/resourcemanager.py
,該目錄位置為services/YARN/package
, 該腳本基于Python實現(xiàn)并實現(xiàn)默認生命周期的執(zhí)行動作。比如說install動作實現(xiàn)如下:
class Resourcemanager(Script):
def install(self, env):
self.install_packages(env)
self.configure(env)
在上述配置中還實現(xiàn)了一個默認生命周期以外的一個DECOMMISSION
動作,其實現(xiàn)如下:
def decommission(self, env):
import params
...
Execute(yarn_refresh_cmd,
user=yarn_user
)
pass
Stack繼承
Stack可以繼承其他的Stack,以便于共享腳本和配置,可以通過以下幾種方式來避免代碼的重復:
- 定義Stack的子倉庫;
- 定義Stack的自倉庫的新Service;
- 重載父Stack的Service;
- 重載父Stack的Service配置;
比如說HDP2.1 Stack繼承HDP 2.06 Stack,只需要在metainfo.xml
配置中添加以下配置既可:
<metainfo>
<versions>
<active>true</active>
</versions>
<extends>2.0.6</extends>
</metainfo>
參考: