1、Hive的来源与介绍

1)Hive是由Facebook开源用于解决海量结构化日志的数据统计。

2)Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。

3)总结一句话,Hive的本质是:将HQL转化成MapReduce程序。

4)Hive处理的数据我们一般存储在分布式文件系统HDFS上,由于其执行底层会转换成MapReduce程序,所以需要提前开启Yarn相关的服务。


2、Hive的优缺点

1)优点

(1)提供了类SQL的语法,有SQL基础的开发人员可以快速上手,节省学习成本。

(2)避免了去编写复杂的MapReduce程序,减少了开发人员的成本。

(3)Hive由于底层是MapReduce程序,执行延迟比较高,因此Hive常用于离线数据分析,对实时性要求不高的场景比较适合。

(4)Hive的优势在于处理大数据量的数据,对于处理小数据没有优势,这也是因为Hive的执行延迟比较高。

(5)Hive支持定义一系列的UDF、UDTF等自定义函数,可以根据实际的不同业务要求来实现不同的功能(后面会详细讲这块)

2)缺点

(1)Hive不支持对数据的更新操作,比如修改某个字段的值等操作。

(2)Hive在迭代式计算这块无法做到。

(3)Hive的执行效率比较低,所以一般在开发中我们会替换成Tez或Spark执行引擎。

(4)Hive在调优这块也比较粗粒度,后续也会讲到关于Hive调优这块的知识。


3、Hive的架构原理

Hive产生背景 hive产生的原因_Hive

1)Hive的客户端:可以通过JDBC/ODBC或者JAVA API的形式来访问、WEBUI(比如框架自带的)、HUE、DBeaver等。

2)元数据(metastore)

(1)Hive的元数据默认是存储在derby数据库中,推荐使用MySQL来存储Hive的元数据信息(可以支持开启多个Hive客户端)。

(2)Hive的元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(分为内部表和外部表)以及表数据所在的目录信息等。

3)使用HDFS来存储Hive的表数据,底层使用的计算引擎是MapReduce。

4)驱动器:Driver

5)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误;

6)编译器(Physical Plan):将解析器生成的AST编译成逻辑执行计划;

7)优化器(Query Optimizer):对整个HQL生成的逻辑执行计划进行优化;

8)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。


4、Hive的安装部署

1)前提准备工作

(1)需要提前安装hadoop相关的服务并启动,比如HDFS、YARN

(2)需要提前安装好MySQL

(1)先去Hive的官网下载所需要的安装包(推荐安装Hive-2.3.4或者Hive-1.2.1版本)下载地址:https://archive.apache.org/dist/hive/

Hive产生背景 hive产生的原因_Hive产生背景_02

2)Hive的安装部署步骤

(1)解压hive的安装包到指定的安装目录,我这里是放在/opt/module目录下(需要提前在该目录下创建一个module目录)

tar -zxf /opt/software/apache-hive-2.3.4.tar.gz -C /opt/module/

(2)修改解压后的hive根目录的名称为hive-2.3.4(这一步可以省略),然后切换到hive安装目录下面的conf目录,接着先配置hive-env.sh文件(需要将hive-env.sh.template修改为hive-env.sh)

#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_144
# Set HADOOP_HOME to point to a specific hadoop install directory
# HADOOP_HOME=${bin}/../../hadoop
HADOOP_HOME=/opt/module/hadoop-2.7.2

# Hive Configuration Directory can be controlled by:
# export HIVE_CONF_DIR=
export HIVE_CONF_DIR=/opt/module/hive-2.3.4/conf

(3)还需要拷贝mysql的驱动包到hive的lib目录下,否则会包如下错误

Hive产生背景 hive产生的原因_SQL_03

(4)配置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://giveu101:3306/metastore?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>root</value>
      <description>username to use against metastore database</description>
    </property>
  
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>666666</value>
      <description>password to use against metastore database</description>
    </property>

    <!-- hive元数据地址,默认是/user/hive/warehouse -->
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
    </property>
    <!-- hive查询时输出列名 -->
    <property>
      <name>hive.cli.print.header</name>
      <value>true</value>
    </property>
    <!-- 显示当前数据库名 -->
    <property>
      <name>hive.cli.print.current.db</name>
      <value>true</value>
    </property>
</configuration>

(5)在hive的根目录下创建logs目录,并在conf目录下配置hive-log4j2.properties文件

Hive产生背景 hive产生的原因_Hive_04

(6)修改HDFS系统中关于Hive的一些目录权限

hdfs dfs -mkdir /tmp #如果有这个路径,这不需要重新创建
hdfs dfs -mkdir -p /user/hive/warehouse #创建目录
hdfs dfs -chmod g+w /tmp #修改文件权限
hdfs dfs -chmod g+w /user/hive/warehouse #修改文件权限

(7)初始化Hive在MySQL的元数据库信息

Hive产生背景 hive产生的原因_Hive_05

(8)开启元数据服务

nohup hive --service metastore &

(9)如果想直接使用bin目录下的hive的脚本来打开hive自带的命令行客户端,还需要在/etc/profile文件配置HIVE_HOME,然后source /etc/profile文件即可

#HIVE_HOME
export HIVE_HOME=/opt/module/hive-2.3.4
export PATH=$PATH:$HIVE_HOME/bin

(10)最后一步就是直接在命令行输入hive即可进入hive自带的命令行客户端进行测试hive是否安装部署成功,如出现图下情况即安装成功

Hive产生背景 hive产生的原因_hive_06

备注:参考Hive的官方文档:https://cwiki.apache.org/confluence/display/Hive/GettingStarted