Hadoop生态及Hive、HBase、Impala、HDFS之间的关系
Hadoop生态(什么是 Hadoop)
Apache Hadoop软件库是一个框架,允许使用简单的编程模型在计算机集群之间对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是旨在检测和处理应用程序层的故障,因此在计算机群集(每台计算机都可能容易出现故障)之上提供高可用性服务。
适用场景:离线数据开发与存储
Hadoop 中有3个核心组件:
分布式文件系统:HDFS —— 实现将文件分布式存储在很多的服务器上
分布式运算编程框架:MapReduce —— 实现在很多机器上分布式并行运算
分布式资源调度平台:YARN —— 帮用户调度大量的 MapReduce 程序,并合理分配运算资源
什么是 HDFS
HDFS的英文全称是Hadoop Distributed File System,即Hadoop分布式文件系统,它是Hadoop的核心子项目。HDFS被设计成适合运行在通用和廉价硬件上的分布式文件系统。HDFS是为了处理大型数据集而设计的,主要是为达到高的数据吞吐量而设计的,延迟时间通常是在分钟乃至小时级别。
HDFS,是 Hadoop Distributed File System 的简称,是 Hadoop 抽象文件系统的一种实现。Hadoop 抽象文件系统可以与本地系统、Amazon S3 等集成,甚至可以通过 Web 协议(webhsfs)来操作。
HDFS 的文件分布在集群机器上,同时提供副本进行容错及可靠性保证。
大数据文件:非常适合上 T 级别的大文件或者一堆大数据文件的存储,如果文件只有几个 G 甚至更小就不太适用。
文件分块存储:HDFS 会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多。
流式数据访问:一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
廉价硬件:HDFS 可以应用在普通 PC 机上,这种机制能够让一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
硬件故障:HDFS 认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
适用场景:作为数据的底层存储,以高可用的方式存储大文件
MapReduce
MapReduce是Google公司的核心计算模型,它将运行于大规模集群上的复杂并行计算过程高度地抽象为两个函数:Map和Reduce。Hadoop是Doug Cutting受到Google发表的关于MapReduce的论文的启发而开发出来的。Hadoop中的MapReduce是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并能可靠容错地并行处理TB级别的数据集。
适用场景:对响应时间要求低的大数据量计算
什么是 Hive
Hive 它依赖分布式文件系统 HDFS 存储数据,依赖分布式并行计算模型 MapReduce 处理数据。是一个构建于 Hadoop 顶层的数据仓库工具,支持大规模数据存储、分析,具有良好的可扩展性。
Hive 定义了简单的类似 SQL 的查询语言——HiveQL,用户可以通过编写的 HiveQL 语句运行 MapReduce 任务,可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到 Hadoop 平台上。
Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高;另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架,由于 MapReduce 本身具有较高的延迟。
Hive 是一个构建于 Hadoop 顶层的数据仓库工具,支持对接查询存储在HDFS、HBase中文件,具有良好的可扩展性。某种程度上可以看作是用户编程接口,本身不存储和处理数据。实际的数据保存在HDFS文件中,真正的计算和执行则由MapReduce完成(也可以通过 Apache Tez、Apache Spark执行查询)。Hive 定义了简单的类似 SQL 的查询语言——Hive SQL,用户通过编写的 Hive SQL 语句运行 MapReduce 任务,其许多语法兼容Oracle、DB2、MySQL、SQL Server等,所以用户在某些场景下用户可以快速将构建在关系数据库上的数据仓库应用程序移植到 Hadoop 平台上。
关于分区:Hive Select查询时,一般会扫描整个表内容。随着系统运行的时间越来越长,表的数据量越来越大,而hive查询做全表扫描,会消耗很多时间,降低效率。而有时候,我们需求的数据只需要扫描表中的一部分数据即可。这样,hive在建表时引入了分区(partition)概念。即在建表时,将整个表存储在不同的子目录中,每一个子目录对应一个分区。在查询时,我们就可以指定分区查询,避免了hive做全表扫描,从而提高查询效率。
原理:Hive是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员使用他们最为熟悉的SQL语言就可以进行海量数据的处理、分析和统计工作,而不是必须掌握Java等编程语言和具备开发MapReduce程序的能力。Hive SQL实际上先被SQL解析器进行解析然后被Hive框架解析成一个MapReduce可执行计划,并按照该计划生成MapReduce任务后交给Hadoop集群处理的。
注意:Hive 并不是一个关系数据库。Hive 中没有定义专门的数据格式,需要由用户指定三个属性:列分隔符、行分隔符 、读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 ORCFile)。Hive 在查询数据的时候,由于没有索引,需要扫描整个表Hive SQL,因此延迟较高;另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架,由于 MapReduce 本身具有较高的延迟,因此在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟(相对的,数据库的执行延迟较低,当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势)。
适用场景:长时间的批处理查询分析
什么是 HBase
HBase 是 Hadoop Database 即Hadoop数据库,数据通常存储在 HDFS 上,HDFS 为 HBase 提供了高可靠性的底层存储支持。
它是一个适合于非结构化数据存储的数据库,基于列的而不是基于行的模式,同样利用 Hadoop MapReduce 来处理其中的海量数据。
HDFS 为 HBase 提供了高可靠性的底层存储支持
Hadoop MapReduce 为 HBase 提供了高性能的计算能力
Zookeeper 为 HBase 提供了稳定服务和 failover 机制
Pig 和 Hive 为 HBase 提供了高层语言支持,使得在 HBase 上进行数据统计处理变的非常简单
使用场景对比:
对于经常需要修改原有的数据的场景,使用 Hbase 进行存储
对于需要经常进行全表扫描、进行大批量的查询的场景,选择 HDFS
HBase是一个开源的、分布式的、持久的、强一致性的数据存储系统(NoSQL数据库),可以在HDFS或Alluxio(VDFS)之上运行,具有近似最优的写性能和出色的读性能,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等,此开源项目的目标是在商品硬件集群上托管非常大的表——数十亿行X数百万列。
HBase不是关系型数据库,而是一个在HDFS上开发的面向列的分布式数据库,不支持SQL。
HBase为查询而生的,它通过组织起节点内所有机器的内存,提供一個超大的内存Hash表 。
HBase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
HBase是列存储。
对于那些有低延时要求的应用程序,HBase是一个好的选择,尤其适用于对海量数据集进行访问并要求毫秒级响应时间的情况,但HBase的设计是对单行或者少量数据集的访问,对HBase的访问必须提供主键或者主键范围。访问接口:Hive、Pig、REST Gateway、HBase Shell、Native Java API、Thrift Gateway
适用场景:对具有高吞吐量和低输入/输出延迟的大型数据集进行快速读写操作
什么是 Impala
Impala 是一个运行在 Hadoop 之上的大规模并行处理(MPP)查询引擎,提供对 Hadoop 集群数据的高性能、低延迟的 SQL 查询,使用 HDFS 作为底层存储。
Impala可以直接对接存储在HDFS、HBase 或亚马逊S3中的Hadoop数据,提供快速、交互式的 SQL 查询,提高 APACHE Hadoop 上的SQL查询性能。Impala 使用与 Hive 相同的元数据、SQL 语法(Hive SQL)、ODBC 驱动程序和用户界面(Hue Beeswax),因此,Hive用户只需很少的设置成本,即可使用Impala。
原理:为了避免延迟,Impala绕过MapReduce,通过一个专门的分布式查询引擎直接访问数据,该引擎与商业并行RDBMS中的查询引擎非常相似。结果是性能比 Hive 快几个数量级,具体取决于查询类型和配置。
Impala 是对大数据查询工具的补充。Impala不会取代在MapReduce上构建的批处理框架(例如Hive)。Impala 可以读取和写入 Hive 表,从而使用 Impala 实现简单的数据交换,从而对 Hive 生成的数据进行分析。
注:安装impala的话,必须先安装hive,保证hive安装成功,并且还需要启动hive的metastore服务。
适用场景:大数据实时交互式 SQL 查询
为什么用 Impala
Impala 可以使用 SQL 访问存储在 Hadoop 上的数据,而传统的 MapReduce 则需要掌握 Java 技术
Impala 提供 SQL 直接访问 HDFS 文件系统、HBase 数据库系统或 Amazon S3 的数据
Impala 大都能在几秒或几分钟内返回查询结果,而相同的 Hive 查询通常需要几十分钟甚至几小时完成
Impala 的实时查询引擎非常适合对 Hadoop 文件系统上的数据进行分析式查询
Impala适用场景
a.需要低延迟得到查询结果
b.快速分析型查询
c.实时查询
d.需要多次处理相同类型的查询
HDFS与Hive、HBase三者之间的关系:
- HDFS是Hadoop的一个模块,主要负责数据存储,而Hadoop另一个模式是MapReduce,用于离线数据计算。
- Hive依赖于Hadoop,实际存储是依赖于Hadoop的HDFS模块,计算依赖于Hadoop的Mapreduce模块。
- Hive的数据源既可以来自HDFS,也可以来自于HBase。
- HBase则只是依赖于Hadoop的HDFS模块, 优势在于实时计算,通过API直接访问HBase,实现实时计算,由于使用的是nosql模式(列式结构),从而提高了查找性能,使其能运用于大数据场景,这是它跟MapReduce的区别。
基于以上的研究,对Hive、HBase、Impala、HDFS之间的关系做一个简单的分析总结:
1、Hive的使用虽然和关系型数据库类似,但是其本质上是建立在Hadoop体系架构上的一层SQL抽象,自身不存储和处理数据,实际数据保存在HDFS文件中,真正的计算和执行则由MapReduce完成;
2、Impala是Hive的补充,可以读取和写入 Hive 表,依赖Hive的元数据,自身不存储数据。Impala提供的有一个分布式查询引擎;
3、HBase是列存储的NoSQL数据库,主要提供接口的形式与外界交互,数据保存在HDFS上,也支持使用Hive直接访问HBase;
4、HDFS是Hadoop生态最底层的存储,Hive、Impala、HBase都建立在HDFS之上。
最后-应用场景
在大数据架构中,Hive和HBase是协作关系,数据流一般如下:
通过ETL工具将数据源抽取到HDFS存储;通过Hive清洗、处理和计算原始数据;HIve清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase, 数据应用从HBase查询数据。
Hive与MySQL关系
Hive可以分析结构化数据,它提供了一种HiveSQL来帮助用户处理数据,HiveSQL会转化成MapReduce程序,因为MapReduce效率是基于磁盘的,所以效率会比较低。但是它在离线数据处理方面还是有优势的,可以处理数据量非常大的数据,所以数据仓库的离线部分还是会基于Hive做计算的。
Hive与MySQL关系:在配置Hive之后一般都会安装和配置MySQL,那它们到底什么关系呢?如果默认不配置mysql的话,hive的元数据是存储在微型数据库Derby中,真正的数据是存储在HDFS上。
先来说一下Derby,derby是使用Java语言编写的一个微型,常用于内嵌在Java中的数据库!derby同一个数据库的实例文件不支持多个客户端同时访问!也就是说在操作hive的时候只能通过一个客户端来操作hive,显然在真正的生产中是不合适的,所以我们会联想到其他数据库如mysql,因为mysql是多用户而且还是免费的,所以Hive的元数据存储到mysql比较适合。
MapReduce
Hive架构优点及使用场景
在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理。今天我们的大数据入门分享,就主要来讲讲,Hive应用场景。
关于Hive,首先需要明确的一点就是,Hive并非数据库,Hive所提供的数据存储、查询和分析功能,本质上来说,并非传统数据库所提供的存储、查询、分析功能。
e数据仓库工具将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。通过类SQL语句实现快速MapReduce统计,使MapReduce编程变得更加简单易行。
Hive应用场景
总的来说,Hive是十分适合数据仓库的统计分析和Windows注册表文件。
Hive在Hadoop中扮演数据仓库的角色。Hive添加数据的结构在HDFS(Hive superimposes structure on data in HDFS),并允许使用类似于SQL语法进行数据查询。
Hive更适合于数据仓库的任务,主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。
Hive使用
Hive在Hadoop之上,使用Hive的前提是先要安装Hadoop。
Hive要分析的数据存储在HDFS,Hive为数据创建的表结构(schema),存储在RDMS(relevant database manage system关系型数据库管理系统,比如mysql)。
Hive构建在基于静态批处理的Hadoop之上,Hadoop通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive在几百MB的数据集上执行查询一般有分钟级的时间延迟。
Hive查询操作过程严格遵守Hadoop MapReduce的作业执行模型,Hive将用户的HiveQL语句通过解释器转换为MapReduce作业提交到Hadoop集群上,Hadoop监控作业执行过程,然后返回作业执行结果给用户。Hive的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。
ive优缺点
优点:
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。
Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
缺点:
1.Hive的HQL表达能力有限
(1)迭代式算法无法表达递归算法
(2)数据挖掘方面不擅长(数据挖掘和算法机器学习)
2.Hive的效率比较低
(1)Hive自动生成的MapReduce作业,通常情况下不够智能化
(2)Hive调优比较困难,粒度较粗(快)
关于大数据入门,Hive应用场景,以上就为大家做了大致的介绍了。在大数据应用场景下,Hive更多是作为Hadoop的一个数据仓库工具,并不直接存储数据,但是却不可或缺。