Преглед на файлове

HUE-1045 [beeswax] Use kerberos instance as host in hive site

Use kerberos instance as host in hive site only when sasl is enabled.
Abraham Elmahrek преди 12 години
родител
ревизия
841c7fe4c0
променени са 2 файла, в които са добавени 59 реда и са изтрити 1 реда
  1. 2 1
      apps/beeswax/src/beeswax/hive_site.py
  2. 57 0
      apps/beeswax/src/beeswax/tests.py

+ 2 - 1
apps/beeswax/src/beeswax/hive_site.py

@@ -35,6 +35,7 @@ _HIVE_SITE_DICT = None                  # A dictionary of name/value config opti
 _METASTORE_LOC_CACHE = None
 
 _CNF_METASTORE_LOCAL = 'hive.metastore.local'
+_CNF_METASTORE_SASL = 'hive.metastore.sasl.enabled'
 _CNF_METASTORE_URIS = 'hive.metastore.uris'
 _CNF_METASTORE_KERBEROS_PRINCIPAL = 'hive.metastore.kerberos.principal'
 
@@ -86,7 +87,7 @@ def get_metastore():
         LOG.fatal('Cannot understand remote metastore uri "%s"' % (thrift_uri,))
       else:
         host, port = match.groups()
-      if len(kerberos_principal_components) == 3:
+      if str(get_conf().get(_CNF_METASTORE_SASL, 'false')).lower() == 'true' and len(kerberos_principal_components) == 3:
         host = kerberos_principal_components[1]
     _METASTORE_LOC_CACHE = (is_local, host, int(port), kerberos_principal)
   return _METASTORE_LOC_CACHE

+ 57 - 0
apps/beeswax/src/beeswax/tests.py

@@ -1362,6 +1362,63 @@ def test_hive_site():
       beeswax.conf.BEESWAX_HIVE_CONF_DIR = saved
     shutil.rmtree(tmpdir)
 
+def test_hive_site_sasl():
+  """Test hive-site parsing with sasl enabled"""
+  HIVE_SITE = """
+    <configuration>
+      <property>
+        <name>hive.metastore.local</name>
+        <value>false</value>
+      </property>
+
+      <property>
+        <name>hive.metastore.uris</name>
+        <value>thrift://darkside-1234:9999</value>
+      </property>
+
+      <property>
+        <name>hive.metastore.warehouse.dir</name>
+        <value>/abc</value>
+      </property>
+
+      <property>
+        <name>hive.metastore.kerberos.principal</name>
+        <value>test/test.com@TEST.COM</value>
+      </property>
+
+      <property>
+        <name>hive.metastore.sasl.enabled</name>
+        <value>true</value>
+      </property>
+    </configuration>
+  """
+
+  beeswax.hive_site.reset()
+  tmpdir = tempfile.mkdtemp()
+  saved = None
+  try:
+    file(os.path.join(tmpdir, 'hive-site.xml'), 'w').write(HIVE_SITE)
+
+    # We just replace the Beeswax conf variable
+    class Getter(object):
+      def get(self):
+        return tmpdir
+
+    saved = beeswax.conf.BEESWAX_HIVE_CONF_DIR
+    beeswax.conf.BEESWAX_HIVE_CONF_DIR = Getter()
+
+    is_local, host, port, kerberos_principal = beeswax.hive_site.get_metastore()
+    assert_false(is_local)
+    # Should look at kerberos instance for host.
+    assert_equal(host, 'test.com')
+    assert_equal(port, 9999)
+    assert_equal(beeswax.hive_site.get_conf()['hive.metastore.warehouse.dir'], u'/abc')
+    assert_equal(kerberos_principal, 'test/test.com@TEST.COM')
+  finally:
+    if saved is not None:
+      beeswax.conf.BEESWAX_HIVE_CONF_DIR = saved
+    shutil.rmtree(tmpdir)
+
 def test_collapse_whitespace():
   assert_equal("", collapse_whitespace("\t\n\n  \n\t \n"))
   assert_equal("x", collapse_whitespace("\t\nx\n  \n\t \n"))