hiveserver2和metastore

大部分内容转载:

     https://blog.csdn.net/qq_40990732/article/details/80914873

     https://blog.csdn.net/tp15868352616/article/details/80891057

     https://blog.csdn.net/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在不同的进程内,可能是不同的机器,该模式需要将hive.metastore.local设置为false,将hive.metastore.uris设置为metastore服务器URL,

        远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。将metadata作为一个单独的服务进行启动。各种客户端通过beeline来连接,连接之前无需知道数据库的密码。

        仅连接远程的mysql并不能称之为“远程模式”,是否远程指的是metastore和hive服务是否在同一进程内.

        开启metastore服务就只需要开启一次就好,避免资源浪费!

 

hive-site.xml的配置:


#hive metastore的一些配置(远程模式)

hive.metastore.warehouse.dir
/user/hive/warehouse


hive.metastore.local
false


hive.metastore.uris
thrift://hadoop03:9083


javax.jdo.option.ConnectionURL
jdbc:mysql://hadoop03:3306/hive?createDatabaseIfNotExist=true


javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver


javax.jdo.option.ConnectionUserName
root


javax.jdo.option.ConnectionPassword
root

#hive.server2.thrift的一些配置

hive.server2.thrift.bind.host
hadoop03
Bind host on which to run the HiveServer2 Thrift service.


hive.server2.thrift.port
10000
Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.


hive.server2.thrift.http.port
10001
Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'http'.

#用户信息

hive.server2.thrift.client.user
hadoop
Username to use against thrift client


hive.server2.thrift.client.password
hadoop
Password to use against thrift client

 

配置日志存放位置:配置文件为hive-log4j.properties.template

修改存放路径:hive.log.dir=${HIVE_HOME}/logs/hive

或者修改为:

 

hive.log.dir=${HIVE_HOME}/logs/hive/${user.name}  

这样对于同一台机器不同的用户可以把日志动态写入各自用户目录下,前提是${HIVE_HOME}/logs/hive权限足够:rwx

重点:hive-log4j.properties.template要修改为hive-log4j.properties不然无法识别。

 

配置hiveserver2和metastore的启动脚本start-hiveservice-all.sh(自己创建的一个shell):  

添加执行权限:chmod +x  start-hiveservice-all.sh

#!/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 的启动脚本.

 

你可能感兴趣的:(hive)