소스 검색

AMBARI-6709 After Namenode is moved via Ambari the hive metastore namenode hostname is not updated with the new namenode hostname (Dmytro Shkvyra via dsen)

Dmytro Sen 10 년 전
부모
커밋
26d2c9f6e0

+ 13 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/hive_service.py

@@ -22,6 +22,7 @@ from resource_management import *
 import socket
 import sys
 import time
+from resource_management.core.shell import checked_call
 
 def hive_service(
     name,
@@ -41,6 +42,9 @@ def hive_service(
   process_id_exists = format("ls {pid_file} >/dev/null 2>&1 && ps `cat {pid_file}` >/dev/null 2>&1")
   
   if action == 'start':
+    if name == 'hiveserver2':
+      check_fs_root()
+
     demon_cmd = format("{cmd}")
     
     Execute(demon_cmd,
@@ -95,3 +99,12 @@ def hive_service(
     Execute(demon_cmd,
             not_if = format("! ({process_id_exists})")
     )
+
+def check_fs_root():
+  import params  
+  fs_root_url = format("{fs_root}{hive_apps_whs_dir}")
+  cmd = "/usr/lib/hive/bin/metatool -listFSRoot 2>/dev/null | grep hdfs://"
+  code, out = checked_call(cmd, user=params.hive_user)
+  if fs_root_url.strip() != out.strip():
+    cmd = format("/usr/lib/hive/bin/metatool -updateLocation {fs_root}{hive_apps_whs_dir} {out}")
+    Execute(cmd, user=params.hive_user)

+ 1 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/params.py

@@ -66,6 +66,7 @@ smoke_test_path = format("{tmp_dir}/hiveserver2Smoke.sh")
 smoke_user_keytab = config['configurations']['hadoop-env']['smokeuser_keytab']
 
 _authentication = config['configurations']['core-site']['hadoop.security.authentication']
+fs_root = config['configurations']['core-site']['fs.defaultFS']
 security_enabled = ( not is_empty(_authentication) and _authentication == 'kerberos')
 
 kinit_path_local = functions.get_kinit_path(["/usr/bin", "/usr/kerberos/bin", "/usr/sbin"])

+ 11 - 6
ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py

@@ -46,9 +46,10 @@ class TestHiveServer(RMFTestCase):
                               content='log4jproperties\nline2'
     )
     self.assertNoMoreResources()
-  
+
+  @patch("hive_service.check_fs_root")
   @patch("socket.socket")
-  def test_start_default(self, socket_mock):
+  def test_start_default(self, socket_mock, check_fs_root_mock):
     s = socket_mock.return_value
     
     self.executeScript("2.0.6/services/HIVE/package/scripts/hive_server.py",
@@ -129,6 +130,7 @@ class TestHiveServer(RMFTestCase):
     )
 
     self.assertNoMoreResources()
+    self.assertTrue(check_fs_root_mock.called)
     self.assertTrue(socket_mock.called)
     self.assertTrue(s.close.called)
 
@@ -171,10 +173,11 @@ class TestHiveServer(RMFTestCase):
     )
     self.assertNoMoreResources()
 
+  @patch("hive_service.check_fs_root")
   @patch("socket.socket")
-  def test_start_secured(self, socket_mock):
+  def test_start_secured(self, socket_mock, check_fs_root_mock):
     s = socket_mock.return_value
-    
+
     self.executeScript("2.0.6/services/HIVE/package/scripts/hive_server.py",
                        classname = "HiveServer",
                        command = "start",
@@ -206,6 +209,7 @@ class TestHiveServer(RMFTestCase):
     )
 
     self.assertNoMoreResources()
+    self.assertTrue(check_fs_root_mock.called)
     self.assertTrue(socket_mock.called)
     self.assertTrue(s.close.called)
 
@@ -414,10 +418,11 @@ class TestHiveServer(RMFTestCase):
       owner = 'hive',
       group = 'hadoop',
     )
-    
+
+  @patch("hive_service.check_fs_root")
   @patch("time.time")
   @patch("socket.socket")
-  def test_socket_timeout(self, socket_mock, time_mock):        
+  def test_socket_timeout(self, socket_mock, time_mock, check_fs_root_mock):
     s = socket_mock.return_value
     s.connect = MagicMock()    
     s.connect.side_effect = socket.error("")