安装和使用Hive

根据使用场景不同,Hive的安装部署模式分为三种,分别是内嵌模式、本地模式和远程模式。

Hive内嵌模式由于只支持单会话连接,所以很少使用。Hive本地安装模式和远程模式都是常见的安装和部署方法。

Hive中有两类数据:表数据和元数据。

和关系型数据库一样,元数据可以看做是描述数据的数据,包括Hive表的数据库名、表名、字段名称与类型、分区字段与类型、表及分区的属性、存放位置等都属于元数据。

Hive常用的元数据库有Hive自带的Derby数据库和独立安装的MySQL数据库。

元数据存储路径分为本地和远程,可通过hive-site.xml文件设置。

Hive安装方式

根据Hive不同的应用场景,以及元数据库的使用方式不同,可以将Hive的安装方式分为三种,三种方式及具体特点如下表所示:

序号 安装方式 特点
1 内嵌模式 元数据保存在内嵌的Derby数据库,允许一个会话链接,多个会话链接会报错
2 本地模式 独立安装MySQL数据库,用以替代Derby来存储元数据
3 远程模式 MetaStore服务和Hive服务不在同一个节点,远程安装MySQL替代Derby存储元数据

一般在学习中,使用Hive的本地模式。下面我们就学习如何以本地模式安装和配置Hive。

Hive安装步骤

前提要求

在安装Hive之前,要求先:

  • 已经安装了JDK 8+
  • 已经安装了Hadoop-3.x.x
  • 已经安装了MySQL数据库(或者CentOS安装Maridb数据库)

一、安装

1. 下载hive最新的稳定版本的包到~/software/目录下,然后解压缩到~/bigdata/下:

$ cd ~/bigdata
$ tar -xzvf ~/software/apache-hive-3.1.2-bin.tar.gz    

把文件夹的名字改短些:

$ mv apache-hive-3.1.2-bin hive-3.1.2    

2. 设置环境变量:

$ sudo nano /etc/profile    

在文件的最后,添加如下两句:

export  HIVE_HOME=/home/hduser/bigdata/hive-3.1.2
        export  PATH=$HIVE_HOME/bin:$PATH    

然后执行以下命令让设置生效:

$ source /etc/profile    

二、配置管理

需要配置3个文件:

  • hive-env.sh
  • hive-log4j2.properties
  • hive-site.xml

1. 修改hive-env.sh。默认没有这个文件,从模板文件复制一个过来:

$ cp hive-env.sh.template hive-env.sh   

用文本编辑器vi或nano打开它进行编辑。这里我使用nano编辑器:

$ nano hive-env.sh   

在打开的配置文件最后,添加如下几行:

export JAVA_HOME=/usr/local/jdk1.8.0_181
export HADOOP_HOME=/home/hduser/bigdata/hadoop-3.2.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export HIVE_HOME=/home/hduser/bigdata/hive-3.1.2
export HIVE_CONF_DIR=$HIVE_HOME/conf
export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib    

2. 修改hive-log4j2.properties,配置hive的日志目录。

默认没有这个文件,从模板文件复制一个过来:

$ cp hive-log4j2.properties.template hive-log4j2.properties
$ nano hive-log4j2.properties    

修改下面的参数(等号右侧的值):

 property.hive.log.dir=/home/hduser/bigdata/hive-3.1.2/logs     

3. 配置hive-site.xml。默认没有这个文件,所以先把它创建出来:

$ nano 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>hive.metastore.warehouse.dir</name>
		<value>/user/hive/warehouse</value>
		<description>相对于fs.defaultFS有关的目录,管理表存储的位置</description>
      </property>
      <property>
		<name>hive.metastore.uris</name>
		<value>thrift://localhost:9083</value>
      </property>
  
      <!--配置Hive Metastore:MySQL连接信息 -->
      <property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>
		<description>如果是mariadb:jdbc:mariadb://localhost:3306/hive</description>
      </property>
      <property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>如果是mariadb:org.mariadb.jdbc.Driver</description>
      </property>
      <property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
      </property>
      <!--注意:这里改为你自己的密码 -->
      <property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>password</value>
      </property>

      <!--配置hiveserver2主机(这里最好是配置ip地址,以便于从Windows连接)-->
      <property>
            <name>hive.server2.thrift.bind.host</name>
            <value>localhost</value>
            <description>Bind host on which to run the HiveServer2 Thrift service.</description>
      </property>
      <property>
            <name>hive.server2.thrift.port</name>
            <value>10000</value>
            <description>监听的TCP端口号,默认是10000</description>
      </property>
</configuration>

3. 拷贝jdbc驱动

默认情况下, Hive的元数据保存在了内嵌的derby数据库里, 但一般情况下生产环境使用MySQL来存放Hive元数据。

1) 将MySQL数据库驱动mysql-connector-java-5.1.40.jar文件拷贝到 $HIVE_HOME/lib 下。(mysql jdbc驱动程序)

注:如果使用的是mariadb数据库,则配置的驱动程序为:org.mariadb.jdbc.Driver。 并且要将mariadb jdbc驱动拷贝到hive的lib目录下:例如 mariadb-java-client-2.2.6.jar。

三、为Hive创建HDFS目录

1. 必须先安装了Hadoop,并配置了HADOOP_HOME环境变量。

2. 在Hive中创建表之前,需要在HDFS上创建目录/tmp/hive和/user/hive/warehouse,并给它们赋予写权限。

在HDFS中将它们设为chmod 777,然后才可以在Hive中创建表:

$ hdfs dfs -mkdir -p       /tmp/hive
$ hdfs dfs -mkdir -p       /user/hive/warehouse

// 用户组加写权限
$ hdfs dfs -chmod -R 777   /tmp
$ hdfs dfs -chmod -R 777   /user/hive/warehouse    

四、初始化

执行初始化操作(会在mysql中创建hive数据库)。

$ schematool -dbType mysql -initSchema   

执行成功后,可以查看MySQL中元数据库hive是否已经创建成功。

五、运行和测试

1、启动HDFS集群和YARN集群

$ start-dfs.sh
$ start-yarn.sh   

2、启动Hive客户端:

$ hive    

3、创建数据表:

	-- 查看当前数据库:
	show databases;

	-- 创建新的数据库:
	create database cda;

	-- 打开数据库:
	use cda;

	-- 创建数据表:
	CREATE TABLE sales(
		id int, 
		product string, 
		age int
	) row format delimited fields terminated by '\t';

	-- 查看数据表:
	show tables;

        -- 插入数据
        insert into t1 values (1,"张三"),(2,"李四"),(3,"王老五");    

        -- 查询数据
        select * from t1;

4、退出hive cli

$ exit;    

《PySpark原理深入与编程实战》