Hive安装配置指北(含HiveMetastore详解)
本⽂介绍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  mysql
192.168.117.52    Goblin02    zk2    nn2  jn2  rm2  worker          hive  metastore
192.168.117.53    Goblin03    zk3    dn1  jn3      worker          hive
192.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下载jar包下载mysql的repo源
$ wget arch.rpm
安装arch.rpm包
$ sudo rpm -arch.rpm
安装这个包后,会获得两个mysql的yum repo源:/pos.po,/pos.po。
安装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,
[...]
Set root password? [Y/n] y
New 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] Y
All done!
To make sure the MySQL server starts at boot:
$ sudo /sbin/chkconfig mysqld on
$ sudo /sbin/chkconfig --list mysqld
mysqld          0:off  1:off  2:on    3:on    4:on    5:on    6:off
Step 3. Create the Database and User
$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.sql.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/warehouse
hdfs dfs -mkdir -p /usr/hive/tmp
hdfs dfs -mkdir -p /usr/hive/log
hdfs dfs -chmod g+w /usr/hive/warehouse
hdfs dfs -chmod g+w /usr/hive/tmp
hdfs dfs -chmod g+w /usr/hive/log
上述语句涉及astore.warehouse.dir等,表⽰数据在hdfs中的存储位置5.2 hive-env.sh (所有节点)
export HADOOP_HOME=/usr/lib/hadoop
export 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 服务端l
服务端指的是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&sql.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&astore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
<property>
<name&scratchdir</name>
<value>/usr/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/log</value>
</property>
5.5 客户端l
这⾥指的是53和54。
<property>
<name&astore.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&astore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
<property>
<name&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
2. 启动metastore服务
$ service hive-metastore start
3. 启动Hive CLI
因为在4台机器上都安装了hive,并且作了相关的配置,所有四台机器均可以启动Hive CLI(Hive交互式shell)$ hive
7. 参考资料
欢迎进⼊博客:获取最新⽂章哦~
欢迎关注: FullStackPlan 获取更多⼲货哦~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。