03.04 Hive 基础知识大补

hive 概念

  • 是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。
  • 能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
  • 可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单。

hive 特性

  • hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。
  • hive 并不能够在大规模数据集上实现低延迟快速的查询,例如,hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。
  • hive 的最佳使用场合是大数据集的批处理作业。
  • 支持不同的存储类型,如纯文本文件、HBase 中的文件。
  • 可以将元数据保存在关系数据库中,减少在查询过程中语义检查的时间。
  • 可以直接使用存储在Hadoop 文件系统中的数据。
  • 内置用户函数UDF,可用来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
  • 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。


Hive 架构

  • 用户接口三个(CLI,Client 和 WUI)

1、Cli 启动的时候,会同时启动一个 hive 副本。

2、Client 是 hive 的客户端,用户连接至 hive Server。在启动 Client 模式的时候,需要指出 hive Server 所在节点,并且在该节点启动 hive Server。

3、WUI 是通过浏览器访问 hive。

  • 元数据存储(存储在数据库中)

元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

  • 解释器、编译器、优化器、执行器

完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行。

  • Hadoop

hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成。

Hive数据存储模型

表(Table)、外部表(External Tablc)、分区(Partition)、桶(Bucket)。

  • hive中每一个Table都有一个相应的目录存储数据
  • 外部表是一个已经存储在HDFS中,并具有一定格式的数据。使用外部表意味着hive表内的数据不在hive的数据仓库内,它会到仓库目录以外的位置访问数据,创建表和装数据同时完成。
  • 分区对应于表下的一个目录,所有的分区的数据都存储在对应的目录中。
  • 桶对指定列进行哈希(hash)计算,会根据哈希值切分数据,目的是为了并行每一个桶对应一个文件。

Hive应用场景

  • 日志分析:互联网公司使用hive进行日志分析,如搜索引擎和购物类商城包括等。

1)统计网站一个时间段内的pv、uv

2)多维度数据分析

  • 海量结构化数据离线分析


Hive的搭建

  • 下载 hive.apache.org,拷贝到linux,winscp 设置共享文件夹
  • 解压tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/programfile/
  • 配置环境变量(/etc/profile)
<code>export HIVE_HOME=/opt/programfile/hive
export PATH=$ PATH:$HIVE_HOME/bin
#使新的配置生效:source /etc/profile
#配置hive
cp hive-env.sh.template hive-env.sh
#修改配置(指定hadoop的路径,因为hive基于Hadoop运行的)
HADOOP_HOME=/opt/programfile/hadoop
export HIVE_CONF_DIR=/opt/programfile/hive/conf/<code>
<code>#开启集群
start-dfs.sh
start-yarn.sh

#配置数据仓库的存储路径(数据最终存储在HDFS上)(在HDFS上配置的路径)
#创建数据存储目录:
hdfs dfs -mkdir /tmp
hdfs dfs -mkdir -p /user/hive/warehouse
#修改权限:
hdfs dfs -chmod 777 /tmp
hdfs dfs -chmod 777 /user/hive/warehouse/<code>

Hive 与 HBase 整合

  • 使用 hive-hbase-handler-xxx.jar 包实现 Hive 与 HBase 关联。
  • Hive 读取的是 HBase 表最新的数据。
  • 通过 Hive 创建的 HBase 表的值默认只有一个 VERSION ,可之后再修改 HBase 表值的最大 VERSION 数。
  • Hive 只显示与 HBase 对应的列值,而那些没有对应的 HBase 列在 Hive 表中不显示。
  • Hive 表与 HBase 表关联后,数据可以在 Hive 端插入,也可在 HBase 中插入。
  • 创建 Hive 外部表与 HBase 的关联,可实现将 Hive 数据导入到 HBase 中。该方式是利用两者本身对外的 API 接口互相通信来完成的,在数据量不大(4T以下)的情况下可以选择该方式导入数据。


分享到:


相關文章: