简介
此篇博文主要记录一下hive搭建的过程(集群模式,多用户访问)
此处配置的为多用户模式,hive的元数据存储在mysql中,hive的元数据主要包括:表信息、表属性、分区、列等等信息,Owner
hive的实际数据存储在HDFS上
下载Hive
Hive可以直接到官方网站去进行下载,我下载的hive版本为1.2.0.下载时注意选择bin.tar文件,该文件为hive编译后的版本,src为hive的源码包
解压Hive
将下载以后的Hive上传到linux机器上,我的软件放在software中。然后将Hive解压至目标文件夹:
tar zxf ./apache-hive-1.2.1-bin.tar.gz -C /home/spark/hive
主要此处的目标文件夹必须存在,tar解压命令不同于cp,不会自动创建未存在的文件夹
配置环境变量
这步操作和搭建hadoop及spark类似,需要将hive的安装路径加入到linux的/etc/profile中
vim /etc/profile
加入hive的安装路径,如下
#HIVE_HOME
export HIVE_HOME=/home/spark/hive/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin
保存只有,要执行source操作,将刚才进行的配置生效
source /etc/profile
Hive配置
hive默认使用自带的derby数据库作为元数据的存储数据库,但是derby数据库只支持单用户访问,在生产环境下我们通常采用mysql作为hive的元数据存储仓库.下面我们的配置也是以mysql作为运输局存储来配置的
hive的配置文件放置在conf文件夹内,配置文件如下:
- hive-site.xml hive的配置文件
- hive-env.sh hive的运行环境文件
- hive-default.xml.template 默认模板
- hive-env.sh.template hive-env.sh默认配置
- hive-exec-log4j.properties.template exec默认配置
- hive-log4j.properties.template log默认配置
配置Hive主要配置conf中的hive-env.sh及hive-default.xml,我们进入conf文件夹下发现并没有这两个文件,因此需要cp这两个文件的模板文件,并且去掉结尾的template
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
hive-env.sh
vim hive-env.sh
加入hadoop的安装路径:
HADOOP_HOME=/home/spark/hadoop/hadoop-2.6.3
hive-site.xml
配置4项内容即可
先将hive-site.xml进行备份
mv hive-site.xml hive-site.xml.bk
在重新vim一个hive-site.xml,加入如下内容:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://centos:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
javax.jdo.option.ConnectionURL配置的为hive连接mysql的数据库连接字符串,hive将会去连接mysql的hive数据库,若该数据库不存在将会创建
javax.jdo.option.ConnectionDriverName配置的为hive连接mysql使用的jdbc驱动类名称,需要带mysql官网去下载mysql的jdbc驱动(http://dev.mysql.com/downloads/connector/j/),然后将该驱动解压并将jar包copy到hive下的lib文件夹类,否则会爆出如下的错误:
Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver (“com.mysql.jdbc.Driver”) was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
at org.datanucleus.store.rdbms.connectionpool.AbstractConnectionPoolFactory.loadDriver(AbstractConnectionPoolFactory.java:58)
at org.datanucleus.store.rdbms.connectionpool.BoneCPConnectionPoolFactory.createConnectionPool(BoneCPConnectionPoolFactory.java:54)
at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.java:238)
… 68 more
javax.jdo.option.ConnectionUserName配置的为连接mysql使用的用户名
javax.jdo.option.ConnectionUserName配置的为连接mysql使用的密码
metastore初始化
我们选择的数据库为mysql,因此使用schematool -initSchema -dbType mysql对元数据库进行初始化
mysql配置
由于需要使用hive去连接mysql,我们配置的连接用户为hive,密码为123456.因此要给这个用户赋予本地连接及远程连接的权限;使用root用户进入mysql中,输入以下命令行:
grant all privileges on . to hive@”localhost” identified by “123456” with grant option;
grant all privileges on . to hive@”%” identified by “123456” with grant option;
flush privileges;
第一句将赋予hive用户通过本地服务器访问hive的权限
第二句将赋予hiv用户通过任意外网服务器访问hive的权限,此处赋予的为对任意数据库及表的操作
第三局将刷新权限的修改
我们修改完之后,可以进行验证:
mysql -u hive -p
输入123456发现已经可以访问mysql了
错误汇总:
1.Exception in thread “main” java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
这个错误是因为在hadoop的目录下存在老版本的jline,jline在yarn的lib文件夹下
cd /home/spark/hadoop/hadoop-2.6.3/share/hadoop/yarn/lib
rm jline-0.9.94.jar
rm掉yarn下的jline之后,要从hive的lib中cp一份高版本的jline
cp /home/spark/hive/apache-hive-1.2.1-bin/lib/jline-2.12.jar /home/spark/hadoop/hadoop-2.6.3/share/hadoop/yarn/lib