个人主页: 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 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的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] 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.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/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

上述语句涉及hive-site.xml hive.metastore.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 服务端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

7. 参考资料



欢迎进入博客 :linbingdong.com 获取最新文章哦~



欢迎关注公众号: FullStackPlan 获取更多干货哦~

Hive安装配置指北(含Hive Metastore详解)的更多相关文章

  1. Eclipse IDE for C/C++ Developers和MinGW安装配置C/C++开发学习环境详解

    Eclipse IDE for C/C++ Developers和MinGW安装配置C/C++开发学习环境详解 操作系统:Windows 7 JDK版本:1.6.0_33 Eclipse版本:Juno ...

  2. zabbix安装配置agent程序之agent配置文件详解

    安装zabbix-agent http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/ 下载:zabbix-agent-3.2.0-1.el6.x86_64.r ...

  3. Mac上Hive安装配置

    Mac上Hive安装配置 1.安装 下载hive,地址:http://mirror.bit.edu.cn/apache/hive/ 之前我配置了集群,tjt01.tjt02.tjt03,这里hive安 ...

  4. Linux环境Hive安装配置及使用

    Linux环境Hive安装配置及使用 一.Hive Hive环境前提 二.Hive架构原理解析 三.Hive-1.2.2单机安装流程 (1) 解压apache-hive-1.2.2-bin.tar.g ...

  5. Kinect_V1在Debian testing的配置指北

    在Linux下驱动Kinect V1现在有两种方式,一种是使用OpenNI + SensorKinect + Nite的方案,一种是使用OpenNI2 + libfreenect的方案,第一种我没有尝 ...

  6. Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!)

    Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!) 一.JDK的安装 安装位置都在同一位置(/usr/tools/jdk1.8.0_73) jdk的安装在克隆三台机器的时候可以提前安装 ...

  7. Windows XP硬盘安装Ubuntu 12.04双系统图文详解

    Windows XP硬盘安装Ubuntu 12.04双系统图文详解 Ubuntu 12.04 LTS版本于2012年4月26日发布,趁着五一放假,赶紧在自己的Windows XP的电脑上安装下Ubun ...

  8. Windows XP硬盘安装Ubuntu 16.04双系统图文详解

    需要下载的东西有两个,一个是grub4dos,另一个是Ubuntu 16.04 LTS的镜像文件,具体下载地址如下:   1 2 3       1.grub4dos  点击下载 grub4dos 2 ...

  9. Linux网络配置:Nat和桥接模式详解

    Linux网络配置:Nat和桥接模式详解 一.我们首先说一下VMware的几个虚拟设备: Centos虚拟网络编辑器中的虚拟交换机: VMnet0:用于虚拟桥接网络下的虚拟交换机: VMnet1:用于 ...

随机推荐

  1. Npm包的开发

    个人开发包的目录结构 ├── coverage //istanbul测试覆盖率生成的文件 ├── index.js //入口文件 ├── introduce.md //说明文件 ├── lib │   ...

  2. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  3. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  4. 【组织级项目管理】P2 MSP P3O

    组织级项目管理--有你,有我,有大家 在过去的2年,无论对于企业来讲,还是对于我们个人都有很多大脑的冲击,有几个词大家应该特别耳熟能详:转型,变革,敏捷,互联网+,组织的项目化管理等.就是这些让我们的 ...

  5. Javascript实用方法二

    承接上一篇, Object keys object的keys方法能够获取一个给定对象的所有键(key/属性名)并以数组的形式返回.这个方法可以用于键的筛选.匹配等. var basket = { st ...

  6. jQuery.template.js 简单使用

    之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...

  7. Response.Redirect引起的性能问题分析

    现象: 最近做的一个系统通过单点登录(SSO) 技术验证用户登录.用户在SSO 系统上通过验证后,跳转到该系统的不同模块.而跳转的时间一直维持子啊几分钟左右. 分析步骤: 在问题复现时抓取Hang d ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. Mach-O 的动态链接(Lazy Bind 机制)

    ➠更多技术干货请戳:听云博客 动态链接 要解决空间浪费和更新困难这两个问题最简单的方法就是把程序的模块相互分割开来,形成独立的文件,而不再将它们静态的链接在一起.简单地讲,就是不对那些组成程序的目标文 ...

  10. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...