大部分内容转载:
/qq_40990732/article/details/80914873
/tp15868352616/article/details/80891057
/qq_35440040/article/details/82462269
metastore服务实际上就是一种thrift服务,通过它我们可以获取到hive元数据,并且通过thrift获取原数据的方式,屏蔽了数据库访问需要驱动,url,用户名,密码等等细节。
HiveServer2(HS2)是一个服务端接口,使远程客户端可以执行对Hive的查询并返回结果。
一般来讲,我们认为HiveServer2是用来提交查询的,也就是用来访问数据的。
而MetaStore才是用来访问元数据的。
metaStore,默认存储在 derby 数据库中,但是derby数据库不能支持我们开启多个窗口,所以我们会将metaStore存放到MySql中;
metaStore存储了hive的databases,tables,partition等信息。hiveQL所有的语句都会连接到MySql查询元数据信息!
metaStore server 作用:
bin/hive --访问--> metaStore server --访问-->MySQL
bin/beeline --访问-->hiveServer2 --访问--> metaStore server --访问--> MySQL
metaStore 有3中开启方式:
1. 默认开启方式:
没有配置metaStore的时候,每当开启bin/hive或者;或者开启hiveServer2的时候,都会在内部启动一个metastore。
嵌入式服务;资源比较浪费,如果开启多个窗口,就会存在多个metastore server
2. local mataStore(本地)
不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以同一台机器,也可以在远程机器上。
这种方式是一个多用户的模式,运行多个用户client连接到一个数据库中。这种方式一般作为公司内部同时使用Hive。每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者需要知道MySQL的用户名和密码才行。
开启metastore服务就只需要开启一次就好,避免资源浪费!
3. Remote Metastore(远程)
Hive服务和metastore在不同的进程内,可能是不同的机器,该模式需要将设置为false,将设置为metastore服务器URL,
远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。将metadata作为一个单独的服务进行启动。各种客户端通过beeline来连接,连接之前无需知道数据库的密码。
仅连接远程的mysql并不能称之为“远程模式”,是否远程指的是metastore和hive服务是否在同一进程内.
开启metastore服务就只需要开启一次就好,避免资源浪费!
的配置:
<configuration>
#hive metastore的一些配置(远程模式)
<property>
<name></name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name></name>
<value>false</value>
</property>
<property>
<name></name>
<value>thrift://hadoop03:9083</value>
</property>
<property>
<name></name>
<value>jdbc:mysql://hadoop03:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name></name>
<value></value>
</property>
<property>
<name></name>
<value>root</value>
</property>
<property>
<name></name>
<value>root</value>
</property>#hive.的一些配置
<property>
<name>hive.</name>
<value>hadoop03</value>
<description>Bind host on which to run the HiveServer2 Thrift service.</description>
</property>
<property>
<name>hive.</name>
<value>10000</value>
<description>Port number of HiveServer2 Thrift interface when hive. is 'binary'.</description>
</property>
<property>
<name>hive.</name>
<value>10001</value>
<description>Port number of HiveServer2 Thrift interface when hive. is 'http'.</description>
</property>
#用户信息
<property>
<name>hive.</name>
<value>hadoop</value>
<description>Username to use against thrift client</description>
</property>
<property>
<name>hive.</name>
<value>hadoop</value>
<description>Password to use against thrift client</description>
</property>
</configuration>
配置日志存放位置:配置文件为
修改存放路径:=${HIVE_HOME}/logs/hive
或者修改为:
=${HIVE_HOME}/logs/hive/${}
这样对于同一台机器不同的用户可以把日志动态写入各自用户目录下,前提是${HIVE_HOME}/logs/hive权限足够:rwx
重点:要修改为不然无法识别。
配置hiveserver2和metastore的启动脚本(自己创建的一个shell):
添加执行权限:chmod +x
#!/bin/bash
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
#hive_home目录
HIVE_HOME=`cd $bin;cd ../;pwd`
#服务启动时间
DATE_STR=`/bin/date +%Y-%m-%d-%H-%M-%S`
#日志文件名称
HIVE_SERVER_LOG=${HIVE_HOME}/logs/start-hiveService-all-${DATE_STR}.log
#启动服务
nohup $bin/hive --service metastore >${HIVE_SERVER_LOG} 2>&1 &
nohup $bin/hive --service hiveserver2 >${HIVE_SERVER_LOG} 2>&1 &
同时也可以单独设置metastore和hiveserver2 的启动脚本.