Hive安装配置指北(含Hive Metastore详解)

来源:互联网 发布:linux下安装nagios 编辑:程序博客网 时间:2024/05/21 22:59

原文地址:http://www.cnblogs.com/linbingdong/p/5829369.html

Hive安装配置指北(含Hive Metastore详解)

个人主页: http://www.linbingdong.com

本文介绍Hive安装配置的整个过程,包括MySQL、Hive及Metastore的安装配置,并分析了Metastore三种配置方式的区别。网上有很多介绍Hive Metastore三种配置方式的文章,但是理解都不对,给读者造成了很多误导。本人详细阅读Apache和CDH官方文档中关于Hive Metastore的部分,并经过实践,终于填好各种坑,安装配置成功,遂记录下本文,供大家参考。

1. 相关概念

Hive Metastore有三种配置方式,分别是:

  1. Embedded Metastore Database (Derby) 内嵌模式
  2. Local Metastore Server 本地元存储
  3. Remote Metastore Server 远程元存储

1.1 Metadata、Metastore作用

  • metadata即元数据。元数据包含用Hive创建的database、tabel等的元信息。
    元数据存储在关系型数据库中。如Derby、MySQL等。

  • Metastore的作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

1.2三种配置方式区别

  • 内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。

  • 本地元存储和远程元存储都采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。

  • 本地元存储和远程元存储的区别是:本地元存储不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程元存储的metastore服务和hive运行在不同的进程里。

在生产环境中,建议用远程元存储来配置Hive Metastore。

2. 集群规划

本教程Hadoop相关软件全部基于CDH5.5.1,用yum安装,系统环境如下:

  • 操作系统:CentOS 7.2
  • Hadoop 2.6.0
  • Hive1.1.0
  • Spark1.5.0
  • MySQL 5.6
  • JDK 1.8
  • Maven 3.3.3
  • Scala 2.10

各节点规划如下:

192.168.117.51     Goblin01           nn1  jn1  rm1  worker  master  hive  metastore  mysql192.168.117.52     Goblin02    zk2    nn2  jn2  rm2  worker          hive  metastore192.168.117.53     Goblin03    zk3    dn1  jn3       worker          hive192.168.117.54     Goblin04    zk4    dn2            worker          hive

说明:Goblin01~04是每台机器的hostname,zk代表zookeeper,nn代表hadoop的namenode,dn代表datanode,jn代表journalnode,rm代表resourcemanager,worker代表Spark的slaves,master代表Spark的master

如果不需要Hive on Spark,只需要Hive on MR,则不需要安装Spark、Maven和Scala。

我们把metastore服务和MySQL都装在51上(装在哪一台都可以),51-54都安装Hive,这样多个客户端可以同时执行Hive命令。

在执行以下步骤之前,请确保已经安装了Hadoop集群

3. 安装MySQL

  • 下载mysql的repo源
$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
  • 安装mysql-community-release-el7-5.noarch.rpm包
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

安装这个包后,会获得两个mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo,/etc/yum.repos.d/mysql-community-source.repo。

  • 安装mysql
$ sudo yum install mysql-server

4. 配置MySQL和metastore

Step 1: Install and start MySQL if you have not
already done so

$ sudo yum install mysql-server$ sudo service mysqld start

Step 2: Configure the MySQL Service and Connector

因为使用MySQL作为存储元数据的数据库,所以需要把连接MySQL的jar包放入或链接到$HIVE_HOME/lib目录下。

$ sudo yum install mysql-connector-java$ ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar

To set the MySQL root password:

$ sudo /usr/bin/mysql_secure_installation[...]Enter current password for root (enter for none):OK, successfully used password, moving on...[...]Set root password? [Y/n] yNew password:Re-enter new password:Remove anonymous users? [Y/n] Y[...]Disallow root login remotely? [Y/n] N[...]Remove test database and access to it [Y/n] Y[...]Reload privilege tables now? [Y/n] YAll done!

To make sure the MySQL server starts at boot:

$ sudo /sbin/chkconfig mysqld on$ sudo /sbin/chkconfig --list mysqldmysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

Step 3. Create the Database and User

$ mysql -u root -pEnter password:mysql> CREATE DATABASE metastore;mysql> USE metastore;mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql;mysql> CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword';...mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost';mysql> GRANT ALL ON metastore.* TO 'hive'@'metastorehost' IDENTIFIED BY 'hive';mysql> GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'hive';mysql> FLUSH PRIVILEGES;mysql> ALTER DATABASE metastore CHARACTER SET latin1;mysql> quit;

Step 4. Format the Database

$ cd /usr/lib/hive/bin$ ./schematool --dbType mysql --initSchema

5. Hive配置

5.1 HDFS存储位置配置

Hive配置文件里要用到HDFS的一些路径,需要先手动创建。

hdfs dfs -mkdir -p /usr/hive/warehousehdfs dfs -mkdir -p /usr/hive/tmphdfs dfs -mkdir -p /usr/hive/loghdfs dfs -chmod g+w /usr/hive/warehousehdfs dfs -chmod g+w /usr/hive/tmphdfs dfs -chmod g+w /usr/hive/log

上述语句涉及hive-site.xml hive.metastore.warehouse.dir等,表示数据在hdfs中的存储位置

5.2 hive-env.sh (所有节点)

export HADOOP_HOME=/usr/lib/hadoopexport HIVE_CONF_DIR=/usr/lib/hive/conf

5.3 hive-log4j.properties(所有节点)

首先创建log存放的文件夹

mkdir /usr/lib/hive/logs

然后配置hive-log4j.properties

hive.log.dir=/usr/lib/hive/logs

5.4 服务端hive-site.xml

服务端指的是Metastore服务所在的机器,即安装metastore的机器,这里是51和52。

<property>  <name>javax.jdo.option.ConnectionURL</name>  <value>jdbc:mysql://Goblin01:3306/metastore?createDatabaseIfNotExist=true</value>  <description>the URL of the MySQL database</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></property><property>  <name>javax.jdo.option.ConnectionPassword</name>  <value>hive</value></property><property> <name>hive.metastore.warehouse.dir</name> <value>/usr/hive/warehouse</value></property><property><name>hive.exec.scratchdir</name><value>/usr/hive/tmp</value></property><property><name>hive.querylog.location</name><value>/usr/hive/log</value></property>

5.5 客户端hive-site.xml

这里指的是53和54。

<property>  <name>hive.metastore.uris</name>  <value>thrift://Goblin01:9083,Goblin02:9083</value>  <description>IP address (or fully-qualified domain name) and port of the metastore host</description></property><property> <name>hive.metastore.warehouse.dir</name> <value>/usr/hive/warehouse</value></property><property> <name>hive.exec.scratchdir</name> <value>/usr/hive/tmp</value></property><property> <name>hive.querylog.location</name> <value>/usr/hive/log</value></property>

6. 启动Hive

  1. 启动MySQL
$ service mysqld start
  1. 启动metastore服务
$ service hive-metastore start
  1. 启动Hive CLI

因为在4台机器上都安装了hive,并且作了相关的配置,所有四台机器均可以启动Hive CLI(Hive交互式shell)

$ hive