Przeglądaj źródła

HADOOP-2898. Provide an option to specify a port range for Hadoop services provisioned by HOD. Contributed by Peeyush Bishnoi.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/trunk@747332 13f79535-47bb-0310-9956-ffa450edef68
Hemanth Yamijala 16 lat temu
rodzic
commit
aa5166cb57

+ 4 - 0
src/contrib/hod/CHANGES.txt

@@ -12,6 +12,10 @@ Trunk (unreleased changes)
 
   IMPROVEMENTS
 
+    HADOOP-2898. Provide an option to specify a port range for
+    Hadoop services provisioned by HOD.
+    (Peeyush Bishnoi via yhemanth)
+
   OPTIMIZATIONS
 
   BUG FIXES

+ 3 - 0
src/contrib/hod/bin/hod

@@ -350,6 +350,9 @@ defList = { 'hod' : (
              ('http-port-range', 'range', 'HTTP port range n-m.',
               False, None, True, True),
               
+             ('hadoop-port-range', 'range', 'Hadoop port range n-m.',
+              False, None, True, True),  
+            
              ('service-id', 'string', 'Service ID.',
               False, None, False, True),
               

+ 3 - 0
src/contrib/hod/bin/hodring

@@ -107,6 +107,9 @@ defList = { 'hodring' : (
                
              ('http-port-range', 'range', 'HTTP port range n-m.',
               False, None, True, True),
+      
+             ('hadoop-port-range', 'range', 'Hadoop port range n-m.',
+              False, None, True, True),
                
              ('command', 'string', 'Command for hodring to run.',
               False, None, False, True),

+ 3 - 0
src/contrib/hod/bin/ringmaster

@@ -244,6 +244,9 @@ defList = { 'ringmaster' : (
                
              ('http-port-range', 'range', 'HTTP port range n-m.',
               False, None, True, True),
+  
+             ('hadoop-port-range', 'range', 'Hadoop port range n-m.',
+              False, None, True, True),
                
              ('command', 'string', 'Command for hodring to run.',
               False, None, False, True),

+ 1 - 0
src/contrib/hod/conf/hodrc

@@ -24,6 +24,7 @@ register                        = True
 java-home                       = ${JAVA_HOME}
 http-port-range                 = 8000-9000
 xrs-port-range                  = 32768-65536
+hadoop-port-range               = 50000-60000
 debug                           = 3
 
 [resource_manager]

+ 6 - 4
src/contrib/hod/hodlib/HodRing/hodRing.py

@@ -210,7 +210,7 @@ def createMRSystemDirectoryManager(dict, log):
 class HadoopCommand:
   """Runs a single hadoop command"""
     
-  def __init__(self, id, desc, tempdir, tardir, log, javahome, 
+  def __init__(self, id, desc, tempdir, tardir, hadoopportrange, log, javahome, 
                 mrSysDir, restart=False):
     self.desc = desc
     self.log = log
@@ -230,6 +230,7 @@ class HadoopCommand:
     self.child = None
     self.restart = restart
     self.filledInKeyVals = []
+    self.__hadoopPortRange = hadoopportrange
     self._createWorkDirs()
     self._createHadoopSiteXml()
     self._createHadoopLogDir()
@@ -253,8 +254,9 @@ class HadoopCommand:
   def createXML(self, doc, attr, topElement, final):
     for k,v in attr.iteritems():
       self.log.debug('_createHadoopSiteXml: ' + str(k) + " " + str(v))
+      lowport, highport = self.__hadoopPortRange
       if ( v == "fillinport" ):
-        v = "%d" % (ServiceUtil.getUniqRandomPort(low=50000, log=self.log))
+        v = "%d" % (ServiceUtil.getUniqRandomPort(low=lowport, high=highport, log=self.log))
 
       keyvalpair = ''
       if isinstance(v, (tuple, list)):
@@ -270,7 +272,7 @@ class HadoopCommand:
         self.filledInKeyVals.append(keyvalpair)
 	
       if ( v == "fillinhostport"):
-        port = "%d" % (ServiceUtil.getUniqRandomPort(low=50000, log=self.log))
+        port = "%d" % (ServiceUtil.getUniqRandomPort(low=lowport, high=highport, log=self.log))
         self.log.debug('Setting hostname to: %s' % local_fqdn())
         v = local_fqdn() + ':' + port
       
@@ -613,7 +615,7 @@ class HodRing(hodBaseService):
       mrSysDir = getMapredSystemDirectory(self._cfg['mapred-system-dir-root'],
                           self._cfg['userid'], self._cfg['service-id'])
       self.log.debug('mrsysdir is %s' % mrSysDir)
-      cmd = HadoopCommand(id, desc, self.__tempDir, self.__pkgDir, self.log, 
+      cmd = HadoopCommand(id, desc, self.__tempDir, self.__pkgDir, self._cfg['hadoop-port-range'], self.log, 
                           self._cfg['java-home'], mrSysDir, restart)
     
       self.__hadoopLogDirs.append(cmd.logdir)

+ 1 - 1
src/contrib/hod/testing/testHodRing.py

@@ -68,7 +68,7 @@ class test_HadoopCommand(unittest.TestCase):
     #   that pkgdir is specified at the time of object creation.
     # END OF TODO
     self.hadoopCommand = HadoopCommand(self.id, self.desc, self.tempDir,
-                          self.pkgDir, self.log, self.javaHome,
+                          self.pkgDir, (50000, 60000), self.log, self.javaHome,
                           self.mrSysDir, restart=True)
     self.hadoopSite = os.path.join( self.hadoopCommand.confdir,
                                     'hadoop-site.xml')

+ 4 - 0
src/docs/src/documentation/content/xdocs/hod_config_guide.xml

@@ -331,6 +331,10 @@
                     be used by HOD to upload logs if a HDFS URL is specified in log-destination-uri
                     option. Note that this is useful if the users are using a tarball whose version
                     may differ from the external, static HDFS version.</li>
+
+          <li>hadoop-port-range: Range of ports, among which an available port shall
+                             be picked for use to run a Hadoop Service, like JobTracker or TaskTracker. </li>
+          
                                       
         </ul>
       </section>