分布式集群手操 – Hive搭建

Hive分布式集群搭建的示例,按照顺序,该搭建环境在Kafka集群搭建环境的基础上,但二者并无直接依赖关系。搭建过程部分可参考前几篇分布式搭建过程(内含部分通用操作提示)

准备

由于我们使用Hive+Mysql为元数据库,所以在使用Hive前需配置Mysql数据库,Mysql数据库的安装参见《Mysql5.7的安装部署》

仅在hdfs1节点安装了Mysql数据库,其他节点以网络访问的方式访问该主机数据库即可,无需分布式的mysql数据库。

首先,需要指定数据库和用户权限,我们使用bigdata用户,数据库则为hive数据库,因此需执行以下操作:

创建数据库

使用root身份登陆mysql,创建名为hive的数据库:

1
create database hive;

创建用户权限

指定bigdata拥有对hive数据库的所有权限:

1
2
grant all on hive.* to bigdata@'localhost' identified by 'abcd1234';
grant all on hive.* to bigdata@'%' identified by 'abcd1234';

以上两条命令旨在开启bigdata用户的本地以及网络登陆及对hive数据库的权限控制。

1
flush privileges;

为使Hive能与mysql进行连接,还需要为其添加mysql的JDBC驱动,目前为止最新版驱动版本为5.1.37,故将驱动包mysql-connector-java-5.1.37.jar上传到Hive安装目录下的lib文件夹下。

配置

切换到Hive配置文件目录下(./conf),可以看到很多以.template结尾的文件,即配置模板文件,需要将其重命名以去掉该后缀,但为保险起见,使用拷贝命令复制并命名即可(例如:cp hive-env.sh.template hive-env.sh)。

配置hive-env.sh

编辑该文件,修改如下内容:

hive-env.sh
1
2
3
4
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/home/bigdata/services/hadoop-2.6.4
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/home/bigdata/services/apache-hive-2.1.0-bin/conf

配置hive-site.xml

重命名hive-default.xml.templatehive-site.xml,修改如下内容:

hive-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hdfs1:3306/hive?createDatabaseIfNotExist=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>bigdata<value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456789vs</value>
<description>password to use against metastore database</description>
</property>
</configuration>

调整

至此,Hive基本配置完成,scp配置文件到其他节点,然后修改其他节点的配置文件,由于本机hdfs1为Mysql元数据库服务器,同时也是master服务器,因此其他客户端节点需在此配置的基础上修改hive-site.xml如下内容:

hive-site.xml
1
2
3
4
5
6
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hdfs1:9083</value>
</property>
</configuration>

运行

在元数据节点(master节点)运行命令启动元数据存储服务

1
hive --service metastore &

错误处理

  • 启动元数据存储服务时出现以下错误:
1
org.datanucleus.store.rdbms.exceptions.MissingTableException: Required table missing : “`VERSION`” in Catalog “” Schema “”. DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable “datanucleus.schema.autoCreateTables”

需修改Master节点的hive.site.xml文件的如下配置:

hive.site.xml
1
2
3
4
5
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
<description>creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once</description>
</property>
  • 服务成功运行后就可以使用hive命令进入客户端操作,执行hive命令出现如下错误
1
Exception in thread “main” java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

则需修改所有节点的hive-site.xml文件,查找值含有system:java.io.tmpdir字段,将其替换为指定的绝对路径,例如/tmp/hive/iotmp

hive.site.xml
1
2
3
4
5
6
7
8
9
10
<property>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/hive/iotmp</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/hive/iotmp/download</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>

注意:元数据存储服务只需在master节点开启,其他节点无需开启,直接使用hive命令登陆即可


分布式集群手操 – Hive搭建
https://vicasong.github.io/big-data/hive-distribute-install/
作者
Vica
发布于
2016年9月8日
许可协议