ubuntu下hive安装(整合hadoop,mysql)

环境说明:hadoop-1.2.1 和 mysql-5.7 已经成功安装。安装方式可以查阅其他文章。
本文用于记录我安装过程中遇到的种种问题,也可以供遇到同样问题的朋友参考。
首先,去apache官网下载hive,我下载的apache-hive-1.0.1的版本,需要源码的也可以把源码包下载下来。
下载地址:http://hive.apache.org/

下载完成后,到需要安装的目录下,解压:

tar -zvxf apache-hive-1.0.1-bin.tar.gz

设置环境变量和HIVE_HOME:

sudo vi /etc/profile

添加下面两行:

export HIVE_HOME=/usr/local/hive/apache-hive-1.0.1-bin
export PATH=$PATH:/usr/local/hive/apache-hive-1.0.1-bin/bin

保存后使其生效:

source /etc/profile

修改hive-env.sh,添加如下路径:

export HADOOP_HOME=/usr/local/hadoop/hadoop-1.2.1
export HIVE_CONF_DIR=/usr/local/hive/hive-1.0.1/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive/hive-1.0.1/lib

把HIVE_HOME/conf 中的几个文件模版,全都拷贝出副本,这样可以覆盖默认的样本配置。

 cp hive-default.xml.template hive-site.xml
 cp hive-log4j.properties.template hive-log4j.properties
 cp hive-exec-log4j.properties.template hive-exec-log4j.properties

因为hive 是基于hadoop的,所以要添加HADOOP_HOME,启动的时候也是要先启动hadoop,再启动hive。

下面需要修改hadoop 的两个配置文件,否则直接启动,会抛出异常:
Java.lang.NoClassDefFoundError:
org/apache/hadoop/hive/ql/CommandNeedRetryException
我就遇到了这个问题,百度了一下,需要修改hadoop的配置文件,在hadoop-env.sh下添加
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:SOMGTHING ELSE

然后我再次尝试启动hive时,抛出了Caused by: java.io.IOException: Filesystem closed。又百度了一下,在hadoop下的conf目录中的hdfs-site.xml里添加属性fs.hdfs.impl.disable.cache,并设置为true,如下:

    <property>  
        <name>fs.hdfs.impl.disable.cache</name>  
        <value>true</value>  
    </property>

原因:多个datanode在getFileSystem过程中,由于Configuration一样,会得到同一个FileSystem。如果有一个datanode在使用完关闭连接,其它的datanode在访问就会出现上述异常

这时,可以启动hadoop了,如果刚刚已经启动,需要停掉,重新加载配置文件并重新启动。这里还需要修改刚刚拷贝的hive-site.xml,否则命令行执行hive会抛出:
Java.lang.RuntimeException: java.lang.IllegalArgumentException:java.NET.URISyntaxException: Relative path in absolute URI:{system:java.io.tmpdir%7D/$**%7Bsystem:user.name%7D
修改如下:

 <property>
    <name>hive.querylog.location</name>
    <value>/usr/local/hive/tmp/querylogs</value>
    <description>Location of Hive run time structured log file</description>
  </property>
  <property>
 <name>hive.server2.logging.operation.log.location</name>
    <value>/usr/local/hive/tmp/operation_logs</value>
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
  </property>
<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/usr/local/hive/tmp/scratchdir</value>
    <description>Local scratch space for Hive jobs</description>
  </property>
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/usr/local/hive/tmp/resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
  </property>

把路径中带有${system:java.io.tempdir}/{system:user.name} 字样的全部用绝对路径替换掉。
这时,配置完成就可以启动hive了。但这还是derby的hive,如果需要整合mysql,需要在hive-site.xml中添加如下配置信息:

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?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>hive</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>

并把对应的默认配置注释掉。这里我用了mysql 的hive 用户,需要mysql 授权,我也尝试使用root,但是root进入mysql 时我的ubuntu必须用sudo,所以hive使用root用户登录,也不能成功,connection refused,于是另外创建一个mysql用户,给hive使用。

grant all privileges on *.* to 'hive'@'localhost' identified by '123456';
flush privileges;

然后查看user表中是否存在hive用户:

use mysql;
select * from user;

这时,执行hive,show tables,hive 返回OK,就大功告成了。

猜你喜欢

转载自blog.csdn.net/sinat_30333853/article/details/53788745
今日推荐