Hadoop
Hadoop 生态圈(或者泛生态圈)是一个能够对大量数据进行分布式处理的软件框架,是大数据平台的开发工具,但不是一个单一的工具,也不是一种单一的技术,而是一系列技术和工具的合集。用户在不需要了解分布式底层细节的情况下,能够开发分布式程序。
Hadoop大数据平台,采用分布式架构,包含多个与大数据处理相关的组件:HDFS、MapReduce、Yarn、Hbase、Hive、Spark、Kafak、Storm、HDF、Ambari等,并根据用户的实际需求完成功能定制。
Hadoop框架中其中最核心的组件有三个:HDFS、MapReduce和Yarn。HDFS为海量数据提供了存储,而MapReduce则为海量的数据提供了计算,Yarn为海量数据的处理提供了良好的系统调度。
以下是Hadoop生态中的成员:
HDFS
传统的文件系统是单机的,不能横跨不同的机器。HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。
HDFS是Hadoop体系中数据存储管理的基础,它是一个高度容错的系统,能检测和应对硬件故障,在低成本的通用硬件上运行。HDFS简化了文件的一次性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适用带有数据集的应用程序。HDFS提供一次写入多次读取的机制,数据以块的形式,同时分布存储在不同的物理机器上。
比如你说我要获取/hdfs/tmp/file1 的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS 为你管理这些数据。
MapReduce
虽然 HDFS 可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成 T上P的数据,也许需要好几天甚至好几周。如果要用很多台机器处理,就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。
MapReduce是第一代计算引擎。MapReduce是一种分布式计算模型,用以进行海量数据的计算。它屏蔽了分布式计算框架细节,将计算抽象成Map 和Reduce两部分,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce非常适合在大量计算机组成的分布式并行环境里进行数据处理。
Spark
Tez和Spark是第二代计算引擎。除了内存 Cache 之类的新 feature,本质上来说,是让 Map/Reduce 模型更通用,让 Map 和 Reduce 之间的界限更模糊,数据交换更灵活,更少的磁盘读写,以便更方便地描述复杂算法,取得更高的吞吐量。
有了 MapReduce之后,程序员发现,MapReduce 的程序写起来真麻烦。之前的 Map Reduce 类似于汇编语言,那么现在的 spark 就类似于 python 了,功能和 Map Reduce 类似,但是对于开发人员更加的友好,更方便使用。
大数据处理框架,是Hadoop生态中发展迅速的成员。Spark的核心在于内存计算模型直指“同门产品”——MapReduce离线计算模型。MapReduce是单流程的优秀解决方案,在数据处理过程中每一步都要经过Map阶段和Reduce阶段,对于需要多流程计算和算法的用例来说,并非十分高效。作为一个批处理工具,MapReduce更适合做离线处理,而Spark是在内存中处理数据,可以处理实时数据。
MapRedcue先于Spark出现,也曾风骚一时。当初MapReduce选择磁盘,除了要保证数据存储安全之外,另一个主要原因是大容量内存的价格高昂,如果一开始就选择基于内存的解决方案,可能很难推广。而Spark的出现赶上了好时候,中大型公司有能力部署多台大内存机器,可以直接处理线上数据。
Hive
你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了 Hive。
Hive 用 SQL 描述 MapReduce。它把脚本和 SQL 语言翻译成 MapReduce 程序,丢给计算引擎去计算,而你就从繁琐的 MapReduce 程序中解脱出来,用更简单更直观的语言去写程序了。之前直接利用 spark 需要处理 map 和 reduce 的过程对于使用者来说都是隐形的了,就像使用本地数据库一样使用大数据文件。
例如wordcount 任务来说,通过 hive,我们可以通过几句 SQL 语句就可以达到类似的目的。类似于:
select word, count(*) from word_table group by word;
SqarkSQL 和 Hive on Spark
自从数据分析人员开始用 Hive 分析数据之后,它们发现,Hive 在 MapReduce 上跑,很慢!
它们的设计理念是,MapReduce 慢,但是如果我用新一代通用计算引擎 Tez 或者 Spark 来跑 SQL,那我就能跑的更快。而且用户不需要维护两套系统。
Yarn
有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统,现在最流行的是 Yarn。
Yarn它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
參考:
- https://blog.csdn.net/bandaoyu/article/details/83312811
- https://blog.csdn.net/qq_33431394/article/details/108703551
- https://blog.csdn.net/wyqwilliam/article/details/81913740
- https://coffee.pmcaff.com/article/2451386325500032/pmcaff?utm_source=forum&newwindow=1
- https://developer.aliyun.com/ask/134710
- https://ld246.com/article/1583213406178