余老师带你学习大数据-Spark快速大数据处理第五章第一节​Hive总体介绍

Hive是什么

Hive是大数据仓库的基本组件。右侧是用java写的MapReduce的Wordcount例子,使用SQL语句去实现数据的查询、数据的分析。左侧是SQL语句实现Wordcount,首先将每一行切开根据每一个单词Space,从file中hdfs文件,然后根据Word进行排列,这都是map形式,最后再计算每个Word的总量,根据Word进行Order。下方是将上方的语句分解为两个部分,将子查询单独开来,门槛较低,不用写java程序,也不需要调试。

这幅图是Wordcount的Python版本。左侧是Python的map和reduce。右侧是SQL语句实现。相对于SQL语句,Python也是复杂的。
所以说,用SQL语句作为大数据查询分析的语言,可以有效合理而且直观的组织和使用数据模型,以降低数据分析的门槛,这就是Hive能够发展起来的一个动力。但是,这并不说明其他语言的编程接口没有价值,它们所解决的层次是不一样的。在其他的数据处理框架,比如说,Spark、Flink都有对应的SQL语句相关的一些接口。SQL语句不仅仅可以在做批处理上用还可以进入动态表理论、流上使用SQL。并说明,不是其他语言做大数据处理没有价值,将会被SQL淘汰,因为解决问题的层次是不一样的,有一些问题,仍然需要java、Python这种表现力更丰富的语言去做处理。这些框架使用的语言任然是底层语言java语言来编写的,或者理解为用高级语言编写的数据处理效率会更高而且相应的框架会对原生的语言(java语言)支持或者融合度会更好。

Hive基本架构

Hive包括了三个部分,Hive的客户端、Hive的服务器、数据。Hive的客户端有三类,Thrift、JDBC、ODBC,通过客户端连接服务器,服务器经过一系列的Driver将查询驱动数据仓库,数据仓库是文件。Hive合作的事情是将在HDFS文件,一个个文件抽象成结构化数据的结构,然后用SQL语句去查询分析这些文件的内容。比如说做MapReduce,Hive的服务器将对应的查询SQL语言转化为一系列的MapReduce或者Tez以docker的形式提交给集群比如YARN集群去执行我们相应的数据处理程序。除了Hive Server之外,还可以通过Hive services提供的客户端,或者Web界面的形式去操作SQL语句。体系架构里面有个Metastore,是因为Hive上存的都是一个个文件,文件里是一行行数据或者一行行的记录。为了执行SQL语句,必须要了解数据的各式信息,所谓的元数据信息,这就是Metastore存的基本信息,它不存数据,数据存在HDFS里,Metastore存在关系型数据库里。

这是详细分析Metastore,可以有多个Metastore后端,MySQL是比较常用的,在Hive中提供了内置的Metastore,还有本地的方式也就是将MySQL部署在Hive Services所在的JVM的机器上,还支持远程的JVM去访问MySQL。将采用第三种方式,Hive Service不和MySQL在同一台机器上的部署方式。
Hive可以是计算引擎,唯一接触到数据的地方就是Metastore,存储的也仅仅是元数据,所有带分析的数据都存在的HDFS里面,由HDFS保证数据安全一致性。

和传统数据对比

Hive并不存储数据,仅仅存储元数据信息,数据都是以源文件的形式存储到HDFS中。在关系数据库中如果数据、描述丢失将很难恢复,但是在Hive中,HDFS数据没有丢失,Metastore丢失可以通过数据去恢复Metastore相对容易。
在传统的数据库中,表的模式是在数据加载时强制制定的。如果在加载时,发现数据不符合模式,加载肯定失败。Hive在查询时进行模式检查,在查询的时候才检查要查询的文件在元数据里面是否匹配,可以绕过Hive写入HDFS。这两种方法各有利弊,在Hive中是进入HDFS的,可以进行大数据量的。而传统的关系型数据库很难做到这一点。
性能不一样,Hive数据模式加载时非常快的,因为不需要检查数据格式信息,直接写到HDFS中。在传统数据中写入需要一条条的检查,但是有另一种优势,查询性能是非常高的,因为可以进行数据的索引。
传统型数据库是做事务处理的,Hive在做事务处理方面就不如传统数据库。Hive不支持更新、删除等。

详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注