问题导读
1.HIVE安装是否需要编译?
2.hive安装需要哪些步骤?
3.hive安装需要修改哪些配置?
1. 前置条件
1. 集群已经安装好Hadoop
2. 本次安装使用/usr/local作为安装目录
3. 专门为HIVE建立用户和用户组:hive:hive
2.安装
从官网下载apache-hive-0.14.0-bin.tar.gz以及apache-hive-0.14.0-src.tar.gz,后者主要用于build IWH的war包。
将apache-hive-0.14.0-bin.tar.gz解压至/usr/local,同时将文件夹的owner和group改为hive:hive. 为了方便可以建立一个名为hive的软连接指向apache-hive-0.14.0,如下图:
3. 配置环境变量
#vim /etc/profile
在文件尾部添加:
#HADOOP ENV VARIABLES
JAVA_HOME=/usr/java/jdk1.7.0_71
HADOOP_HOME=/usr/local/hadoop
HIVE_HOME=/usr/local/hive
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HIVE_HOME/hcatalog/bin:$HIVE_HOME/hcatalog/sbin
export JAVA_HOME HADOOP_HOME HIVE_HOME PATH 复制代码
4. 配置HIVE
首先我们需要hive-site.xml和hive-log4j.properties两个文件,可以从默认的模板文件复制而来:
cd $HIVE_HOME/conf
cp hive-default.xml.template hive-site.xml
cp hive-log4j.properties.template hive-log4j.properties 复制代码
以下是一些配置文件的参考:
4.1 hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.execute.setugi</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<!-- metadata database connection configuration -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mariadb://your-database-server/hivemetastoredb?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.mariadb.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>
<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
<description>This is the host address the Hive Web Interface will listen on</description>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
<description>This is the port the Hive Web Interface will listen on</description>
</property>
<!-- configure hwi war package location -->
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-0.14.0.war</value>
<description>This is the WAR file with the jsp content for Hive Web Interface</description>
</property>
</configuration> 复制代码
4.2 hive-log4j.properties
修改:
hive.log.dir=/var/hive/logs
4.3 webhcat-log4j.properties
修改:
webhcat.log.dir = /var/hive/logs
4.4 hcat_server.sh
在开头加上:
export HCAT_LOG_DIR=/var/hive/logs
4.5 webhcat_config.sh
在开头加上:
export WEBHCAT_LOG_DIR=/var/hive/logs
export WEBHCAT_PID_DIR=/tmp
5. 创建相关文件夹和设置权限
HIVE默认在HDFS上会使用/tmp和/user/hive/warehouse两个目录,如果我们以hive用户启动hive,它没有在根目录上的写权限,这样启动hive时就会报错, 所以需要我们通过hadoop的超级用户为hive建立这两个目录,并给赋予相应的权限给hive用户。
hadoop fs -mkdir -p /user/hive
hadoop fs -chgrp hive /user/hive
hadoop fs -chown hive /user/hive
hadoop fs -mkdir /tmp
hadoop fs -chmod a+w /tmp 复制代码
另外,前面的很多配置项都使用了本地的一个/var/hive文件夹,这需要我们创建这个文件夹并assign给hive用户。
6. 构建hwi的war包
hive目前的发行包里没有hwi的war包文件,这个问题在0.13和0.14上都存在,没有这个war包就不能启动hwi服务。目前的解决方法是从源码手动build出这个war包,具体做法是:
6.1 下载hive 0.14.0的源码包并解压
6.2 解压后进入hwi子目录,该目录下的web文件夹正是war包的全部文件,我们需要做的就是通过jar命令把这个文件夹打包为war文件。在hwi目录下执行:
jar cvfM0 hive-hwi-0.14.0.war -C web/ .
执行之后 ,将生成的war文件拷贝至$HIVE_HOME/lib文件夹下,同时修改hive-site.xml文件夹中的: hive.hwi.war.file,将其value改为lib/hive-hwi-0.14.0.war
7. 安装MariaDB/MySql
HIVE需要使用一个关系型数据库存储元数据,对于MariaDB/MySql的安装本文不做赘述,只给出两个小贴士:
设置root用户远程连接数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your-password' WITH GRANT OPTION;
为root用户设置密码
$ mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("new-password") where User='root';
mysql> flush privileges;
mysql> exit 复制代码
另外,有两个地方是需要特别注意的:
必需要将数据库对应的JDBC驱动jar包拷贝至$HIVE_HOME/lib/目录下
hive-site.xml中javax.jdo.option.*的配置项都是在配置与这个数据库连接的JDBC属性,所以要对应好。比如server名,driver名等等。
8. 启动
#启动metastore服务
nohup $HIVE_HOME/bin/hive --service metastore > /dev/null 2> /dev/null &
#启动hiveserver服务
nohup $HIVE_HOME/bin/hive --service hiveserver > /dev/null 2> /dev/null &
#启动hwi服务
nohup $HIVE_HOME/bin/hive --service hwi > /dev/null 2> /dev/null &
#启动hcat_server服务
$HIVE_HOME/hcatalog/sbin/hcat_server.sh start
#启动webhcat_server服务
$HIVE_HOME/hcatalog/sbin/webhcat_server.sh start 复制代码
9. 常见错误及解决方法
9.1 hcat_server.sh start报如下错误:
Missing hive-site.xml, expected at [/usr/local/hive/conf/hive-site.xml]
这时需要把${HIVE_HOME}}/conf/hive-default.xml.template文件复制一份更名为hive-site.xml
9.2 hcat_server.sh start报如下错误:
Started metastore server init, testing if initialized correctly...
/usr/local/hive/hcatalog/sbin/hcat_server.sh: line 91: /usr/local/hive/hcatalog/sbin/../var/log/hcat.out: No such file or directory.Metastore startup failed, see /usr/local/hive/hcatalog/sbin/../var/log/hcat.err
这是因为启动hive进程的用户(就是hive:hive)对指定的log文件或目录没有写权限。解决方法是指定一个hive用户具有写权限的位置,然后在启动脚本里export变量HCAT_LOG_DIR!具体命令如下:
#mkdir -p /var/hive/logs
#chgrp hive /var/hive
#chown hive /var/hive
#vim ${HIVE_HOME}/hcatalog/sbin/hcat_server.sh
#export HCAT_LOG_DIR=/var/hive/logs 复制代码
9.3 在root下使用sudo启动,报错:
webhcat: starting ...
webhcat: /usr/local/hadoop/bin/hadoop jar /usr/local/apache-hive-0.14.0-bin/hcatalog/sbin/../share/webhcat/svr/lib/hive-webhcat-0.14.0.jar org.apache.hive.hcatalog.templeton.Main
/usr/local/hive/hcatalog/sbin/webhcat_server.sh: line 143: ./webhcat-console.log: Permission denied
/usr/local/apache-hive-0.14.0-bin/hcatalog/sbin/webhcat_server.sh: failed to start. Check logs in .
原因:hive默认在启动用户的home目录下生成日志文件,这时候需要修改hive的log4j的配置文件!
vim $HIVE_HOME/hcatalog/etc/webhcat/webhcat-log4j.properties
webhcat.log.dir = /var/hive/logs
9.4 执行hive --service hwi,报错
ls: cannot access /usr/local/hive/lib/hive-hwi-*.war: No such file or directory
这是没有hwi的war包或配置的war路径不对引起的,解决方法参考第5章节。
9.5 启动时报错:
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/java/jdk1.7.0_71/jre" 复制代码
解决方法:
cp $JAVA_HOME/lib/tools.jar $HIVE_HOME/lib/
原文:http://www.tuicool.com/articles/6bqEne3