Hive CLI 和 Hiveserver2 不一致的 Metastore

Hive CLI and Hiveserver2 Inconsistent Metastore

我正在尝试修改现有的 Azure HDInsight 集群以指向现有的 Hive Metastore(托管在 MSSQL 实例上)。我在 hive-site.xml 中更改了以下参数以指向现有的 Metastore:

"javax.jdo.option.ConnectionDriverName" : "com.microsoft.sqlserver.jdbc.SQLServerDriver", 
"javax.jdo.option.ConnectionUserName" : "<<user>>",     
"javax.jdo.option.ConnectionPassword" : "<<password>>",   
"javax.jdo.option.ConnectionURL" : "jdbc:sqlserver://<<server>>.database.windows.net:1433;database=HiveMetaStoreEast;user=<<user>>;password=<<password>>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;" 

似乎 有点奏效,因为我可以通过 Beeline 访问 Hive CLI 和 Hiveserver2。奇怪的是 show databases; 根据所使用的客户端输出不同的结果。我读到从 Hive 0.14(我是 运行)开始,使用 hiveserver2-site.xml 等可以为 Hive/Hiveserver2 提供更精细的配置。我尝试在中设置 hive.metastore.uris 参数hiveserver2-site.xml 以匹配它在 hive-site.xml 中显示的内容,但仍然得到相同的奇怪结果。

总而言之,我如何确定 Hiveserver2 和 Hive CLI 进程指向相同(且正确)的 Metastore URI?

发布这篇文章后,我在 Hortonworks 网站上发现了一个类似的帖子:http://hortonworks.com/community/forums/topic/configuration-of-hiveserver2-to-use-a-remote-metastore-server/#post-81960

看起来 startHiveserver2.sh.j2 启动脚本驻留在此处(在我的 Hive 节点上)/var/lib/ambari-agent/cache/common-services/HIVE/0.12.0.2.0/package/templates/ 包含空字符串 CLI 覆盖 hive.metastore.uris 参数,我相信它会强制 Hiveserver2 启动在本地 Metastore 模式下,因此在 Hive CLI(使用远程 URI)和 Beeline(使用本地)之间创建不一致的视图。

请参阅下面解决不一致的补丁:

--- startHiveserver2.sh.j2  2015-11-25 04:06:15.357996439 +0000
+++ /var/lib/ambari-server/resources/common-services/HIVE/0.12.0.2.0/package/templates/startHiveserver2.sh.j2   2015-11-25 03:43:29.837452851 +0000
@@ -20,5 +20,6 @@
#

HIVE_SERVER2_OPTS=" -hiveconf hive.log.file=hiveserver2.log -hiveconf hive.log.dir="
-HIVE_CONF_DIR= {{hive_bin}}/hiveserver2 -hiveconf hive.metastore.uris=" " ${HIVE_SERVER2_OPTS} >  2>  &
+#HIVE_CONF_DIR= {{hive_bin}}/hiveserver2 -hiveconf hive.metastore.uris=" " ${HIVE_SERVER2_OPTS} >  2>  &
+HIVE_CONF_DIR= {{hive_bin}}/hiveserver2 ${HIVE_SERVER2_OPTS} >  2>  &
echo $!|cat>