hive有以下三种搭建模式
- 本地模式derby
使用derby存储时,会在当前目录生成一个derby.log文件和一个metastore_db目录。在同一个目录下同时只能有一个用户访问,在更换目录后,会因为没有以上两个文件,导致无法连接之前的数据库。
hive-2.3.4/conf/hive-default.xml.template为hive-2.3.4/conf/hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
- 单机模式
该模式下需要启动一个数据库,我使用的是mysql数据库
先安装mysql服务
安装mysql:yum install mysql-server
启动服务:service mysqld start
修改权限,让外界可以访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
将其它用户删除
delete from user where host <> '%'
flush privileges,刷新配置
配置如下
hive-2.3.4/conf/hive-default.xml.template为hive-2.3.4/conf/hive-site.xml
<!-- hdfs存储路径 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- 数据库URL,以及数据库名,在数据库不存在时创建 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1: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>root</value>
</property>
<!-- 数据库密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
配置完成后,初始化
schematool -dbType mysql -initSchema
启动hive
hive
- 多用户模式
配置有两种方式
3.1 remote一体
服务都在node2服务器上,配置如下:
hive-2.3.4/conf/hive-default.xml.template为hive-2.3.4/conf/hive-site.xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?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>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node2:9083</value>
</property>
3.2 Remote分开
node3上配置metastore元数据服务:
hive-2.3.4/conf/hive-default.xml.template为hive-2.3.4/conf/hive-site.xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?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>
node4上配置的是客户端配置文件
hive-2.3.4/conf/hive-default.xml.template为hive-2.3.4/conf/hive-site.xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node3:9083</value>
</property>
将mysql-connector-java-5.1.32-bin.jar拷贝到hive的lib包下
配置完成后,记得初始化
schematool -dbType mysql -initSchema
否则,会因为无法创建数据库中的表而启动失败
启动hive服务端
hive --service metastore
启动hive客户端
hive