You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by be...@apache.org on 2017/11/14 11:14:44 UTC
[11/17] ambari git commit: AMBARI-22325 Fixes for v2 blueprint json
serialization/deserialization (benyoka)
AMBARI-22325 Fixes for v2 blueprint json serialization/deserialization (benyoka)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/57bef16c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/57bef16c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/57bef16c
Branch: refs/heads/branch-feature-AMBARI-14714-blueprintv2
Commit: 57bef16ce0b9326e93a343e4f167e215ea50169c
Parents: 35d704c
Author: Balazs Bence Sari <be...@apache.org>
Authored: Mon Nov 6 11:18:55 2017 +0100
Committer: Balazs Bence Sari <be...@apache.org>
Committed: Tue Nov 14 11:31:15 2017 +0100
----------------------------------------------------------------------
.../ambari/server/controller/AmbariServer.java | 1 +
.../ambari/server/topology/BlueprintImplV2.java | 24 +++-
.../server/topology/BlueprintV2Factory.java | 29 +++-
.../ambari/server/topology/ComponentV2.java | 5 +
.../ambari/server/topology/Configurable.java | 25 +++-
.../ambari/server/topology/HostGroupV2Impl.java | 7 +
.../apache/ambari/server/topology/Service.java | 15 ++
.../validators/BlueprintImplV2Test.java | 32 ++++-
.../resources/blueprintv2/blueprintv2_2.json | 139 +++++++++++++++++++
9 files changed, 261 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
index 9bd8dd3..b28cb11 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
@@ -933,6 +933,7 @@ public class AmbariServer {
.class), injector.getInstance(Gson.class));
HostResourceProvider.setTopologyManager(injector.getInstance(TopologyManager.class));
BlueprintFactory.init(injector.getInstance(BlueprintDAO.class));
+ BlueprintV2Factory.init(injector.getInstance(BlueprintV2DAO.class));
BaseClusterRequest.init(injector.getInstance(BlueprintV2Factory.class));
AmbariContext.init(injector.getInstance(HostRoleCommandFactory.class));
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImplV2.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImplV2.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImplV2.java
index d31e9d4..d889fc2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImplV2.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImplV2.java
@@ -23,6 +23,7 @@ import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.toSet;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -47,7 +48,7 @@ public class BlueprintImplV2 implements BlueprintV2 {
private String name;
private SecurityConfiguration securityConfiguration;
- private Collection<RepositoryVersion> repositoryVersions;
+ private Collection<RepositoryVersion> repositoryVersions = new ArrayList<>(0);
private Map<String, ServiceGroup> serviceGroups;
private Setting setting;
private Configuration configuration;
@@ -98,6 +99,11 @@ public class BlueprintImplV2 implements BlueprintV2 {
this.repositoryVersions = repositoryVersions;
}
+ @JsonProperty("repository_versions")
+ public Collection<RepositoryVersion> getRepositoryVersions() {
+ return this.repositoryVersions;
+ }
+
@JsonProperty("service_groups")
public void setServiceGroups(Collection<ServiceGroup> serviceGroups) {
this.serviceGroups = serviceGroups.stream().collect(toMap( sg -> sg.getName(), sg -> sg ));
@@ -128,17 +134,24 @@ public class BlueprintImplV2 implements BlueprintV2 {
}
@Override
- @JsonProperty("host_groups")
+ @JsonIgnore
public Map<String, ? extends HostGroupV2> getHostGroups() {
return hostGroupMap;
}
+ @JsonProperty("host_groups")
+ public Collection<? extends HostGroupV2> getHostGroupsForSerialization() {
+ return hostGroupMap.values();
+ }
+
@Override
+ @JsonIgnore
public Collection<StackV2> getStacks() {
return stacks.values();
}
@Override
+ @JsonIgnore
public Collection<String> getStackIds() {
return repositoryVersions.stream().map(rv -> rv.getStackId()).collect(toList());
}
@@ -258,11 +271,16 @@ public class BlueprintImplV2 implements BlueprintV2 {
}
@Override
- @JsonProperty("cluster_settings")
+ @JsonIgnore
public Setting getSetting() {
return this.setting;
}
+ @JsonProperty("cluster_settings")
+ public Map<String, Set<HashMap<String, String>>> getSettingForSerialization() {
+ return this.setting.getProperties();
+ }
+
@Nonnull
@Override
@JsonIgnore
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
index 7b228e5..7ad5365 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
@@ -32,7 +32,6 @@ import org.apache.ambari.server.controller.StackV2;
import org.apache.ambari.server.controller.StackV2Factory;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.dao.BlueprintV2DAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.BlueprintV2Entity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.stack.NoSuchStackException;
@@ -42,6 +41,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.inject.Inject;
@@ -72,8 +72,8 @@ public class BlueprintV2Factory {
protected static final String SETTINGS_PROPERTY_ID = "settings";
+ private boolean prettyPrintJson = false;
private static BlueprintV2DAO blueprintDAO;
- private static StackDAO stackDao;
private ConfigurationFactory configFactory = new ConfigurationFactory();
private StackV2Factory stackFactory;
@@ -89,6 +89,10 @@ public class BlueprintV2Factory {
return new BlueprintV2Factory(new StackV2Factory(controller));
}
+ public static BlueprintV2Factory create(StackV2Factory factory) {
+ return new BlueprintV2Factory(factory);
+ }
+
public BlueprintV2 getBlueprint(String blueprintName) throws NoSuchStackException, NoSuchBlueprintException, IOException {
BlueprintV2Entity entity =
Optional.ofNullable(blueprintDAO.findByName(blueprintName)).orElseThrow(() -> new NoSuchBlueprintException(blueprintName));
@@ -107,6 +111,7 @@ public class BlueprintV2Factory {
return blueprintV2;
}
+
public BlueprintV2 convertFromEntity(BlueprintV2Entity blueprintEntity) throws IOException {
return convertFromJson(blueprintEntity.getContent());
}
@@ -131,7 +136,7 @@ public class BlueprintV2Factory {
public BlueprintV2Entity convertToEntity(BlueprintV2 blueprint) throws JsonProcessingException {
BlueprintV2Entity entity = new BlueprintV2Entity();
- String content = createObjectMapper().writeValueAsString(blueprint);
+ String content = convertToJson(blueprint);
entity.setContent(content);
entity.setBlueprintName(blueprint.getName());
entity.setSecurityType(blueprint.getSecurity().getType());
@@ -139,6 +144,11 @@ public class BlueprintV2Factory {
return entity;
}
+ public String convertToJson(BlueprintV2 blueprint) throws JsonProcessingException {
+ return createObjectMapper().writeValueAsString(blueprint);
+
+ }
+
/**
* Convert a map of properties to a blueprint entity.
*
@@ -180,7 +190,15 @@ public class BlueprintV2Factory {
}
}
- static ObjectMapper createObjectMapper() {
+ public boolean isPrettyPrintJson() {
+ return prettyPrintJson;
+ }
+
+ public void setPrettyPrintJson(boolean prettyPrintJson) {
+ this.prettyPrintJson = prettyPrintJson;
+ }
+
+ ObjectMapper createObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("CustomModel", Version.unknownVersion());
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
@@ -188,6 +206,9 @@ public class BlueprintV2Factory {
module.setAbstractTypes(resolver);
mapper.registerModule(module);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+ if (prettyPrintJson) {
+ mapper.enable(SerializationFeature.INDENT_OUTPUT);
+ }
return mapper;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/main/java/org/apache/ambari/server/topology/ComponentV2.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/ComponentV2.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/ComponentV2.java
index 68744d4..0d26ef6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/ComponentV2.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/ComponentV2.java
@@ -68,6 +68,7 @@ public class ComponentV2 implements Configurable {
return this.provisionAction;
}
+ @JsonIgnore
public ServiceId getServiceId() {
return serviceId;
}
@@ -77,10 +78,12 @@ public class ComponentV2 implements Configurable {
}
//TODO
+ @JsonIgnore
public ServiceGroup getServiceGroup() {
return null;
}
+ @JsonIgnore
public Configuration getConfiguration() {
return configuration;
}
@@ -100,6 +103,7 @@ public class ComponentV2 implements Configurable {
this.name = name;
}
+ @JsonProperty("service_group")
public String getServiceGroupName() {
return serviceId.getServiceGroup();
}
@@ -123,6 +127,7 @@ public class ComponentV2 implements Configurable {
this.provisionAction = provisionAction;
}
+ @JsonIgnore
public void setConfiguration(Configuration configuration) {
this.configuration = configuration;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
index 74308ab..0f3cf17 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
@@ -24,17 +24,32 @@ import java.util.Map;
import java.util.stream.Collectors;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.collect.Lists;
public interface Configurable {
void setConfiguration(Configuration configuration);
+ Configuration getConfiguration();
@JsonProperty("configurations")
default void setConfigs(Collection<Map<String, Map<String, Map<String, String>>>> configs) {
- Map<String, Map<String, String>> allProps = configs.stream().collect(Collectors.toMap(
- config -> config.keySet().iterator().next(),
- config -> config.values().iterator().next().get("properties")
- ));
- setConfiguration(new Configuration(allProps, new HashMap<>()));
+ if (null != configs) {
+ Map<String, Map<String, String>> allProps = configs.stream().
+ filter( map -> map != null && !map.isEmpty() && map.values().iterator().next().get("properties ") != null).
+ collect(Collectors.toMap(
+ config -> config.keySet().iterator().next(),
+ config -> config.values().iterator().next().get("properties")
+ ));
+ setConfiguration(new Configuration(allProps, new HashMap<>()));
+ }
+ }
+
+ @JsonProperty("configurations")
+ default Collection<Map<String, Map<String, Map<String, String>>>> getConfigs() {
+ Map<String, Map<String, Map<String, String>>> configAsMap = new HashMap<>();
+ if (null != getConfiguration()) {
+ configAsMap.put("properties", getConfiguration().getProperties());
+ }
+ return Lists.newArrayList(configAsMap);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupV2Impl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupV2Impl.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupV2Impl.java
index 01f34da..8834a37 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupV2Impl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupV2Impl.java
@@ -60,6 +60,7 @@ public class HostGroupV2Impl implements HostGroupV2, Configurable {
}
@Override
+ @JsonIgnore
public String getFullyQualifiedName() {
return blueprintName + ":" + name;
}
@@ -70,6 +71,7 @@ public class HostGroupV2Impl implements HostGroupV2, Configurable {
}
@Override
+ @JsonIgnore
public Collection<String> getComponentNames() {
return getComponentNames(components);
}
@@ -82,6 +84,7 @@ public class HostGroupV2Impl implements HostGroupV2, Configurable {
}
@Override
+ @JsonIgnore
public Collection<String> getComponentNames(ProvisionAction provisionAction) {
List<ComponentV2> filtered =
ImmutableList.copyOf(Collections2.filter(components, Predicates.equalTo(provisionAction)));
@@ -99,11 +102,13 @@ public class HostGroupV2Impl implements HostGroupV2, Configurable {
}
@Override
+ @JsonIgnore
public boolean containsMasterComponent() {
return containsMasterComponent;
}
@Override
+ @JsonIgnore
public Collection<ServiceId> getServiceIds() {
return serviceIds;
}
@@ -134,6 +139,7 @@ public class HostGroupV2Impl implements HostGroupV2, Configurable {
}
@Override
+ @JsonIgnore
public Configuration getConfiguration() {
return configuration;
}
@@ -157,6 +163,7 @@ public class HostGroupV2Impl implements HostGroupV2, Configurable {
this.serviceIds = components.stream().map(c -> c.getServiceId()).collect(Collectors.toSet());
}
+ @JsonIgnore
public void setConfiguration(Configuration configuration) {
this.configuration = configuration;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
index 317e29f..7c5ee42 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.topology;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.ambari.server.controller.StackV2;
@@ -39,6 +40,7 @@ public class Service implements Configurable {
private String stackId;
+ @JsonIgnore
private Configuration configuration;
private Set<ServiceId> dependencies = ImmutableSet.of();
@@ -61,10 +63,12 @@ public class Service implements Configurable {
return this.id.getName();
}
+ @JsonIgnore
public String getServiceGroupId() {
return this.id.getServiceGroup();
}
+ @JsonIgnore
public ServiceGroup getServiceGroup() {
return serviceGroup;
}
@@ -77,18 +81,28 @@ public class Service implements Configurable {
return stackId;
}
+ @JsonIgnore
public StackV2 getStack() {
return stack;
}
+ @JsonIgnore
public Set<ServiceId> getDependentServiceIds() {
return dependencies;
}
+ @JsonProperty("dependencies")
+ public Set<Map<String, String>> getDependenciesForSerialization() {
+ return dependencies.stream().map(
+ serviceId -> ImmutableMap.of("service_name", serviceId.getName(), "service_group", serviceId.getServiceGroup())).
+ collect(Collectors.toSet());
+ }
+
public Set<Service> getDependencies() {
return ImmutableSet.copyOf(dependencyMap.values());
}
+ @JsonIgnore
public Configuration getConfiguration() {
return configuration;
}
@@ -137,6 +151,7 @@ public class Service implements Configurable {
this.dependencyMap = dependencyMap;
}
+ @JsonIgnore
public ServiceId getId() {
return id;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
index ad2cdbd..99acfb7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
@@ -17,12 +17,18 @@
*/
package org.apache.ambari.server.topology.validators;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
import java.util.HashMap;
import java.util.Map;
import org.apache.ambari.server.controller.StackV2;
+import org.apache.ambari.server.controller.StackV2Factory;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.topology.BlueprintImplV2;
+import org.apache.ambari.server.topology.BlueprintV2Factory;
import org.apache.ambari.server.topology.HostGroupV2;
import org.apache.ambari.server.topology.HostGroupV2Impl;
import org.junit.BeforeClass;
@@ -39,11 +45,14 @@ import com.google.common.io.Resources;
public class BlueprintImplV2Test {
- static String BLUEPRINT_V2_JSON;
+ static String BLUEPRINTV2_JSON;
+ static String BLUEPRINTV2_2_JSON;
+
@BeforeClass
public static void setUpClass() throws Exception {
- BLUEPRINT_V2_JSON = Resources.toString(Resources.getResource("blueprintv2/blueprintv2.json"), Charsets.UTF_8);
+ BLUEPRINTV2_JSON = Resources.toString(Resources.getResource("blueprintv2/blueprintv2.json"), Charsets.UTF_8);
+ BLUEPRINTV2_2_JSON = Resources.toString(Resources.getResource("blueprintv2/blueprintv2_2.json"), Charsets.UTF_8);
}
@Test
@@ -55,7 +64,7 @@ public class BlueprintImplV2Test {
module.setAbstractTypes(resolver);
mapper.registerModule(module);
mapper.enable(SerializationFeature.INDENT_OUTPUT);
- BlueprintImplV2 bp = mapper.readValue(BLUEPRINT_V2_JSON, BlueprintImplV2.class);
+ BlueprintImplV2 bp = mapper.readValue(BLUEPRINTV2_JSON, BlueprintImplV2.class);
bp.postDeserialization();
// -- add stack --
StackV2 hdpCore = new StackV2("HDPCORE", "3.0.0", "3.0.0.0-1", new HashMap<>(), new HashMap<>(), new HashMap<>(),
@@ -67,7 +76,7 @@ public class BlueprintImplV2Test {
String bpJson = mapper.writeValueAsString(bp);
System.out.println(bpJson);
System.out.println("\n\n====================================================================================\n\n");
- Map<String, Object> map = mapper.readValue(BLUEPRINT_V2_JSON, HashMap.class);
+ Map<String, Object> map = mapper.readValue(BLUEPRINTV2_JSON, HashMap.class);
System.out.println(map);
System.out.println("\n\n====================================================================================\n\n");
String bpJson2 = mapper.writeValueAsString(map);
@@ -76,4 +85,19 @@ public class BlueprintImplV2Test {
BlueprintImplV2 bp2 = mapper.readValue(bpJson2, BlueprintImplV2.class);
System.out.println(bp2);
}
+
+ @Test
+ public void testSerialization2() throws Exception {
+ StackV2 hdpCore = new StackV2("HDPCORE", "3.0.0", "3.0.0.0-1", new HashMap<>(), new HashMap<>(), new HashMap<>(),
+ new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>()); StackV2Factory stackFactory = mock(StackV2Factory.class);
+ when(stackFactory.create(anyString(), anyString())).thenReturn(hdpCore);
+ BlueprintV2Factory bpFactory = BlueprintV2Factory.create(stackFactory);
+ bpFactory.setPrettyPrintJson(true);
+ BlueprintImplV2 bp = (BlueprintImplV2)bpFactory.convertFromJson(BLUEPRINTV2_2_JSON);
+ String bpSerialized = bpFactory.convertToJson(bp);
+ System.out.println(bpSerialized);
+ bp = (BlueprintImplV2)bpFactory.convertFromJson(bpSerialized);
+ }
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/57bef16c/ambari-server/src/test/resources/blueprintv2/blueprintv2_2.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/blueprintv2/blueprintv2_2.json b/ambari-server/src/test/resources/blueprintv2/blueprintv2_2.json
new file mode 100644
index 0000000..494e125
--- /dev/null
+++ b/ambari-server/src/test/resources/blueprintv2/blueprintv2_2.json
@@ -0,0 +1,139 @@
+{
+ "Blueprints": {
+ "blueprint_name": "blueprint-def",
+ "security": {
+ "type": "NONE"
+ }
+ },
+ "cluster_settings": {
+ "deployment_settings": [
+ {"skip_failure":"true"}
+ ],
+ "recovery_settings":[
+ {"recovery_enabled":"true"}
+ ]
+ },
+ "repository_versions": [
+ {
+ "stack_id": "HDP-3.0.0",
+ "repository_version": "3.0.0.0-359"
+ }
+ ],
+ "service_groups": [
+ {
+ "name": "CoreSG",
+ "dependencies": [],
+ "services": [
+ {
+ "type": "ZOOKEEPER",
+ "name": "ZK1",
+ "stack_id": "HDP-3.0.0",
+ "configurations": [
+ {
+ "zoo.cfg" : {
+ "properties" : {
+ "dataDir" : "/zookeeper1"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "type": "HDFS",
+ "stack_id": "HDP-3.0.0"
+ },
+ {
+ "type": "YARN",
+ "stack_id": "HDP-3.0.0"
+ },
+ {
+ "type": "HBASE",
+ "stack_id": "HDP-3.0.0"
+ }
+ ]
+ }
+ ],
+ "host_groups": [
+ {
+ "cardinality": "1",
+ "name": "host_group_1",
+ "configurations": [],
+ "components": [
+ {
+ "type": "NAMENODE",
+ "service_name": "HDFS",
+ "service_group": "CoreSG",
+ "configurations": [],
+ "provision_action": "INSTALL_AND_START"
+ },
+ {
+ "type": "SECONDARY_NAMENODE",
+ "service_name": "HDFS",
+ "service_group": "CoreSG",
+ "configurations": [],
+ "provision_action": "INSTALL_AND_START"
+ },
+ {
+ "type": "DATANODE",
+ "service_name": "HDFS",
+ "service_group": "CoreSG",
+ "configurations": [],
+ "provision_action": "INSTALL_AND_START"
+ },
+ {
+ "type": "ZOOKEEPER_SERVER",
+ "service_name": "ZK1",
+ "service_group": "CoreSG",
+ "configurations": []
+ },
+ {
+ "type": "RESOURCEMANAGER",
+ "service_name": "YARN",
+ "service_group": "CoreSG",
+ "configurations": []
+ },
+ {
+ "type" : "HDFS_CLIENT",
+ "service_name": "HDFS",
+ "service_group": "CoreSG"
+ },
+ {
+ "name" : "HISTORYSERVER",
+ "service_name": "YARN",
+ "service_group": "CoreSG"
+ },
+ {
+ "name" : "APP_TIMELINE_SERVER",
+ "service_name": "YARN",
+ "service_group": "CoreSG"
+ },
+ {
+ "name" : "MAPREDUCE2_CLIENT",
+ "service_name": "YARN",
+ "service_group": "CoreSG"
+ },
+ {
+ "name" : "RESOURCEMANAGER",
+ "service_name": "YARN",
+ "service_group": "CoreSG"
+ },
+ {
+ "name" : "NODEMANAGER",
+ "service_name": "YARN",
+ "service_group": "CoreSG"
+ },
+ {
+ "name" : "YARN_CLIENT",
+ "service_name": "YARN",
+ "service_group": "CoreSG"
+ },
+ {
+ "type": "HBASE_MASTER",
+ "service_name": "HBASE",
+ "service_group": "CoreSG",
+ "configurations": []
+ }
+ ]
+ }
+ ]
+}