一、前言
数据仓库
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
hive简介
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。
- Hive是一个构建于Hadoop顶层的数据仓库工具
- 支持大规模数据存储、分析,具有良好的可扩展性
- 某种程度上可以看作是用户编程接口,本身不存储和处理数据
- 依赖分布式文件系统HDFS存储数据
- 依赖分布式并行计算模型MapReduce处理数据
- 定义了简单的类似SQL 的查询语言——HiveQL
- 用户可以通过编写的HiveQL语句运行MapReduce任务
- 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop
平台上 - 是一个可以提供有效、合理、直观组织和使用数据的分析工具
传统数据库的不足
(1)无法满足快速增长的海量数据存储需求
(2)无法有效处理不同类型的数据(只能支持结构化数据的的存储)
(3)计算和处理能力不足(纵向扩展(通过加cpu,加内存)能力有限,水平扩展能力基本没有,没法通过增加节点的办法来增加处理能力)
Hive具有的特点非常适用于数据仓库
- 采用批处理方式处理海量数据
数据仓库存储的是静态数据,对静态数据的分析适合采用批处理
方式,不需要快速响应给出结果,而且数据本身也不会频繁变化 - 提供适合数据仓库操作的工具
Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的
工具,可以存储、查询和分析存储在Hadoop中的大规模数据
数据存储模型
hive 实际上并不存储数据,hive 的数据存储在 HDFS 中,并且大部分的查询由 MapReduce 完成。
hive中包含以下四类数据模型:表(Table)、外部表(External Table)、分区(Partition)、桶(Bucket)。
- 1 ) hive中的Table和数据库中的Table在概念上是类似的。在hive中每一个Table都有一个相应的目录存储数据。
- 2)外部表是一个已经存储在HDFS中,并具有一定格式的数据。使用外部表意味着hive表内的数据不在hive的数据仓库内,它会到仓库目录以外的位置访问数据。外部表和普通表的操作不同,创建普通表的操作分为两个步骤,即表的创建步骤和数据装入步骤(可以分开也可以同时完成)。在数据的装入过程中,实际数据会移动到数据表所在的hive数据仓库文件目录中,其后对该数据表的访问将直接访问装入所对应文件目录中的数据。删除表时,该表的元数据和在数据仓库目录下的实际数据将同时删除。
外部表的创建只有一个步骤,创建表和装人数据同时完成。外部表的实际数据存储在创建语句。IOCATION参数指定的外部HDFS文件路径中,但这个数据并不会移动到hive数据仓库的文件目录中。删除外部表时,仅删除其元数据,保存在外部HDFS文件目录中的数据不会被删除。 - 3)分区对应于数据库中的分区列的密集索引,但是hive中分区的组织方式和数据库中的很不相同。在hive中,表中的一个分区对应于表下的一个目录,所有的分区的数据都存储在对应的目录中。
- 4)桶对指定列进行哈希(hash)计算,会根据哈希值切分数据,目的是为了并行,每一个桶对应一个文件。
本次实验环境
java 1.8
Ubuntu18.04
Hadoop 3.1.3
二、下载安装hive
1、下载
下载之前我们要先看对应的版本,打开这个网址查看:http://hive.apache.org/downloads.html
由于我们之前安装的是Hadoop3.1.3所以这里我们可以下载3.1.2版本:清华镜像源hive
2、安装
sudo tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /usr/local/ #解压到/usr/local
cd /usr/local/
sudo mv apache-hive-3.1.2-bin hive # 将文件夹名改为hive
sudo chown -R hadoop:hadoop hive # 修改文件权限,hadoop是登录的用户名
要查询特定的用户所属用户组,可以使用groups username
3、配置环境变量
在Hive安装之前,Java,hadoop必须在系统上已经安装。使用下面的命令来验证是否已经安装Java、hadoop:
java –version
hadoop version
又到了熟悉的配置环境变量的环节:
为方便使用,我们把hive命令加入到环境变量中去,使用vim编辑器打开/etc/profile文件:
sudo /etc/profile
修改以下内容:
在该文件添加如下内容:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
由于之前我们已经配置了java,hadoop,hbase环境变量,那么就会是这样:
使其生效
source /etc/profile
输入 hive --version
有hive的版本显示
4、配置Hive配置文件
配置文件介绍
用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml
默认配置文件:$HIVE_CONF_DIR/hive-default.xml
用户自定义配置会覆盖默认配置。
另外,Hive 也会读入 Hadoop 的配置,因为 Hive 是作为 Hadoop 的客户端启动的,Hive 的配置会覆盖 Hadoop 的配置。配置文件的设定对本机启动的所有 Hive 进程都有效。
Hive用于Hadoop环境中,需要修改/usr/local/hive/conf下的hive-site.xml,该文件放置在 $HIVE_HOME/conf目录。下面的命令重定向到Hive config文件夹并重命名模板文件:
cd $HIVE_HOME/conf
mv hive-default.xml.template hive-default.xml
上面命令是将hive-default.xml.template(这是一个配置模板,可以参考里面的信息进行需要的配置)重命名为hive-default.xml;
然后,使用vim编辑器新建一个配置文件hive-site.xml,命令如下:
cd /usr/local/hive/conf
vim 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?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name</