فهرست منبع

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"))