目录
Hive的安装部署
Hive部署模式
按照元数据(Metastore)存储位置的不同,其部署模式分为内嵌模式、本地模式和完全远程模式三种。当使用完全模式时,可以提供很多用户同时访问并操作Hive,并且此模式还提供了各类接口(BeeLine,CLI,甚至是Pig)。
(1)内嵌模式
此模式是安装时的默认部署模式,此时元数据存储在一个内存数据库Derby中,并且所有组件(如数据库、元数据服务 )都运行在同一个进程内,这种模式下,一段时间内只支持一个活动用户。但这种模式配置简单,所需机器较少。
(2)本地模式
此模式是Hive元数据服务依旧运行在Hive服务主进程中,但元数据存储在独立的数据库中(可以是远程机器),当涉及元数据操作时,Hive服务中的元数据服务模块会通过JDBC和存储于DB里的元数据数据库交互。
(3)完全远程模式
此时,元数据服务以独立进程运行,并且元数据存储在一个独立的数据库里。此时HiveServer2、Hcatalog、Cloudera ImpalaTM等其他进程可以使用Thrift客户端通过网络来获取元数据服务。而Metastore service则通过JDBC和存储在数据库(如MySQL)里的Metastore Database交互。
其实这就是典型的网站架构模式,前台页面给出查询语句,中间层使用Thrift网络API将查询传到Metastore service,接着Metastore service根据查询得出相应结果,并且给出回应。
Hive环境部署
在这里我们搭建本地模式的Hive环境。
软件准备
(1)Hive官网地址:Hive官网地址
(2)下载地址:下载地址
(3)Hadoop集群环境。
(4)MySql安装包:下载地址
(5)驱动mysql-connector-java-5.1.27-bin.jar:下载地址
MySQL安装
我使用如下版本进行安装。
(1)检测本地是否存在mysql的包。
(2)检测本地是否有mariadb已存在的包。
(3)如果存在,则使用yum命令卸载它。
(4)上传jar包到/opt/soft下,并且解压
(5)安装mysql的server、client、common、libs、libcompat
来到/opt/module/mysql/目录下,可以看到这些安装文件。分别进行安装。
安装server
安装client
安装common
安装libs
安装lib-compat
汇总结果:
(6)查看mysql的服务是否启动
因为我是第一次装,所以目前还是未启动状态。所以我们可以启动一下。
(7)查看默认生成的密码
马赛克部分就是我生成的默认密码
当然,也可以直接查找
(8)登陆mysql服务
(9)修改密码
修改密码之前,我们需要了解一下5.7版本mysql密码强度的设置规则
0 or LOW | 长度 | |
1 or MEDIUM | 长度、大小写、数字、特殊字符 | |
2 or STRONG | 长度、大小写、数字、特殊字符、词典 |
为了操作方便,我在这里暂时将密码强弱设置成LOW级别(0/LOW,1/MEDIUM,2/STRONG)
设置密码至少要含有的大小写字母个数
设置密码至少要包含的数字个数
设置密码至少要包含的特殊字符个数
设置密码的最小长度
现在,终于可以修改密码了
刷新一下
我们可以查看一下密码设置表
退出保存
(10)修改远程登录权限
查看一下mysql的user表
我们可以看到目前有登录权限的只有localhost本地
修改权限为所有%:
这样就可以进行远程登录了
刷新一下
测试看权限是否修改成功
能登陆说明修改成功了。
Hive安装
(1)上传安装包,然后解压缩,这里我使用的1.2.1的版本
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
(2)修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh
(3)配置hive-env.sh文件
(4)修改hive的log存放日志到/opt/module/hive/logs
首先,修改conf/hive-log4j.properties.template文件名称为hive-log4j.properties
在hive-log4j.properties文件中修改log存放位置
(5)Hadoop集群配置
启动hdfs和yarn
在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写,后一个目录是hive默认的存储目录。如果出现错误的话可以尝试重启机器( :( )
我们可以看到/tmp目录只有用户具有权限,/user目录组只具有读和执行的权限,我们将其修改成拥有写权限
我们可以通过web页面直接打勾设置,也可通过命令行设置
(6)配置Hive环境变量
source一下
(7)启动Hive,测试Hive是否启动。
Hive部署成功,但是此时Hive默认使用的诗Derby数据库,Derby只支持同一时间内单个用户的访问,所以此时如果有其他用户访问会报错。
Hive元数据配置到MySQL
(1)上传驱动mysql-connector-java-5.1.27-bin.jar到/opt/module/hive/lib/,在/opt/module/apache-hive-1.2.1-bin/conf/目录下创建hive-site.xml文件,并加入以下官方文档配置参数。官方文档
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://yourhostname:3306/metastore?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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>your password</value>
<description>password to use against metastore database</description>
</property>
</configuration>
(2)在hive的bin目录下执行./schematool -dbType mysql -initSchema,该命令的目的是初始化元数据库。
(3)重新启动Hive,如果启动hive异常,可以重新启动虚拟机。(重启后,别忘了启动hadoop集群)
mysql应该可以多用户登录,我们可以测试一下,再开一个bigdata111页面
可以多用户登录。
(4)上面Hive已经启动成功,但是Info中还存在Warning,我们可以再hive-site.xml中进行修改,消除这个warning。另外,默认的官方hive-site.xml文档没有配置utf-8字符集,导致数据库可能无法存储中文,所以我们可以再修改一下hive-site.xml文件。
值得一提的是,常规的xml文件只要用 & 连接属性就行,但是在JDBC中无法识别,所以要使用 &; 的格式。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://bigdata111:3306/metastore?createDatabaseIfNotExist=true&characterEncoding=utf-8&useSSL=false</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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
修改之后再重新启动,就没问题了。