Hadoop, HDFS, Hive, Hbase, Impala 之间的关系
什么是 Hadoop
Apache Hadoop 软件库是一个框架,它允许使用简单的编程模型,实现跨计算机集群的大型数据集的分布式处理。它最初的设计目的是为了检测和处理应用程序层的故障,从单个机器扩展到数千台机器(这些机器可以是廉价的),每个机器提供本地计算和存储,而不是依靠硬件提供高可用性。
Hadoop 中有3个核心组件:
分布式文件系统:HDFS —— 实现将文件分布式存储在很多的服务器上
分布式运算编程框架:MapReduce —— 实现在很多机器上分布式并行运算
分布式资源调度平台:YARN —— 帮用户调度大量的 MapReduce 程序,并合理分配运算资源
什么是 HDFS
HDFS,是 Hadoop Distributed File System 的简称,是 Hadoop 抽象文件系统的一种实现。Hadoop 抽象文件系统可以与本地系统、Amazon S3 等集成,甚至可以通过 Web 协议(webhsfs)来操作。
HDFS 的文件分布在集群机器上,同时提供副本进行容错及可靠性保证。
大数据文件:非常适合上 T 级别的大文件或者一堆大数据文件的存储,如果文件只有几个 G 甚至更小就不太适用。
文件分块存储:HDFS 会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多。
流式数据访问:一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
廉价硬件:HDFS 可以应用在普通 PC 机上,这种机制能够让一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
硬件故障:HDFS 认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
什么是 Hive
Hive 它依赖分布式文件系统 HDFS 存储数据,依赖分布式并行计算模型 MapReduce 处理数据。是一个构建于 Hadoop 顶层的数据仓库工具,支持大规模数据存储、分析,具有良好的可扩展性。
Hive 定义了简单的类似 SQL 的查询语言——HiveQL,用户可以通过编写的 HiveQL 语句运行 MapReduce 任务,可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到 Hadoop 平台上。
Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高;另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架,由于 MapReduce 本身具有较高的延迟。
什么是 HBase
HBase 是 Hadoop Database 即Hadoop数据库,数据通常存储在 HDFS 上,HDFS 为 HBase 提供了高可靠性的底层存储支持。
它是一个适合于非结构化数据存储的数据库,基于列的而不是基于行的模式,同样利用 Hadoop MapReduce 来处理其中的海量数据。
HDFS 为 HBase 提供了高可靠性的底层存储支持
Hadoop MapReduce 为 HBase 提供了高性能的计算能力
Zookeeper 为 HBase 提供了稳定服务和 failover 机制
Pig 和 Hive 为 HBase 提供了高层语言支持,使得在 HBase 上进行数据统计处理变的非常简单
使用场景对比:
对于经常需要修改原有的数据的场景,使用 Hbase 进行存储
对于需要经常进行全表扫描、进行大批量的查询的场景,选择 HDFS
什么是 Impala
Impala 是一个运行在 Hadoop 之上的大规模并行处理(MPP)查询引擎,提供对 Hadoop 集群数据的高性能、低延迟的 SQL 查询,使用 HDFS 作为底层存储。
为什么用 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是协作关系,数据流一般如下:
通过ETL工具将数据源抽取到HDFS存储;通过Hive清洗、处理和计算原始数据;HIve清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase, 数据应用从HBase查询数据。
参考:
https://zhuanlan.zhihu.com/p/483077758
https://www.icode9.com/content-4-1080654.html
https://www.csdn.net/tags/OtTacgysNjc3Ni1ibG9n.html