浏览代码

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