Prerequisites
- HDP 2.0+
- YARN Installed
- At least 2 hosts in the cluster where YARN is not present on 1 host. These steps assume there are 3 hosts in the cluster.
Assumptions
This table lists the placeholders in the various steps below.
Placeholder | Description | Example |
---|---|---|
ambari-server | The server running the Ambari web client | c6401.ambari.apache.org:8080 |
cluster-name | The name of the cluster | cluster1 |
target-host | The host that will have the additional ResourceManager | c6403.ambari.apache.org |
rm-host-active | The host that will run the active ResourceManager | c6402.ambari.apache.org |
rm-host-standby | The host that will run the standby ResourceManager | c6403.ambari.apache.org |
zk-host-1, zk-host-(n) | The ZooKeeper hosts configured on the cluster. | c6401.ambari.apache.org:2181, c6402.ambari.apache.org:2181, c6403.ambari.apache.org:2181 |
yarn-cluster-name | The YARN cluster name. | yarn_cluster |
yarn-site-tag | The tag property of Ambari's yarn-site | version1 |
Installing ResourceManager
- Stop all services except for HDFS. There are two methods that can be used to accomplish this:
- Using the Ambari web client to manually stop each service.
- Using the Ambari REST APIs directly. For this method, you can consult the documentation on starting and stopping services.
Add a ResourceManager component to YARN on a host that does not already have ResourceManager installed. This will not actually install ResourceManager, but will setup the host component associations.
curl -u admin:$PASSWORD -H "X-Requested-By: Ambari" -i -X POST -d '{"host_components" : [{"HostRoles":{"component_name":"RESOURCEMANAGER"}}] }' http://<ambari-server>/api/v1/clusters/<cluster-name>/hosts?Hosts/host_name=<target-host>
Install ResourceManager on the same
target_host
used in the previous step.curl -u admin:$PASSWORD -H "X-Requested-By: Ambari" -i -X PUT -d '{"RequestInfo":{"context":"Install ResourceManager","operation_level":{"level":"HOST_COMPONENT","cluster_name":"<cluster-name>","host_name":"<target-host>","service_name":"YARN"}},"Body":{"HostRoles":{"state":"INSTALLED"}}}' http://<ambari-server>/api/v1/clusters/<cluster-name>/hosts/<target-host>/host_components/RESOURCEMANAGER
YARN Configuration
The
yarn-site
configuration group (yarn-site.xml) must now be updated to reflect the backup ResourceManager.property value yarn.resourcemanager.ha.enabled true yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 <rm-host-active> yarn.resourcemanager.hostname.rm2 <rm-host-standby> yarn.resourcemanager.recovery.enabled true yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore yarn.resourcemanager.zk-address <zk-host-1>, <zk-host-2>, <zk-host-3> yarn.resourcemanager.cluster-id <yarn-cluster-name> yarn.resourcemanager.ha.automatic-failover.zk-base-path /yarn-leader-election - There are two methods to update these configuration properties:
/var/lib/ambari-server/resources/scripts/configs.sh
- REST API
configs.sh
$ ./configs.sh set <ambari-server> <cluster-name> yarn-site <param-name> <param-value> example $ ./configs.sh set c6401.ambari.apache.org cl1 yarn-site yarn.resourcemanager.ha.enabled true
This will need to be execute for each parameter listed.
REST API
Get the existing
yarn-site
configuration version and tag.GET http://<ambari-server>/api/v1/clusters/<cluster-name>?fields=Clusters/desired_configs ... { "href" : "http://<ambari-server>/api/v1/clusters/<cluster-name>?fields=Clusters/desired_configs", "Clusters" : { "cluster_name" : "c1", "version" : "HDP-2.1", "desired_configs" : { ... "yarn-site" : { "tag" : "version1", "user" : "_anonymous", "version" : 1 }, ... } } }
Using the value from the
tag
property ofyarn-site
, request the current YARN configuration.GET http://<ambari-server>/api/v1/clusters/<cluster-name>/configurations?(type=yarn-site&tag=<yarn-site-tag>) ... "href" : "http://<ambari-server>/api/v1/clusters/<cluster-name>/configurations?(type=yarn-site&tag=version1)", "items" : [ { "href" : "http://<ambari-server>/api/v1/clusters/<cluster-name>/configurations?type=yarn-site&tag=version1", "tag" : "version1", "type" : "yarn-site", "version" : 1, "Config" : { "cluster_name" : "c1" }, "properties" : { "yarn.acl.enable" : "false", "yarn.admin.acl" : "", ... "yarn.timeline-service.ttl-enable" : "true", "yarn.timeline-service.ttl-ms" : "2678400000", "yarn.timeline-service.webapp.address" : "c6402.ambari.apache.org:8188", "yarn.timeline-service.webapp.https.address" : "c6402.ambari.apache.org:8190" } } ] }
The
properties
property contains the currentyarn-site
configuration. Append the new properties to this structure and then updateyarn-site
.PUT http://<ambari-server>/api/v1/clusters/<cluster-name> { "Clusters":{ "desired_config":{ "type":"yarn-site", "tag":"<new-yarn-site-tag>", "properties"::{ "yarn.acl.enable":"false", "yarn.admin.acl":"", ... "yarn.timeline-service.ttl-enable":"true", "yarn.timeline-service.ttl-ms":"2678400000", "yarn.timeline-service.webapp.address":"c6402.ambari.apache.org:8188", "yarn.timeline-service.webapp.https.address":"c6402.ambari.apache.org:8190" ... <yarn-ha-site-properties> "yarn.resourcemanager.ha.enabled": "true", "yarn.resourcemanager.ha.rm-ids": "rm1,rm2", ... } } } }
- Restart all stopped services.