Browse Source

AMBARI-9438. Add configuration and monitor section for HDFS-NFS gateway (Brandon Li via alejandro)

Alejandro Fernandez 10 years ago
parent
commit
70bb8db844

+ 2 - 1
ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/configuration/hadoop-env.xml

@@ -131,6 +131,7 @@ HADOOP_JOBTRACKER_OPTS="-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC
 
 HADOOP_TASKTRACKER_OPTS="-server -Xmx{{ttnode_heapsize}} -Dhadoop.security.logger=ERROR,console -Dmapred.audit.logger=ERROR,console ${HADOOP_TASKTRACKER_OPTS}"
 HADOOP_DATANODE_OPTS="-Xmx{{dtnode_heapsize}} -Dhadoop.security.logger=ERROR,DRFAS ${HADOOP_DATANODE_OPTS}"
+HADOOP_NFS3_OPTS="-Xmx{{nfsgateway_heapsize}} -Dhadoop.security.logger=ERROR,DRFAS ${HADOOP_NFS3_OPTS}"
 HADOOP_BALANCER_OPTS="-server -Xmx{{hadoop_heapsize}}m ${HADOOP_BALANCER_OPTS}"
 
 export HADOOP_SECONDARYNAMENODE_OPTS="-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -XX:PermSize={{namenode_opt_permsize}} -XX:MaxPermSize={{namenode_opt_maxpermsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ${HADOOP_NAMENODE_INIT_HEAPSIZE} -Xmx{{namenode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_SECONDARYNAMENODE_OPTS}"
@@ -207,4 +208,4 @@ export JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:/usr/lib/hadoop/lib/native/Linux-a
     </value>
   </property>
   
-</configuration>
+</configuration>

+ 16 - 0
ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/configuration/hdfs-site.xml

@@ -428,4 +428,20 @@
     </description>
   </property>
 
+  <property>
+    <name>nfs.dump.dir</name>
+    <value>/tmp/.hdfs-nfs</value>
+    <description>
+      This directory is used to temporarily save out-of-order writes before
+      writing to HDFS. For each file, the out-of-order writes are dumped after
+      they are accumulated to exceed certain threshold (e.g., 1MB) in memory.
+      One needs to make sure the directory has enough space.
+    </description>
+  </property>
+
+  <property>
+    <name>nfs.exports.allowed.hosts</name>
+    <value>* rw</value>
+  </property>
+
 </configuration>

+ 1 - 0
ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py

@@ -319,6 +319,7 @@ jtnode_heapsize =  "1024m"
 ttnode_heapsize = "1024m"
 
 dtnode_heapsize = config['configurations']['hadoop-env']['dtnode_heapsize']
+nfsgateway_heapsize = config['configurations']['hadoop-env']['nfsgateway_heapsize']
 mapred_pid_dir_prefix = default("/configurations/mapred-env/mapred_pid_dir_prefix","/var/run/hadoop-mapreduce")
 mapred_log_dir_prefix = default("/configurations/mapred-env/mapred_log_dir_prefix","/var/log/hadoop-mapreduce")
 

+ 64 - 0
ambari-web/app/data/HDP2/site_properties.js

@@ -110,6 +110,39 @@ var hdp2properties = [
     "serviceName": "HDFS",
     "filename": "hdfs-site.xml"
   },
+  {
+    "id": "site property",
+    "name": "nfs.dump.dir",
+    "displayName": "NFSGateway dump directory",
+    "defaultDirectory": "/tmp/.hdfs-nfs",
+    "displayType": "directory",
+    "category": "NFS_GATEWAY",
+    "serviceName": "HDFS",
+    "filename": "hdfs-site.xml",
+    "index": 1
+  },
+  {
+    "id": "site property",
+    "name": "dfs.namenode.accesstime.precision",
+    "displayName": "Access time precision",
+    "defaultValue": "0",
+    "displayType": "long",
+    "category": "NFS_GATEWAY",
+    "serviceName": "HDFS",
+    "filename": "hdfs-site.xml",
+    "index": 2
+  },
+  {
+    "id": "site property",
+    "name": "nfs.exports.allowed.hosts",
+    "displayName": "Allowed hosts",
+    "defaultValue": "* rw",
+    "displayType": "string",
+    "category": "NFS_GATEWAY",
+    "serviceName": "HDFS",
+    "filename": "hdfs-site.xml",
+    "index": 3
+  },
   {
     "id": "site property",
     "name": "dfs.replication",
@@ -2219,6 +2252,37 @@ var hdp2properties = [
     "category": "DATANODE",
     "index": 2
   },
+  {
+    "id": "puppet var",
+    "name": "nfsgateway_hosts", //not in the schema. For UI purpose
+    "displayName": "NFSGateway hosts",
+    "value": "",
+    "defaultValue": "",
+    "description": "The hosts that have been assigned to run NFSGateway",
+    "displayType": "slaveHosts",
+    "isRequired": false,
+    "isOverridable": false,
+    "isVisible": true,
+    "isRequiredByAgent": false,
+    "serviceName": "HDFS",
+    "filename": "hadoop-env.xml",
+    "category": "NFS_GATEWAY",
+    "index": 0
+  },
+    {
+    "id": "puppet var",
+    "name": "nfsgateway_heapsize",
+    "displayName": "NFSGateway maximum Java heap size",
+    "description": "Maximum Java heap size for NFSGateway (Java option -Xmx)",
+    "defaultValue": "1024",
+    "displayType": "int",
+    "unit": "MB",
+    "isVisible": true,
+    "serviceName": "HDFS",
+    "filename": "hadoop-env.xml",
+    "category": "NFS_GATEWAY",
+    "index": 1
+  },
   {
     "id": "puppet var",
     "name": "hadoop_heapsize",

+ 1 - 0
ambari-web/app/messages.js

@@ -2278,6 +2278,7 @@ Em.I18n.translations = {
   'dashboard.services.hdfs.totalFilesAndDirs':'Total Files + Directories',
   'dashboard.services.hdfs.datanodes':'DataNodes',
   'dashboard.services.hdfs.datanodecounts':'DataNodes Status',
+  'dashboard.services.hdfs.nfsgateways':'NFSGateways',
   'dashboard.services.hdfs.version':'Version',
   'dashboard.services.hdfs.nameNodeWebUI':'NameNode Web UI',
   'dashboard.services.hdfs.nodes.live':'live',

+ 3 - 0
ambari-web/app/models/service/hdfs.js

@@ -31,6 +31,9 @@ App.HDFSService = App.Service.extend({
   dataNodesStarted: DS.attr('number'),
   dataNodesInstalled: DS.attr('number'),
   dataNodesTotal: DS.attr('number'),
+  nfsGatewaysStarted: DS.attr('number'),
+  nfsGatewaysInstalled: DS.attr('number'),
+  nfsGatewaysTotal: DS.attr('number'),
   journalNodes: function () {
     return this.get('hostComponents').filterProperty('componentName', 'JOURNALNODE');
   }.property('hostComponents.@each'),

+ 3 - 0
ambari-web/app/models/service_config.js

@@ -341,6 +341,9 @@ App.ServiceConfigProperty = Em.Object.extend({
       case 'datanode_hosts':
         this.set('value', slaveComponentHostsInDB.findProperty('componentName', 'DATANODE').hosts.mapProperty('hostName'));
         break;
+      case 'nfsgateway_hosts':
+        this.set('value', slaveComponentHostsInDB.findProperty('componentName', 'NFS_GATEWAY').hosts.mapProperty('hostName'));
+        break;
       case 'hs_host':
         this.set('value', masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName'));
         break;

+ 2 - 1
ambari-web/app/models/stack_service.js

@@ -224,7 +224,8 @@ App.StackService.configCategories = function () {
         App.ServiceConfigCategory.create({ name: 'NAMENODE', displayName: 'NameNode'}),
         App.ServiceConfigCategory.create({ name: 'SECONDARY_NAMENODE', displayName: 'Secondary NameNode'}),
         App.ServiceConfigCategory.create({ name: 'DATANODE', displayName: 'DataNode'}),
-        App.ServiceConfigCategory.create({ name: 'General', displayName: 'General'})
+        App.ServiceConfigCategory.create({ name: 'General', displayName: 'General'}),
+        App.ServiceConfigCategory.create({ name: 'NFS_GATEWAY', displayName: 'NFS Gateway'})
       ]);
       break;
     case 'GLUSTERFS':

+ 12 - 0
ambari-web/app/templates/main/service/services/hdfs.hbs

@@ -116,3 +116,15 @@
     {{view.safeModeStatus}}
   </td>
 </tr>
+<!-- NFS Gateway -->
+<tr>
+  <td><a href="#" {{action filterHosts view.nfsGatewayComponent}}>{{t dashboard.services.hdfs.nfsgateways}}</a></td>
+  <!--td>
+    <span>
+      {{#view App.ComponentLiveTextView liveComponentsBinding="view.service.nfsGatewaysStarted" totalComponentsBinding="view.service.nfsGatewaysTotal"}}
+        {{view.liveComponents}}/{{view.totalComponents}}
+      {{/view}}
+    </span>
+      {{t common.started}}
+  </td-->
+</tr>

+ 14 - 0
ambari-web/app/views/main/service/services/hdfs.js

@@ -70,6 +70,13 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
     return this.get('service.dataNodesInstalled');
   }.property('service.dataNodesInstalled'),
 
+  nfsGatewaysLive: function () {
+    return this.get('service.nfsGatewaysStarted');
+  }.property('service.nfsGatewaysStarted'),
+  nfsGatewaysDead: function () {
+    return this.get('service.nfsGatewaysInstalled');
+  }.property('service.nfsGatewaysInstalled'),
+
   showJournalNodes: function () {
     return this.get('service.journalNodes.length') > 0;
   }.property('service.journalNodes.length'),
@@ -184,6 +191,13 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
     //return this.get('service.dataNodes').objectAt(0);
   }.property(),
 
+  nfsGatewayComponent: function () {
+    return Em.Object.create({
+      componentName: 'NFS_GATEWAY'
+    });
+    //return this.get('service.dataNodes').objectAt(0);
+  }.property(),
+  
   journalNodeComponent: function () {
     return this.get('service.journalNodes').objectAt(0);
   }.property(),