Hive CLI和Hiveserver2 Inconsistent Metastore

时间:2015-11-25 03:12:30

标签: azure hadoop hive hdinsight ambari

我正在尝试修改现有的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?

1 个答案:

答案 0 :(得分:0)

发布此消息后,我在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/包含hive.metastore.uris参数的空字符串CLI覆盖,我相信强制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=$5"
-HIVE_CONF_DIR=$4 {{hive_bin}}/hiveserver2 -hiveconf hive.metastore.uris=" " ${HIVE_SERVER2_OPTS} > $1 2> $2 &
+#HIVE_CONF_DIR=$4 {{hive_bin}}/hiveserver2 -hiveconf hive.metastore.uris=" " ${HIVE_SERVER2_OPTS} > $1 2> $2 &
+HIVE_CONF_DIR=$4 {{hive_bin}}/hiveserver2 ${HIVE_SERVER2_OPTS} > $1 2> $2 &
echo $!|cat>$3