Hive安装部署

0x01 环境说明

OS: CentOS-6.5-x86_64
java: jdk1.8.0_111
hadoop: hadoop-2.6.5
hive: hive-2.1.1

0x02 安装配置

2.1 下载

下载地址:http://www.apache.org/dyn/closer.cgi/hive
安装版本:apache-hive-2.1.1-bin.tar.gz

2.2 安装

$ tar -zxvf apache-hive-2.1.1-bin.tar.gz
$ mv apache-hive-2.1.1 /home/hadoop/cloud/
# 建立软链,方便管理多个版本
$ ln -s /home/hadoop/cloud/apache-hive-2.1.1 /home/hadoop/cloud/hive

2.3 配置环境变量

# vim /etc/profile
//最后一行追加
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf

使配置文件生效

# source /etc/profile
# su hadoop
$ source /etc/profile

2.4 在HDFS上创建hive数据文件目录

在HDFS中建立用于存储Hive数据的文件目录(/tmp 目录可能已经存在):

hadoop fs -mkdir /tmp
hadoop fs -mkdir /user
hadoop fs -mkdir /user/hive
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse

以上命令在HDFS中建立了/tmp及/usr/hive/warehouse目录,其中/tmp主要用于存放一些执行过程中的临时文件,/user/hive/warehouse用于存放hive进行管理的数据文件。

2.5 配置hive-site.xml

这一步不是必须的,如果不配置,Hive将使用默认的配置文件,通过Hive配置文件可以对Hive进行定制及优化。最常见的是对“元数据存储层”的配置,默认情况下Hive使用Derby数据库作为“元数据存储层”。

在Hive中Derby默认使用“单用户”模式进行启动,这就意味着同一时间只能有一个用户使用Hive,这适用于开发程序时做本地测试。

Hive配置文件位于$Hive_Home/conf目录下面,名为hive-site.xml,这个文件默认情况下是不存在的,需要进行手动创建,在此目录下有个hive-default.xml.template的模板文件,首先需要通过它创建hive-site.xml文件。

$ cp hive-default.xml.template hive-site.xml

关于元数据库Dergy的默认配置如下:

<!--JDBC元数据仓库连接字符串-->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <!--JDBC元数据仓库驱动类名-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.apache.derby.jdbc.EmbeddedDriver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <!--元数据仓库用户名-->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>APP</value>
    <description>Username to use against metastore database</description>
  </property>
   <!--元数据仓库密码-->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>mine</value>
    <description>password to use against metastore database</description>
  </property>

从上面的配置中可以看到关于元数据库的配置,由于Hive中已经包含了这个内置的Derby数据库,因此不需要进行数据库的安装,同时在$Hive_Home/lib下还可以看到Derby的数据库驱动包(derby-xx.x.x.x.jar)。至此已经完成Hive各项工作的安装,可以通过以下命令测试Hive是否正常运行:

hive
hive> SET -v;
hive> quit;

可能出现的错误

Exception in thread “main” Java.lang.RuntimeException: java. lang. IllegalArgumentException: java.NET.URISyntaxException: Relative path in absolute URI: ({system:java.io.tmpdir%7D/)%7Bsystem:user.name%7D

处理:
在hive-site.xml中新建配置项,iotmp文件夹是新建的:

<property>
    <name>system:java.io.tmpdir</name>
    <value>/home/hadoop/hive/iotmp</value>
</property>

0x03 配置MySQL元数据库替换Derby

如前所述,Hive在缺省情况下是使用内置的Derty数据库存储元数据,这对程序开发时本地测试没有任何问题。但如果在生产环境中,由于需要支持多用户同时进行系统访问,这可能不能满足应用需求。通过配置,可以让Derty运行为“多用户”模式来满足多用户访问需求。进一步,在实际的生产环境中通常会选用存储功能更为强大的Mysql数据库作为“元数据存储层”。Mysql作为最流行的开源关系型数据库,使用面广、功能多样,必要时可以充当临时的标准数据查询与分析系统使用,因此得到大量的Hive用户的青睐。
如果使用Mysql作为“元数据存储层”,首先需要安装Mysql。
CentOS 6.5通过yum安装和配置MySQL

3.1 创建hive账号并授权

安装之后再数据库中建立Hive账号并设置权限:

$ mysql -u root -p
mysql> create user 'hive'@'%' identified by 'hive';
mysql> grant all privileges on *.* to 'hive'@'%' with grant option;
mysql> flush privileges;

3.2 配置hive-sive.xml

接下来需要对hive-sive.xml配置文件进行以下修改,以支持mysql:

因为默认hive-site.xml中内容太多,可以新建一个hive-site.xml将下面代码复制进去即可。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>driver name</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hadoop</value>
    </property>
    <property>
        <name>datanucleus.schema.autoCreateTables</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!--property>
        <name>hive.metastore.schema.local</name>
        <value>false</value>
    </property-->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>master</value>
    </property>
</configuration>

3.3 添加Mysql JDBC驱动

由于Hive没有默认包含Mysql的JDBC驱动,因此需要将mysql-connector-java-x.x.xx.jar文件拷贝到$Hive_Home/lib目录中,否则Hive无法与Mysql进行通信。

下载地址:https://dev.mysql.com/downloads/connector/j/

我下载的版本是:mysql-connector-java-5.1.35.tar.gz

至此,基于Mysql作为“元数据存储层”的Hive系统配置完成。

3.4 测试

3.4.1 初始化hive元数据库

执行以下指令初始化hive元数据库,否则 mysql 里面储存 hive 元数据的数据库是空的,无法启动 hive,会报错。

schematool -dbType mysql -initSchema

可能出现问题

[hadoop@master bin]$ schematool -dbType mysql -initSchema
Metastore connection URL:        jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       hive
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
Underlying cause: java.io.IOException : Schema script failed, errorcode 2
Use --verbose for detailed stacktrace.
*** schemaTool failed ***

解决办法

异常说明mysql服务已经启动。 应重新启动mysql服务再执行初始化schema操作。

$ su root
# service mysqld restart
# exit

初始化成功

[hadoop@master bin]$ schematool -dbType mysql -initSchema
Metastore connection URL:        jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       hive
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed

3.4.2 启动

启动hive metastore,然后输入命令hive即可进入hive命令行模式

$ hive --service metastore &
$ hive
hive> show tables;

参考链接:https://hexo2hexo.github.io/hive安装配置/(主要)
http://www.jianshu.com/p/6108e0aed204

0x04 hiveserver2配置

如果想要远程访问hive数据库还需要配置并启用hiveserver2服务。

4.1 配置hive-site.xml

<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>master</value>
</property>

默认是localhost

4.2 启动hiveserver2

hive --service hiveserver2

4.3 使用beeline连接

beeline -u jdbc:hive2://

连接成功后显示:

[hadoop@master bin]$ beeline -u jdbc:hive2://
Connecting to jdbc:hive2://
17/09/05 12:57:18 [main]: WARN conf.HiveConf: HiveConf of name hive.metastore.schema.local does not exist
17/09/05 12:57:40 [main]: WARN conf.HiveConf: HiveConf of name hive.metastore.schema.local does not exist
17/09/05 12:57:41 [main]: WARN metastore.ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 2.1.0
17/09/05 12:57:41 [main]: WARN metastore.ObjectStore: setMetaStoreSchemaVersion called but recording version is disabled: version = 2.1.0, comment = Set by MetaStore hadoop@192.168.1.10
17/09/05 12:57:42 [main]: WARN session.SessionState: METASTORE_FILTER_HOOK will be ignored, since hive.security.authorization.manager is set to instance of HiveAuthorizerFactory.
Connected to: Apache Hive (version 2.1.1)
Driver: Hive JDBC (version 2.1.1)
17/09/05 12:57:42 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.1.1 by Apache Hive
0: jdbc:hive2://> show databases;

0x05 常见问题

5.1 Unable to open a test connection to the given database

java.sql.SQLException: Unable to open a test connection to the given database. JDBC url =

解决方法:重新授权。

mysql> grant all privileges on *.* to 'username'@'master' identified by 'password';
flush privileges;
mysql> grant all privileges on *.* to 'username'@'master' identified by 'password';
mysql> flush privileges;

5.2 安装Hive过程要注意

  1. MySQL 是否正常运行
  2. 创建好mysql 用户并分配好相应的访问权限以及数据库端口号等
  3. mysql-connector-Java-5.1.26-bin.jar 是否放到hive/lib 目录下 建议修改权限为777 (chmod 777 mysql-connector-java-5.1.26-bin.jar)
  4. 修改conf/hive-site.xml 中的 “hive.metastore.schema.verification” 值为 false 即可解决 “Caused by: MetaException(message:Version information not found in metastore. )”
  5. 调试 模式命令 hive -hiveconf hive.root.logger=DEBUG,console

来源: http://blog.csdn.net/youngqj/article/details/19987727

5.3 Access denied for user 'DBAUSER'@'linux-96' (using password: YES)

FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user 'DBAUSER'@'linux-96' (using password: YES)

解决方法,创建hive用户重新授权即可。

mysql -u root -p
mysql>create user 'hive' identified by 'hive';
mysql>grant all on *.* TO 'hive'@'%' with grant option;
mysql>flush privileges;

5.4 multbind警告

启动hive命令行时出现multbind警告解决方法

$HIVE_HOME/lib 目录下还有个 slf4j-log4j12-XXX.jar,在机器有装hadoop时,由于classpath中会有hadoop中的这个jar包,会有冲突,直接删除掉

2017.06.25
修改并上传时间
update: 2017-10-19 07:05:14 星期四
修改部分错误,重新排版。

原文地址:https://www.cnblogs.com/ning-wang/p/7077613.html