You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ni...@apache.org on 2018/09/26 04:54:08 UTC
[ambari] branch trunk updated: AMBARI-24535 : File View not
accessible in Ambari 2.7 after enabling 3 namenodes in HDP 3.0
(nitirajrathore) (#2352)
This is an automated email from the ASF dual-hosted git repository.
nitiraj pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new f26bad4 AMBARI-24535 : File View not accessible in Ambari 2.7 after enabling 3 namenodes in HDP 3.0 (nitirajrathore) (#2352)
f26bad4 is described below
commit f26bad435c6b9914e400472ec923e2fddf39ea22
Author: nitirajrathore <ni...@gmail.com>
AuthorDate: Wed Sep 26 10:24:02 2018 +0530
AMBARI-24535 : File View not accessible in Ambari 2.7 after enabling 3 namenodes in HDP 3.0 (nitirajrathore) (#2352)
* AMBARI-24535 : File View not accessible in Ambari 2.7 after enabling 3 namenodes in HDP 3.0 (nitirajrathore)
* AMBARI-24535 : review changes and handled changes for work flow manager. File View not accessible in Ambari 2.7 after enabling 3 namenodes in HDP 3.0 (nitirajrathore)
---
contrib/views/files/src/main/resources/view.xml | 45 +---
.../view/utils/hdfs/ConfigurationBuilder.java | 91 ++++++---
.../view/utils/hdfs/ConfigurationBuilderTest.java | 48 ++++-
.../views/wfmanager/src/main/resources/view.xml | 227 ++++++++++-----------
4 files changed, 228 insertions(+), 183 deletions(-)
diff --git a/contrib/views/files/src/main/resources/view.xml b/contrib/views/files/src/main/resources/view.xml
index a4513a6..09a1839 100644
--- a/contrib/views/files/src/main/resources/view.xml
+++ b/contrib/views/files/src/main/resources/view.xml
@@ -48,50 +48,23 @@
<cluster-config>fake</cluster-config>
</parameter>
<parameter>
- <name>webhdfs.ha.namenode.rpc-address.nn1</name>
- <description>RPC address for first name node.
- Value of hdfs-site/dfs.namenode.rpc-address.[nameservice].[namenode1] property</description>
- <label>First NameNode RPC Address</label>
+ <name>webhdfs.ha.namenode.rpc-address.list</name>
+ <description>Comma separated RPC address for name nodes.</description>
+ <label>Comma separated NameNode RPC Addresses</label>
<required>false</required>
<cluster-config>fake</cluster-config>
</parameter>
<parameter>
- <name>webhdfs.ha.namenode.rpc-address.nn2</name>
- <description>RPC address for second name node.
- Value of hdfs-site/dfs.namenode.rpc-address.[nameservice].[namenode2] property</description>
- <label>Second NameNode RPC Address</label>
+ <name>webhdfs.ha.namenode.http-address.list</name>
+ <description>Comma separated WebHDFS address for name nodes.</description>
+ <label>Comma separated NameNode HTTP (WebHDFS) Addresses</label>
<required>false</required>
<cluster-config>fake</cluster-config>
</parameter>
<parameter>
- <name>webhdfs.ha.namenode.http-address.nn1</name>
- <description>WebHDFS address for first name node.
- Value of hdfs-site/dfs.namenode.http-address.[nameservice].[namenode1] property</description>
- <label>First NameNode HTTP (WebHDFS) Address</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenode.http-address.nn2</name>
- <description>WebHDFS address for second name node.
- Value of hdfs-site/dfs.namenode.http-address.[nameservice].[namenode2] property</description>
- <label>Second NameNode HTTP (WebHDFS) Address</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenode.https-address.nn1</name>
- <description>WebHDFS Https address for first name node.
- Value of hdfs-site/dfs.namenode.https-address.[nameservice].[namenode1] property</description>
- <label>First NameNode HTTPS (WebHDFS) Address</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenode.https-address.nn2</name>
- <description>WebHDFS Https address for second name node.
- Value of hdfs-site/dfs.namenode.https-address.[nameservice].[namenode2] property</description>
- <label>Second NameNode HTTPS (WebHDFS) Address</label>
+ <name>webhdfs.ha.namenode.https-address.list</name>
+ <description>Comma separated WebHDFS Https addresses for name nodes.</description>
+ <label>Comma separated NameNode HTTPS (WebHDFS) Addresses</label>
<required>false</required>
<cluster-config>fake</cluster-config>
</parameter>
diff --git a/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilder.java b/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilder.java
index df0fd96..fc37b77 100644
--- a/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilder.java
+++ b/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilder.java
@@ -18,6 +18,8 @@
package org.apache.ambari.view.utils.hdfs;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
import org.apache.ambari.view.ViewContext;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.conf.Configuration;
@@ -28,6 +30,9 @@ import java.io.IOException;
import java.io.StringWriter;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.Map;
/**
@@ -48,16 +53,13 @@ public class ConfigurationBuilder {
public static final String HA_NAMENODES_INSTANCE_PROPERTY = "webhdfs.ha.namenodes.list";
public static final String HA_NAMENODES_CLUSTER_PROPERTY = "dfs.ha.namenodes.%s";
- public static final String NAMENODE_RPC_NN1_INSTANCE_PROPERTY = "webhdfs.ha.namenode.rpc-address.nn1";
- public static final String NAMENODE_RPC_NN2_INSTANCE_PROPERTY = "webhdfs.ha.namenode.rpc-address.nn2";
+ public static final String NAMENODE_RPC_NN_INSTANCE_PROPERTY = "webhdfs.ha.namenode.rpc-address.list";
public static final String NAMENODE_RPC_NN_CLUSTER_PROPERTY = "dfs.namenode.rpc-address.%s.%s";
- public static final String NAMENODE_HTTP_NN1_INSTANCE_PROPERTY = "webhdfs.ha.namenode.http-address.nn1";
- public static final String NAMENODE_HTTP_NN2_INSTANCE_PROPERTY = "webhdfs.ha.namenode.http-address.nn2";
+ public static final String NAMENODE_HTTP_NN_INSTANCE_PROPERTY = "webhdfs.ha.namenode.http-address.list";
public static final String NAMENODE_HTTP_NN_CLUSTER_PROPERTY = "dfs.namenode.http-address.%s.%s";
- public static final String NAMENODE_HTTPS_NN1_INSTANCE_PROPERTY = "webhdfs.ha.namenode.https-address.nn1";
- public static final String NAMENODE_HTTPS_NN2_INSTANCE_PROPERTY = "webhdfs.ha.namenode.https-address.nn2";
+ public static final String NAMENODE_HTTPS_NN_INSTANCE_PROPERTY = "webhdfs.ha.namenode.https-address.list";
public static final String NAMENODE_HTTPS_NN_CLUSTER_PROPERTY = "dfs.namenode.https-address.%s.%s";
public static final String FAILOVER_PROXY_PROVIDER_INSTANCE_PROPERTY = "webhdfs.client.failover.proxy.provider";
@@ -74,7 +76,7 @@ public class ConfigurationBuilder {
public static final String DFS_NAMENODE_HTTPS_ADDERSS = "dfs.namenode.https-address";
- private Configuration conf = new Configuration();
+ protected Configuration conf = new Configuration();
private ViewContext context;
private AuthConfigurationBuilder authParamsBuilder;
private Map<String, String> authParams;
@@ -137,7 +139,7 @@ public class ConfigurationBuilder {
protected String getEncryptionKeyProviderUri() {
//If KMS is configured, this value will not be empty
- String encryptionKeyProviderUri = context.getCluster().getConfigurationValue("hdfs-site", "dfs.encryption.key.provider.uri");
+ String encryptionKeyProviderUri = getProperty("hdfs-site", "dfs.encryption.key.provider.uri");
return encryptionKeyProviderUri;
}
@@ -182,13 +184,17 @@ public class ConfigurationBuilder {
String value;
if (context.getCluster() != null) {
- value = context.getCluster().getConfigurationValue(type, key);
+ value = getProperty(type, key);
} else {
- value = context.getProperties().get(instanceProperty);
+ value = getViewProperty(instanceProperty);
}
return value;
}
+ private String getViewProperty(String instanceProperty) {
+ return context.getProperties().get(instanceProperty);
+ }
+
private String getProperty(String type, String key) {
if (context.getCluster() != null) {
return context.getCluster().getConfigurationValue(type, key);
@@ -234,7 +240,8 @@ public class ConfigurationBuilder {
}
}
- private void copyHAProperties(String defaultFS) throws URISyntaxException, HdfsApiException {
+ @VisibleForTesting
+ void copyHAProperties(String defaultFS) throws URISyntaxException, HdfsApiException {
URI uri = new URI(defaultFS);
String nameservice = uri.getHost();
@@ -243,29 +250,55 @@ public class ConfigurationBuilder {
HA_NAMENODES_INSTANCE_PROPERTY);
String[] namenodes = namenodeIDs.split(",");
- if (namenodes.length != 2) {
- throw new HdfsApiException("HDFS080 " + HA_NAMENODES_INSTANCE_PROPERTY + " namenodes count is not exactly 2");
+ // get the property values from cluster.
+ // If not found then get the values from view instance property.
+
+ List<String> rpcAddresses = new ArrayList<>(namenodes.length);
+ List<String> httpAddresses = new ArrayList<>(namenodes.length);
+ List<String> httpsAddresses = new ArrayList<>(namenodes.length);
+ for (String namenode : namenodes) {
+
+ String rpcAddress = getProperty(HDFS_SITE, String.format(NAMENODE_RPC_NN_CLUSTER_PROPERTY, nameservice, namenode));
+ if(!Strings.isNullOrEmpty(rpcAddress)) {
+ rpcAddresses.add(rpcAddress);
+ }
+
+ String httpAddress = getProperty(HDFS_SITE, String.format(NAMENODE_HTTP_NN_CLUSTER_PROPERTY, nameservice, namenode));
+ if(!Strings.isNullOrEmpty(httpAddress)) {
+ httpAddresses.add(httpAddress);
+ }
+
+ String httpsAddress = getProperty(HDFS_SITE, String.format(NAMENODE_HTTPS_NN_CLUSTER_PROPERTY, nameservice, namenode));
+ if(!Strings.isNullOrEmpty(httpsAddress)) {
+ httpsAddresses.add(httpsAddress);
+ }
+ }
+
+ addAddresses(rpcAddresses, NAMENODE_RPC_NN_INSTANCE_PROPERTY);
+ addAddresses(httpAddresses, NAMENODE_HTTP_NN_INSTANCE_PROPERTY);
+ addAddresses(httpsAddresses, NAMENODE_HTTPS_NN_INSTANCE_PROPERTY);
+
+ for (int i = 0 ; i < namenodes.length ; i++) {
+ conf.set( String.format(NAMENODE_RPC_NN_CLUSTER_PROPERTY, nameservice, namenodes[i]), rpcAddresses.get(i));
+ conf.set( String.format(NAMENODE_HTTP_NN_CLUSTER_PROPERTY, nameservice, namenodes[i]), httpAddresses.get(i));
+ conf.set( String.format(NAMENODE_HTTPS_NN_CLUSTER_PROPERTY, nameservice, namenodes[i]), httpsAddresses.get(i));
}
- //NN1
- copyClusterProperty(String.format(NAMENODE_RPC_NN_CLUSTER_PROPERTY, nameservice, namenodes[0]),
- NAMENODE_RPC_NN1_INSTANCE_PROPERTY);
- copyClusterProperty(String.format(NAMENODE_HTTP_NN_CLUSTER_PROPERTY, nameservice, namenodes[0]),
- NAMENODE_HTTP_NN1_INSTANCE_PROPERTY);
- copyClusterProperty(String.format(NAMENODE_HTTPS_NN_CLUSTER_PROPERTY, nameservice, namenodes[0]),
- NAMENODE_HTTPS_NN1_INSTANCE_PROPERTY);
-
- //NN2
- copyClusterProperty(String.format(NAMENODE_RPC_NN_CLUSTER_PROPERTY, nameservice, namenodes[1]),
- NAMENODE_RPC_NN2_INSTANCE_PROPERTY);
- copyClusterProperty(String.format(NAMENODE_HTTP_NN_CLUSTER_PROPERTY, nameservice, namenodes[1]),
- NAMENODE_HTTP_NN2_INSTANCE_PROPERTY);
- copyClusterProperty(String.format(NAMENODE_HTTPS_NN_CLUSTER_PROPERTY, nameservice, namenodes[1]),
- NAMENODE_HTTPS_NN2_INSTANCE_PROPERTY);
copyClusterProperty(String.format(FAILOVER_PROXY_PROVIDER_CLUSTER_PROPERTY, nameservice),
FAILOVER_PROXY_PROVIDER_INSTANCE_PROPERTY);
}
+ private void addAddresses(List<String> addressList, String propertyName) {
+ if(addressList.isEmpty()){
+ // get property from view instance configs
+ String addressString = getViewProperty(propertyName);
+ LOG.debug("value of {} in view is : {}", propertyName, addressString);
+ if(!Strings.isNullOrEmpty(addressString)){
+ addressList.addAll(Arrays.asList(addressString.split(",")));
+ }
+ }
+ }
+
private String copyClusterProperty(String propertyName, String instancePropertyName) {
String value = getProperty(HDFS_SITE, propertyName, instancePropertyName);
if (!StringUtils.isEmpty(value)) {
@@ -327,7 +360,7 @@ public class ConfigurationBuilder {
parseProperties();
setAuthParams(buildAuthenticationConfig());
- String umask = context.getProperties().get(UMASK_INSTANCE_PROPERTY);
+ String umask = getViewProperty(UMASK_INSTANCE_PROPERTY);
if (umask != null && !umask.isEmpty()) conf.set(UMASK_CLUSTER_PROPERTY, umask);
if(null != this.customProperties){
diff --git a/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilderTest.java b/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilderTest.java
index 12c613a..1f3d774 100644
--- a/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilderTest.java
+++ b/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/hdfs/ConfigurationBuilderTest.java
@@ -18,17 +18,31 @@
package org.apache.ambari.view.utils.hdfs;
+import com.google.common.base.Joiner;
import org.apache.ambari.view.ViewContext;
import org.apache.ambari.view.cluster.Cluster;
import org.easymock.EasyMockSupport;
+import org.junit.Assert;
import org.junit.Test;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.HA_NAMENODES_INSTANCE_PROPERTY;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.NAMENODE_HTTPS_NN_CLUSTER_PROPERTY;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.NAMENODE_HTTPS_NN_INSTANCE_PROPERTY;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.NAMENODE_HTTP_NN_CLUSTER_PROPERTY;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.NAMENODE_HTTP_NN_INSTANCE_PROPERTY;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.NAMENODE_RPC_NN_CLUSTER_PROPERTY;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.NAMENODE_RPC_NN_INSTANCE_PROPERTY;
+import static org.apache.ambari.view.utils.hdfs.ConfigurationBuilder.NAMESERVICES_INSTANCE_PROPERTY;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class ConfigurationBuilderTest extends EasyMockSupport {
@Test
@@ -66,7 +80,7 @@ public class ConfigurationBuilderTest extends EasyMockSupport {
replay(cluster);
ViewContext viewContext = createNiceMock(ViewContext.class);
- expect(viewContext.getCluster()).andReturn(cluster);
+ expect(viewContext.getCluster()).andReturn(cluster).anyTimes();
Map<String, String> instanceProperties = new HashMap<>();
expect(viewContext.getProperties()).andReturn(instanceProperties).anyTimes();
replay(viewContext);
@@ -76,4 +90,36 @@ public class ConfigurationBuilderTest extends EasyMockSupport {
assertEquals(encryptionKeyProviderUri, keyProvider);
}
+
+ @Test
+ public void testCopyHAProperties() throws Exception {
+ Map<String, String> properties = new HashMap();
+ String[] nnrpc = new String[]{"nn1rpc", "nn2rpc", "nn3rpc"};
+ String[] nnhttp = new String[]{"nn1http", "nn2http", "nn3http"};
+ String[] nnhttps = new String[]{"nn1https", "nn2https", "nn3https"};
+
+ String nameservice = "mycluster";
+ String nameNodesString = "nn1,nn2,nn3";
+ String[] namenodes = nameNodesString.split(",");
+ properties.put(NAMESERVICES_INSTANCE_PROPERTY, nameservice);
+ properties.put(HA_NAMENODES_INSTANCE_PROPERTY, nameNodesString);
+ properties.put(NAMENODE_RPC_NN_INSTANCE_PROPERTY, Joiner.on(",").join(Arrays.asList(nnrpc)));
+ properties.put(NAMENODE_HTTP_NN_INSTANCE_PROPERTY, Joiner.on(",").join(Arrays.asList(nnhttp)));
+ properties.put(NAMENODE_HTTPS_NN_INSTANCE_PROPERTY, Joiner.on(",").join(Arrays.asList(nnhttps)));
+
+ String defaultFS = "webhdfs://" + nameservice;
+ Cluster cluster = mock(Cluster.class);
+ ViewContext viewContext = mock(ViewContext.class);
+ when(viewContext.getCluster()).thenReturn(null);
+ when(viewContext.getProperties()).thenReturn(properties);
+
+ ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(viewContext);
+ configurationBuilder.copyHAProperties(defaultFS);
+
+ for(int i = 0 ; i < nnhttp.length; i++) {
+ Assert.assertEquals("name node rpc address not correct.", nnrpc[i], configurationBuilder.conf.get(String.format(NAMENODE_RPC_NN_CLUSTER_PROPERTY, nameservice, namenodes[i])));
+ Assert.assertEquals("name node http address not correct.", nnhttp[i], configurationBuilder.conf.get(String.format(NAMENODE_HTTP_NN_CLUSTER_PROPERTY, nameservice, namenodes[i])));
+ Assert.assertEquals("name node https address not correct.", nnhttps[i], configurationBuilder.conf.get(String.format(NAMENODE_HTTPS_NN_CLUSTER_PROPERTY, nameservice, namenodes[i])));
+ }
+ }
}
diff --git a/contrib/views/wfmanager/src/main/resources/view.xml b/contrib/views/wfmanager/src/main/resources/view.xml
index 85cf3e5..3ae3581 100644
--- a/contrib/views/wfmanager/src/main/resources/view.xml
+++ b/contrib/views/wfmanager/src/main/resources/view.xml
@@ -24,7 +24,7 @@
<name>proxy</name>
<service-class>org.apache.oozie.ambari.view.OozieProxyImpersonator</service-class>
</resource>
-
+
<parameter>
<name>oozie.service.uri</name>
<description>Oozie service URI for the Oozie API.</description>
@@ -34,131 +34,124 @@
</parameter>
- <parameter>
- <name>webhdfs.url</name>
- <description>Enter the WebHDFS FileSystem URI. Typically this is the dfs.namenode.http-address
- property in the hdfs-site.xml configuration. URL must be accessible from Ambari Server.</description>
- <label>WebHDFS FileSystem URI</label>
- <required>true</required>
- <cluster-config>core-site/fs.defaultFS</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.nameservices</name>
- <description>Comma-separated list of nameservices. Value of hdfs-site/dfs.nameservices property</description>
- <label>Logical name of the NameNode cluster</label>
- <required>false</required>
- <cluster-config>hdfs-site/dfs.nameservices</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenodes.list</name>
- <description>Comma-separated list of namenodes for a given nameservice.
- Value of hdfs-site/dfs.ha.namenodes.[nameservice] property</description>
- <label>List of NameNodes</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenode.rpc-address.nn1</name>
- <description>RPC address for first name node.
- Value of hdfs-site/dfs.namenode.rpc-address.[nameservice].[namenode1] property</description>
- <label>First NameNode RPC Address</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenode.rpc-address.nn2</name>
- <description>RPC address for second name node.
- Value of hdfs-site/dfs.namenode.rpc-address.[nameservice].[namenode2] property</description>
- <label>Second NameNode RPC Address</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenode.http-address.nn1</name>
- <description>WebHDFS address for first name node.
- Value of hdfs-site/dfs.namenode.http-address.[nameservice].[namenode1] property</description>
- <label>First NameNode HTTP (WebHDFS) Address</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.ha.namenode.http-address.nn2</name>
- <description>WebHDFS address for second name node.
- Value of hdfs-site/dfs.namenode.http-address.[nameservice].[namenode2] property</description>
- <label>Second NameNode HTTP (WebHDFS) Address</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.client.failover.proxy.provider</name>
- <description>The Java class that HDFS clients use to contact the Active NameNode
- Value of hdfs-site/dfs.client.failover.proxy.provider.[nameservice] property</description>
- <label>Failover Proxy Provider</label>
- <required>false</required>
- <cluster-config>fake</cluster-config>
- </parameter>
- <parameter>
- <name>hdfs.auth_to_local</name>
- <description>Auth to Local Configuration</description>
- <label>Auth To Local</label>
- <required>false</required>
- <cluster-config>core-site/hadoop.security.auth_to_local</cluster-config>
- </parameter>
- <parameter>
- <name>webhdfs.username</name>
- <description>doAs for proxy user for HDFS. By default, uses the currently logged-in Ambari user.</description>
- <label>WebHDFS Username</label>
- <default-value>${username}</default-value>
- <required>false</required>
- </parameter>
- <parameter>
- <name>webhdfs.auth</name>
- <description>Semicolon-separated authentication configs.</description>
- <placeholder>auth=SIMPLE</placeholder>
- <label>WebHDFS Authorization</label>
- <required>false</required>
- </parameter>
- <parameter>
- <name>hadoop.security.authentication</name>
- <description>Security Authentication (simple/kerberos).</description>
- <label>Security Authentication Type</label>
- <placeholder>simple</placeholder>
- <cluster-config>core-site/hadoop.security.authentication</cluster-config>
- <default-value>simple</default-value>
- <required>true</required>
- </parameter>
- <parameter>
- <name>yarn.resourcemanager.address</name>
- <description>yarn.resourcemanager.address</description>
- <label>yarn.resourcemanager.address</label>
- <placeholder>http://sandbox.hortonworks.com:8050</placeholder>
- <cluster-config>yarn-site/yarn.resourcemanager.address</cluster-config>
- <required>true</required>
- </parameter>
+ <parameter>
+ <name>webhdfs.url</name>
+ <description>Enter the WebHDFS FileSystem URI. Typically this is the dfs.namenode.http-address
+ property in the hdfs-site.xml configuration. URL must be accessible from Ambari Server.
+ </description>
+ <label>WebHDFS FileSystem URI</label>
+ <required>true</required>
+ <cluster-config>core-site/fs.defaultFS</cluster-config>
+ </parameter>
+ <parameter>
+ <name>webhdfs.nameservices</name>
+ <description>Comma-separated list of nameservices. Value of hdfs-site/dfs.nameservices property</description>
+ <label>Logical name of the NameNode cluster</label>
+ <required>false</required>
+ <cluster-config>hdfs-site/dfs.nameservices</cluster-config>
+ </parameter>
+ <parameter>
+ <name>webhdfs.ha.namenodes.list</name>
+ <description>Comma-separated list of namenodes for a given nameservice.
+ Value of hdfs-site/dfs.ha.namenodes.[nameservice] property
+ </description>
+ <label>List of NameNodes</label>
+ <required>false</required>
+ <cluster-config>fake</cluster-config>
+ </parameter>
+ <parameter>
+ <name>webhdfs.ha.namenode.rpc-address.list</name>
+ <description>Comma separated RPC address for name nodes.</description>
+ <label>Comma separated NameNode RPC Addresses</label>
+ <required>false</required>
+ <cluster-config>fake</cluster-config>
+ </parameter>
+ <parameter>
+ <name>webhdfs.ha.namenode.http-address.list</name>
+ <description>Comma separated WebHDFS address for name nodes.</description>
+ <label>Comma separated NameNode HTTP (WebHDFS) Addresses</label>
+ <required>false</required>
+ <cluster-config>fake</cluster-config>
+ </parameter>
+ <parameter>
+ <name>webhdfs.ha.namenode.https-address.list</name>
+ <description>Comma separated WebHDFS Https addresses for name nodes.</description>
+ <label>Comma separated NameNode HTTPS (WebHDFS) Addresses</label>
+ <required>false</required>
+ <cluster-config>fake</cluster-config>
+ </parameter>
+ <parameter>
+ <name>webhdfs.client.failover.proxy.provider</name>
+ <description>The Java class that HDFS clients use to contact the Active NameNode
+ Value of hdfs-site/dfs.client.failover.proxy.provider.[nameservice] property
+ </description>
+ <label>Failover Proxy Provider</label>
+ <required>false</required>
+ <cluster-config>fake</cluster-config>
+ </parameter>
+ <parameter>
+ <name>hdfs.auth_to_local</name>
+ <description>Auth to Local Configuration</description>
+ <label>Auth To Local</label>
+ <required>false</required>
+ <cluster-config>core-site/hadoop.security.auth_to_local</cluster-config>
+ </parameter>
+ <parameter>
+ <name>webhdfs.username</name>
+ <description>doAs for proxy user for HDFS. By default, uses the currently logged-in Ambari user.</description>
+ <label>WebHDFS Username</label>
+ <default-value>${username}</default-value>
+ <required>false</required>
+ </parameter>
+ <parameter>
+ <name>webhdfs.auth</name>
+ <description>Semicolon-separated authentication configs.</description>
+ <placeholder>auth=SIMPLE</placeholder>
+ <label>WebHDFS Authorization</label>
+ <required>false</required>
+ </parameter>
+ <parameter>
+ <name>hadoop.security.authentication</name>
+ <description>Security Authentication (simple/kerberos).</description>
+ <label>Security Authentication Type</label>
+ <placeholder>simple</placeholder>
+ <cluster-config>core-site/hadoop.security.authentication</cluster-config>
+ <default-value>simple</default-value>
+ <required>true</required>
+ </parameter>
+ <parameter>
+ <name>yarn.resourcemanager.address</name>
+ <description>yarn.resourcemanager.address</description>
+ <label>yarn.resourcemanager.address</label>
+ <placeholder>http://sandbox.hortonworks.com:8050</placeholder>
+ <cluster-config>yarn-site/yarn.resourcemanager.address</cluster-config>
+ <required>true</required>
+ </parameter>
<parameter>
<name>view.conf.keyvalues</name>
<description>The key values that will be copied to hdfs connection configuration verbatim. Format : key1=value1;
- key2=value2</description>
+ key2=value2
+ </description>
<label>View Configs</label>
<required>false</required>
</parameter>
- <persistence>
- <entity>
- <class>org.apache.oozie.ambari.view.workflowmanager.model.Workflow</class>
- <id-property>id</id-property>
- </entity>
- <entity>
- <class>org.apache.oozie.ambari.view.assets.model.ActionAssetDefinition</class>
- <id-property>id</id-property>
- </entity>
- <entity>
- <class>org.apache.oozie.ambari.view.assets.model.ActionAsset</class>
- <id-property>id</id-property>
- </entity>
+ <persistence>
+ <entity>
+ <class>org.apache.oozie.ambari.view.workflowmanager.model.Workflow</class>
+ <id-property>id</id-property>
+ </entity>
+ <entity>
+ <class>org.apache.oozie.ambari.view.assets.model.ActionAssetDefinition</class>
+ <id-property>id</id-property>
+ </entity>
+ <entity>
+ <class>org.apache.oozie.ambari.view.assets.model.ActionAsset</class>
+ <id-property>id</id-property>
+ </entity>
- </persistence>
+ </persistence>
<!--<auto-instance>
<name>AUTO_OOZIE_VIEW</name>