大象教程
首页
Spark
Hadoop
HDFS
MapReduce
Hive
Hive 教程
Hive 教程
Hive 安装(基于Ubuntu系统)
Hive 架构
Hive 内置函数
Hive UDF 简介
Hive DDL 命令
Hive 视图
Hive 索引
Hive Metastore 的三种配置方式
Hive 数据模型
Hive 数据类型
Hive 操作符
Hive SerDe(序列化与反序列化)
Hive 数据分区
Hive 分桶
Hive 分区与分桶的比较
Hive Join 的原理与机制
Hive map Join
Hive bucket map join
#Hive 教程 Hive 是一个架构在 Hadoop 之上的数据仓库基础工具,它可以处理结构化和半结构化数据,它使得查询和分析存储在 Hadoop 上的数据变得非常方便。 在没有 Hive 之前,处理数据必须开发复杂的 MapReduce 作业,但现在有了 Hive,你只要开发简单的 SQL 查询就可以达到 MapReduce 作业同样的查询功能。Hive 主要针对的是熟悉 SQL 的用户。Hive 使用的查询语言称为 HiveQL(HQL),它跟 SQL 很像。HiveQL 自动把类 SQL 语句转换成 MapReduce 作业。Hive 对 Hadoop 的复杂性简单化了,而且使用 Hive 并不需要你学习 Java 语言。 Hive 一般在终端执行,并且把 SQL 语句转换成一系列能在 Hadoop 集群执行作业。Apache Hive 可以让存储在 HDFS 的数据以表的方式呈现。 ##Apache Hive 历史简介 Hive 由 Facebook 的技术团队开发的,Apache Hive 是众多满足 Facebook 业务需求的技术之一。它非常受 Facebook 内部所有用户的欢迎。它可以开发各种数据相关的应用,并且运行在具有数百个用户的集群之上。Facebook 的 Apache Hadoop 集群存储超过 2PB 的原始数据,并且每天定期加载 15TB 的数据。现在 Hive 被很多大公司使用并完善,比如亚马逊,IBM,雅虎,Netflix 等等大公司。 ##为什么使用 Apache Hive 在 Apache Hive 实现之前,Facebook 已经面临很多挑战,比如随着数据的爆炸式增长,要处理这些数据变得非常困难。而传统的关系型数据库面对这样海量的数据可以说无能为力。Facebook 为了克服这个难题,开始尝试使用 MapReduce。但使用它需要具备 java 编程能力以及必须掌握 SQL,这使得该方案变得有些不切实际。而 Apache Hive 可以很好的解决 Facebook 当前面临的问题。 Apache Hive 避免开发人员给临时需求开发复杂的 Hadoop MapReduce 作业。因为 hive 提供了数据的摘要、分析和查询。Hive 具有比较好的扩展性和稳定性。有、由于 Hive 跟 SQL 语法上比较类似, 这对于 SQL 开发人员在学习和开发 Hive 时成本非常低,比较容易上手。Apache Hive 最重要的特性就是不会 Java,依然可以用好 Hive。 ##Hive 架构 ![Hive架构图](/media/editor/file_1570081339000_20191003134221206440.png "Hive架构图") 由上图可知,Hadoop 和 MapReduce 是 Hive 架构的根基。 Hive 架构包括如下组件: - CLI(command line interface) - JDBC/ODBC - Thrift Server - WEB GUI - Metastore - Driver(Complier、Optimizer 和 Executor) 这些组件可以分为两大类: ###服务端组件 - **Driver 组件**:该组件包括 Complier、Optimizer 和 Executor,它的作用是将 HiveQL 语句进行解析、编译优化,生成执行计划,然后调用底层的 MapReduce 计算框架。 - **Metastore 组件**:元数据服务组件,这个组件存储 Hive 的元数据,hive 的元数据存储在关系数据库里,hive 支持的关系数据库有 derby、mysql。元数据对于 hive 十分重要,因此 hive 支持把 metastore 服务独立出来,安装到远程的服务器集群里,从而解耦 hive 服务和 metastore 服务,保证 hive 运行的健壮性。 - **Thrift 服务**:thrift 是 facebook 开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive 集成了该服务,能让不同的编程语言调用 hive 的接口。 ###客户端组件 - **CLI**:command line interface,命令行接口。 - **Thrift 客户端**:上面的架构图里没有写上 Thrift 客户端,但是 hive 架构的许多客户端接口是建立在 thrift客户端之上,包括 JDBC 和 ODBC 接口。 - **WEB GUI**:hive 客户端提供了一种通过网页的方式访问 hive 所提供的服务。这个接口对应 hive 的 hwi 组件(hive web interface),使用前要启动 hwi 服务。 ![Hive架构组件](/media/editor/file_1570081501000_20191003134501543078.png "Hive架构组件") ##Hive Shell shell 是我们和 Hive 交互的主要方式,我们可以在 Hive shell 执行 HiveQL 语句以及其他命令。Hive Shell 非常像 MySQL shell,它是 Hive 的命令行接口。HiveQL 跟 SQL 一样也是不区分大小写的。我们可以以两种方式执行 Hive Shell:非交互式模式和交互式模式: - **非交互式模式 Hive**:Hive Shell 可以以非交互式模式执行。只要使用 -f 选项并指定包含 HQL 语句的文件的路径。如:hive -f my-script.sql - **交互式模式 Hive**:所谓交互式模式,就是在 Hive Shell 直接执行命令,Hive 会在 shell 返回执行结果。只要在 Linux Shell 输入 hive 即可进去交互式模式 hive shell。 ![Hive Shell](/media/editor/file_1570081610000_20191003134649899392.png "Hive Shell") ##Apache Hive 的特性 Hive 有很多特性,然我们来一个个看一下: - Hive 以简单的方式提供数据摘要,数据查询和数据分析能力。 - Hive 支持外部表,这使得它可以处理未存储在 HDFS 的数据。 - Apache Hive 非常适合 Hadoop 的底层接口需求。 - 支持数据分区 - Hive 有一个基于规则的优化器,负责优化逻辑计划。 - 可扩展性以及可伸缩性 - 使用 HiveQL 不需要深入掌握编程语言,只有掌握基本的 SQL 知识就行,使用门槛较低。 - 处理结构化数据。 - 使用 Hive 执行即时查询做数据分析。 ##Apache Hive 局限性 Hive 具有以下局限性: - Hive 不支持实时查询和行级更新。 - 高延迟。 - 不适用于在线事务处理。
加我微信交流吧