HIVE 数据仓库工具之第一部分(讲解&部署)

HIVE 数据仓库工具

  • [一、Hive 概述](#一、Hive 概述)
    • [1.1 Hive 是什么](#1.1 Hive 是什么)
    • [1.2 Hive 产生的背景](#1.2 Hive 产生的背景)
    • [1.3 Hive 优缺点](#1.3 Hive 优缺点)
      • [1.3.1 Hive的优点](#1.3.1 Hive的优点)
      • [1.3.2 Hive 的缺点](#1.3.2 Hive 的缺点)
    • [1.4 Hive在Hadoop生态系统中的位置](#1.4 Hive在Hadoop生态系统中的位置)
    • [1.5 Hive 和 Hadoop的关心](#1.5 Hive 和 Hadoop的关心)
  • [二、Hive 原理及架构](#二、Hive 原理及架构)
    • [2.1 Hive 的设计原理](#2.1 Hive 的设计原理)
    • [2.2 Hive 特点](#2.2 Hive 特点)
    • [2.3 Hive的体现结构](#2.3 Hive的体现结构)
    • [2.4 Hive的运行机制](#2.4 Hive的运行机制)
    • [2.5 Hive 的转换过程](#2.5 Hive 的转换过程)
    • [2.6 Hive 的数据类型](#2.6 Hive 的数据类型)
      • [2.6.1 Hive 的基本数据类型](#2.6.1 Hive 的基本数据类型)
      • [2.6.2 Hive 的复杂数据类型](#2.6.2 Hive 的复杂数据类型)
    • [2.7 Hive 的数据存储](#2.7 Hive 的数据存储)
  • [三、Hive 安装部署](#三、Hive 安装部署)
    • [3.1 安装 MySQL](#3.1 安装 MySQL)
    • [3.2 安装 Hive](#3.2 安装 Hive)
      • [3.2.1 下载解压](#3.2.1 下载解压)
      • [3.2.2 修改 Hive 配置文件](#3.2.2 修改 Hive 配置文件)
      • [3.2.3 配置 Hive 环境变量](#3.2.3 配置 Hive 环境变量)
      • [3.2.4 添加 MySQL 驱动](#3.2.4 添加 MySQL 驱动)
      • [3.2.5 修改 Hive 相关数据目录](#3.2.5 修改 Hive 相关数据目录)
      • [3.2.6 启动 Hive 服务](#3.2.6 启动 Hive 服务)

一、Hive 概述

1.1 Hive 是什么

  • Hive是由faceBook开源,最初用于解决海量结构化的日志数据统计问题,它可以作为ETL
    工具。
  • Hive最初是构建在Hadoop之上的数据仓库
    • 数据计算是MapReduce
    • 数据存储是HDFS
  • Hive 定义了一种类SQL的查询语言------HQL
  • Hive 适合离线数据处理
  • Hive 是将HQL转换为MR的语言翻译器

1.2 Hive 产生的背景

Hive 的诞生源于 Facebook 的日志分析需求,面对海量的结构化数据, Hive 能够以较低的成本完成以往需要大规模数据库才能完成的任务,并且学习门槛相对较低,应用开发灵活且高效。

后来Facebook将 Hive 开源给了 Apache,成为 Apache的一个顶级项目,至此Hive在大数据应用方面得到了快速的发展和普及。

1.3 Hive 优缺点

1.3.1 Hive的优点

  • Hive适合数据的批处理,解决了传统关系型数据库在海量数据处理上的瓶颈。
  • Hive构建在Hadoop之上,充分利用了集群的存储资源、计算资源。
  • Hive学习使用成本低,支持标准的SQL语法,这样就免去了编写MapReduce程序的过程减少了开发成本。
  • 具有良好的扩展性,且能够实现与其他组件的集成开发

1.3.2 Hive 的缺点

  • HQL的表达能力依然有限,不支持迭代计算,有些复杂的运算用 HQL不易表达,还需要单独编写MapReduce来实现。
  • Hive的运行效率低、延迟高,这是因为Hive底层计算引擎默认为MapReduce,而MapReduce是离线计算框架。
  • Hive的调优比较困难,由于HQL语句最终会转换为MapReduce任务,所以Hive的调优还需要考虑MapReduce层面的优化。

1.4 Hive在Hadoop生态系统中的位置

1.5 Hive 和 Hadoop的关心

Hive利用HDFS来存储数据,利用MapReduce来查询分析数据,那么Hive与Hadoop之间的关系总结如下。

  • Hive需要构建在Hadoop集群之上。
  • Hive中的所有数据都存储在Hadoop分布式文件系统中。
  • 对HQL查询语句的解释、优化、生成查询计划等过程均是由 Hive 完成的,而查询计划被转化为 MapReduce 任务之后需要运行在 Hadoop 集群之上。

二、Hive 原理及架构

2.1 Hive 的设计原理

Hive 是一种构建在Hadoop之上的数据仓库工具,可以使用HQL 语句对数据进行分析和查询而Hive的底层数据都存储在HDFS中。Hive在加载数据过程中不会对数据进行任何的修改,只是将数据移动到指定的HDFS目录下,因此,Hive不支持对数据的修改。

2.2 Hive 特点

  • 支持索引,加快数据查询。
  • 不同的存储类型,例如,纯文本文件、HBase 中的文件。
  • 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
  • 可以直接使用存储在Hadoop 文件系统中的数据。
  • 内置大量用户自定义函数(user define function,简称UDF)来对时间、字符串进行操作,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
  • HQL语句最终会被转换为MapReduce任务运行在Hadoop集群之上。

2.3 Hive的体现结构

2.4 Hive的运行机制

2.5 Hive 的转换过程

2.6 Hive 的数据类型

2.6.1 Hive 的基本数据类型

2.6.2 Hive 的复杂数据类型

2.7 Hive 的数据存储

  • 表(table)

    Hive的表在逻辑上由存储的数据和描述表中数据形式的相关元数据组成。数据一般存放在HDFS中,但它也可以放在其他任何Hadoop文件系统中,包括本地文件系统或S3。Hive把元数据存放在关系型数据库中,而不是放在HDFS中。在Hive中创建表时,默认情况下Hive负责管理数据。这意味着Hive把数据移入它的"仓库目录"另外一种选择是创建一个外部表(external table),这会让Hive到仓库目录以外的位置访问数据。

  • 分区(Partition)

    Hive把表组织成分区。这是一种根据分区列(如日期)的值对表进行粗略划分的机制。使用分区可以加快数据分片的查询速度。以分区的常用情况为例,如日志文件的每条记录包含一个时间戳。如果我们根据日期来对它进行分区,那么同一天的记录就会被存放在同一个分区中。这样做的优点是对于限制到某个或者某些特定日期的查询,它们的处理可以变得非常高效。因为它们只需要扫描查询范围内分区中的文件。注意,使用分区并不会影响大范围查询的执行,我们仍然可以查询跨多个分区的整个数据集。

  • 桶(Bucket)

    表或者分区可以进一步分为桶。它会为数据提供额外的结构以获得更高效的查询处理。例如,通过用户ID来划分桶,我们可以在所有用户集合的随机样本上快速计算基于用户的查询

三、Hive 安装部署

3.1 安装 MySQL

  • 在线安装 MySQL
javascript 复制代码
[root@hadoop1 ~]# yum install mysql-server

如果安装提示:no package mysql-server available,可以先下载mysql的repo源,再安装repo源,然后再执行上面的脚本

javascript 复制代码
[root@hadoop1 ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@hadoop1 ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
  • 启动 MySQL 服务,查看状态
javascript 复制代码
[root@hadoop1 ~]# service mysqld start
[root@hadoop1 ~]# service mysqld status
  • 设置用户密码

    • 登录 MySQL (无密码,直接按回车)
    javascript 复制代码
    [root@hadoop1 ~]# mysql -uroot -p
    • 设置 root 用户密码
    javascript 复制代码
    mysql> set password for root@localhost=password('root');	
    • 登录 MySQL (需要输入秘密)
    javascript 复制代码
    [root@hadoop1 ~]# mysql -uroot -p
  • 创建 Hive 账号

    • 创建 hive 账号
    javascript 复制代码
    mysql> create user 'hive' identified by 'hive';
    • 给 hive 用户授权
    javascript 复制代码
    mysql> grant all on *.* to 'hive'@'hadoop1' identified by 'hive';
    • 使授权生效
    javascript 复制代码
    mysql> flush privileges;
    • Hive 用户登录 MySQL
    javascript 复制代码
    [root@hadoop1 ~]# mysql -h hadoop1 -u hive -p

3.2 安装 Hive

3.2.1 下载解压

下载地址:https://archive.apache.org/dist/hive/hive-2.3.9/

下载 Hive 安装包apache-hive-2.3.9-bin.tar.gz,然后上传至hadoop1节点的/usr/local/目录下。

然后开始解压并创建软连接,命令如下:

复制代码
[root@hadoop1 local]# tar -zxvf apache-hive-2.3.9-bin.tar.gz 
[root@hadoop1 local]# ln -s apache-hive-2.3.9-bin hive

3.2.2 修改 Hive 配置文件

进入hive的conf目录下发现hive-site.xml文件不存在,需要从默认配置文件复制一份,具体操作如下所示。

复制代码
[root@hadoop1 hive]# cp /usr/local/hive/conf/hive-default.xml.template /usr/local/hive/conf/hive-site.xml

然后在hive-site.xml配置文件中,修改元数据库相关配置,修改内容如下所示。

复制代码
[root@hadoop1 hive]# vim /usr/local/hive/conf/hive-site.xml

配置文件对应位置修改如下(此处本人使用mysql数据库,默认是derby数据库):

复制代码
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
#修改连接MySQL的URL
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop1:3306/hive?creatDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
  </property>
#修改连接数据库的用户名和密码
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
  </property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
  </property>

3.2.3 配置 Hive 环境变量

打开 /etc/profile 文件,配置Hive环境变量,具体操作如下所示。

复制代码
[root@hadoop1 hive]# vim /etc/profile

添加如下内容

复制代码
# 添加 Hive 环境变量
HIVE_HOME=/usr/local/hive
PATH=$HIVE_HOME/bin:$PATH
export HIVE_HOME PATH

保存并退出,并用命令source /etc/profile 使配置文件生效。

3.2.4 添加 MySQL 驱动

下载 MySQL 驱动地址:https://dev.mysql.com/downloads/

然后上传至Hive的lib目录下即可。

3.2.5 修改 Hive 相关数据目录

修改hive-site.xml配置文件,更改相关数据目录,具体配置如下所示。

复制代码
[root@hadoop1 hive]# vim /usr/local/hive/conf/hive-site.xml

配置文件对应位置修改如下:

javascript 复制代码
<property>
    <name>hive.querylog.location</name>
    <value>/usr/local/hive/iotmp</value>
</property>
<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/usr/local/hive/iotmp</value>
</property>
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/usr/local/hive/iotmp</value>
</property>

3.2.6 启动 Hive 服务

第一次启动Hive服务需要先进行初始化,具体操作如下所示。(初始化之前需要启动 Hadoop 集群)

javascript 复制代码
[root@hadoop1 hive]# /usr/local/hive/bin/schematool -dbType mysql -initSchma

启动 hive

备注:第二部分进行 Hive 的使用进行详细说明

相关推荐
yumgpkpm4 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
yumgpkpm1 天前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
sunxunyong1 天前
hs2偶发连接失败问题处理
hadoop
陈年老古董1 天前
Hive 函数学习笔记(上):单行函数与炸裂函数
hive·笔记·学习
真上帝的左手1 天前
27. 数据产品-数据中台架构规划
数据仓库·架构·数据分析·数据中台
陈年老古董1 天前
Hive 分区表学习笔记:语法、操作、二级分区与动态分区
hive·笔记·学习
省钱兄--zs1 天前
24小时自助健身房系统软件开发实战:从架构设计到部署全指南
java·数据仓库·spring boot·系统架构·需求分析
计算机毕业编程指导师1 天前
大数据毕设选题推荐:基于Hadoop+Spark全球碳排放减排策略分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·碳排放减排
53488736abcdefg2 天前
Hive 入门&架构原理
hive·hadoop·架构
泡干脆面就番茄2 天前
Hadoop基础入门到实战:从Python理解MapReduce到HDFS架构与集群搭建
hadoop