【51cto】-大数据微职位-模块3:2泥沙俱下 披沙拣金 – Hive / Impala-第1章 1-1~1-3

By | 2019年1月31日

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/langhailove_2008/article/details/82155665

模块3:2泥沙俱下 披沙拣金 – Hive / Impala

第1章 第五周:Hadoop 集群数据查询与分析:Hive

  • 1-1查询数据与分析:Hive – Apache Hive 介绍
    这里写图片描述

    简单说明:该小节主要介绍了Hive组件的前世今生,hive的由来。
    首先,之前说的sqoop组件主要是把SQL(结构化的查询语言,通常数据都是保存在mysql中)导入到hadoop中;
    简单来说,其实就是把mysql中的数据导入到HDFS中存储(其实就是存成一些文件),然后通过MapReduce(只支持java来写)来处理这些文件数据(因为没法用sql查询文件数据)。如下图
    这里写图片描述
    为什么会出现hive组件呢?因为最早的时候Facebook的业务需要分析师懂业务的同时还需要会写sql,但是数据都存到HDFS后,sql就没法用了。分析师遇到了痛点,他们很多不会java没法写mapreduce作业。所以呢,就用java工程师开发了一个中间组件即hive来将分析师写的sql转化为MapReduce作业。这样分析师又可以愉快的玩耍了。hive并不是完整的关系型数据库,它只擅长OLAP即(On-Line Analysis Processing)在线分析处理是一种共享多维信息的快速分析技术(详细的概念可以参考OLAP了解),它并不擅长OLTP即联机事务处理(on-line transaction processing)(两者的区别可以参考这个OLAP、OLTP的介绍和比较)。Hive更像一个sql的翻译器(详见下图)。在大数据领域,hive就相当于大数据平台的数据仓库的应用。后来facebook捐赠给Apache,这才有了开源的Apache Hive组件应用。
    这里写图片描述

  • 1-2查询数据与分析:Hive – Hive 与 Hadoop 核心组件的关系

这里写图片描述
简单说明:SQL->HIve->MapReduce->HDFS Hive把sql语句转换成MapReduce作业
hive与hdfs的关系,就是HQL即hive的来操作HDFS的sql语句。HDFS并非通用的文件系统,作为专业的文件系统,只能被顺序的读取即streaming reading,因此HDFS不支持对某一个数据条目的删除和修改。所以HQL在某种程度上是受到限制的sql。
图中序号1指的是HDFS的数据读取的方式 streaming reading,如上解答。
图中序号2指的是HQL的SQL转化为MapReduce作业,其中sql中的关键字比如:select等可能会进入map,也可能进入reduce。当然map的数量都大于reduce的数量。也正因为如此,所以一般不在map里做排序的操作,而在reduce中才做排序的操作。这样可以提高性能。
图中序号3指的是基于hive转化为MR,而MR通常是很慢的,所以hive的执行通常也比较慢,即无法及时响应。所以更多的作为一种批处理作业在跑,但是为了优化这种问题。出现了hive on spark/tez等新型的计算引擎。较之于MR,具有更好的及时响应即交互性更好。

  • 1-3查询数据与分析:Hive – Hive SQL 的 SQL 标准

这里写图片描述
因为HDFS在底层存储是块存储,所以不支持对条目的修改或删除。即上图的update和delete操作。但是HQL还是遵循一部分SQL标准的(比如:SQL92标准),只不过是一个交集的关系,只遵循一部分标准(比如:select等操作)。不遵循的其实就是update和delete的部分。
但其实最新的Hive2已经“支持”update和delete的了,只是它的这种支持是update和delete的数据先存成一个块,如上图,然后再和原数据checkpoint—显得稍微麻烦些。
最后其实hive是支持insert操作的–即类似于append()在最后。

发表评论