在今天重新安装hive之前,一直以为这一个配置文件所表达的是hive和mysql之间的关系。直到今天想着好好去官网看一下配置文件进行安装的时候才发现,之前对于hive三种模式的安装理解问题很大。
我们点击如下链接来到官网的对于安装的介绍网页。
在这里对于他的介绍,我们都知道hive表的元数据是存放在关系型数据库中,一般我们会和mysql进行整合(即将mysql连接jar包拷贝至HIVE_HOME/lib目录下)所以图片的上半部分就是针对元数据的存放路径。下半部分图片介绍了hive的服务端和客户端一体模式下的配置,你会发现,hive.metastore.local这个参数,我以前一直将其和元数据存放搞混,实际上这个参数配置的是对于hive服务端和客户端之间的关系,如果为true,也不需要配置uri因为实在一起,直接找自己去连接即可。
那么我们对于一个最简单的本地多用户模式的配置应该如下
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_local/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node01:3306/hive_local?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
在这边就不对远程一体模式再过多赘述,这个一体一定要记得是hive服务端和客户端的一体!所以配置就跟上面的配置如出一辙。我们主要来看远程分开模式的配置,官网截图如下:
在这边我们看到非常有意思,这个我们讨论的主要参数从头到尾都被官网打上了一个no longer needed的标志!在这边只需要设置metasrore的uris就可以了。然后主要看我上面荧光笔标识出来的地方,在服务端你设置的HDFS存储路径是hive表的默认路径,而客户端这边也写上了同样的配置参数,但是介绍不同,存放非外部hive表的数据。所以我们最好还是将这两个路径位置设置成一样的,以防止之后你在创建外部表的时候没有指定路径导致数据找不到以及误操作(删除)带来的影响。
如下是远程分开模式的配置案例。
客户端
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote2/warehouse</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node03:9083</value>
</property>
</configuration>
服务端
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote2/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node01:3306/hive_remote2?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
很早以前安装hive的时候还会去将HIVE_HOME/lib目录下的jline的jar包和HADOOP_PREFIX的jar包版本做个同步,现在也没有报错,不过还是习惯这样操作了。后期出了别的问题继续更新这个文章。