本文原文出处: http://blog.csdn.net/bluishglc/article/details/41652111 严禁任何形式的转载,否则将委托CSDN官方维护权益!
0. 前置条件
1. 集群已经安装好Hadoop
2. 本次安装使用/usr/local作为安装目录
3. 专门为HIVE建立用户和用户组:hive:hive
1.安装
从官网下载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,如下图:
2. 配置环境变量
#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
3. 配置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
以下是一些配置文件的参考:
3.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>
3.2 hive-log4j.properties
修改:
hive.log.dir=/var/hive/logs
3.3 webhcat-log4j.properties
修改:
webhcat.log.dir = /var/hive/logs
3.4 hcat_server.sh
在开头加上:
export HCAT_LOG_DIR=/var/hive/logs
3.5 webhcat_config.sh
在开头加上:
export WEBHCAT_LOG_DIR=/var/hive/logs
export WEBHCAT_PID_DIR=/tmp
4. 创建相关文件夹和设置权限
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用户。
5. 构建hwi的war包
hive目前的发行包里没有hwi的war包文件,这个问题在0.13和0.14上都存在,没有这个war包就不能启动hwi服务。目前的解决方法是从源码手动build出这个war包,具体做法是:
5.1 下载hive 0.14.0的源码包并解压
5.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
6. 安装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名等等。
7. 启动
#启动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
8. 常见错误及解决方法
8.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
8.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
8.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
8.4 执行hive --service hwi,报错
ls: cannot access /usr/local/hive/lib/hive-hwi-*.war: No such file or directory
这是没有hwi的war包或配置的war路径不对引起的,解决方法参考第5章节。
8.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/