0

我正在尝试修改现有的 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 开始(我正在运行),更精细的配置可用于 Hive/Hiveserver2hiveserver2-site.xml等。我尝试将hive.metastore.uris参数设置hiveserver2-site.xml为匹配它显示的内容,hive-site.xml但仍然得到相同的奇怪结果。

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

4

1 回答 1

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/包含一个空字符串 CLI 覆盖hive.metastore.uris参数,我认为这会强制 Hiveserver2 以本地元存储模式启动,因此在 Hive CLI(使用远程 URI)和直线(使用本地)。

有关解决不一致问题的补丁,请参见下文:

--- 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
于 2015-11-25T05:04:54.790 回答