hive三种元数据存储方式

hive本身不存储数据,借助hdfs存储数据,hive和关系型数据库一样是有表结构的,这些信息hive也存储在第三方软件中,如derby、mysql。

根据元数据的存储方式,hive的部署可以分为三种:

一,local模式

采用内置的derby数据库存储元数据,这种方式只能有一个客户端访问hive,多个客户访问会报错,适合开发测试。

hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中。

配置hive-site.xml:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>APP</value>
  <description>username to use against metastore database</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>mine</value>
  <description>password to use against metastore database</description>
</property>
 
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>file:///Users/micmiu/tmp/hive/warehouse</value>
  <description>unit test data goes in here on your local filesystem</description>
</property>

执行初始化命令:

schematool -dbType derby -initSchema

查看初始化后的信息:

 schematool -dbType derby -info

二,本地模式

使用mysql存储元数据。

hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以在同一台机器上,也可以在远程机器上。

该模式配置hive-site.xml如下:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://127.0.0.1:3306/hivedb?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>micmiu</value>
  <description>password to use against metastore database</description>
</property>
 
<property>
  <name>hive.metastore.warehouse.dir</name>
  <!-- base hdfs path -->
  <value>/user/hive/warehouse</value>
  <description>location of default database for the warehouse</description>

需要把mysql的驱动包copy到目录 <HIVE_HOME>/lib 中

如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema

三,远程模式

使用mysql存储元数据,客户端不直接访问mysql,而是通过metaserver元数据服务访问MySQL,元数据服务允许并发访问,生产环境都是这种模式。

这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。

安装mysql的服务器为slave1

安装hive sevrver服务器为master

<configuration>
 
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://slave1:3306/hive_remote?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>hive</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>
 
<property>
  <name>hive.metastore.local</name>         #模式改成false,也就是使用远程模式,默认情况下是true,也就是使用本地模式
  <value>false</value>
</property>
 
<property>
  <name>hive.metastore.uris</name>
  <value>thrift://master:9083</value>     #master为安装hive或者启动metastore服务的服务器地址
</property>
 
</configuration>

上面把客户端和服务端配置在一起,生产环境中,通常客户端和服务端是分开的,配置也要分开。

服务端配置:

<configuration>
 
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://slave1:3306/hive_remote?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>hive</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>
</configuration>

客户端配置:

<configuration>
 
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
</property>
<property>
  <name>hive.metastore.local</name>         #模式改成false,也就是使用远程模式,默认情况下是true,也就是使用本地模式
  <value>false</value>
</property>
 
<property>
  <name>hive.metastore.uris</name>
  <value>thrift://master:9083</value>     #master为安装hive或者启动metastore服务的服务器地址
</property>
 
</configuration>
  • 需要把mysql的驱动包copy到目录 <HIVE_HOME>/lib 中

  • 如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema

  • hive metastore 服务端启动命令:hive --service metastore -p <port_num>

  • 如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 ,注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。

  • 如果要使用jdbc的方式连接,需要在服务器启动hiveserver2服务,该服务或者metastore服务都是使用thrift协议,监听10000端口。

  • 启动hiveserver2:hive --service hiveserver2 & 或者 hiveservre2 & 或者 nohup hiveserver2 1> xxx.log 2> xxx_err.log &

四,总结

远程的mysql并不能称之为“远程模式”,是否远程指的是metastore和hive服务是否在同一进程内,换句话说,“远”指的是metastore和hive服务离得“远”。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值