在数据量很大的情况下,单机的处理能力无法胜任,必须采用分布式集群的方式进行处理,而用分布式集群的方式处理数据,实现的复杂度呈级数增加。
早在 2003 年的时候,Google 就已经面对大于 600 亿的搜索量。但是数据的大规模处理技术还处在彷徨阶段。当时每个公司或者个人可能都有自己的一套工具处理数据。却没有提炼抽象出一个系统的方法。
在海量数据处理的需求下,一个通用的分布式数据处理技术框架应运而生。大数据技术主要始于Google的两篇论文:
2003年《The Google File System》2004年《MapReduce: Simplified Data Processing on Large Clusters》
Google 的分布式计算模型相比于传统的分布式计算模型有 3 大优势:
简化了传统的分布式计算理论,降低了技术实现的难度,可以进行实际的应用。可以应用在廉价的计算设备上,只需增加计算设备的数量就可以提升整体的计算能力,应用成本十分低廉。被应用在 Google 的计算中心,取得了很好的效果,有了实际应用的证明。
后来,各家互联网公司开始利用 Google 的分布式计算模型搭建自己的分布式计算系统,Google 论文也就成为大数据时代的技术核心。当时 Google 采用分布式计算理论也是为了利用廉价的资源,使其发挥出更大的效用。Google 的成功使人们开始效仿,从而产生了开源系统 Hadoop。
二、功能组件 2.1 组件简介Apache Hadoop是用于处理(计算分析)海量数据的技术平台,并且是采用分布式集群的方式。Apache Hadoop有两大功能:
提供超大量数据的存储服务。提供分析超大量数据框架及运行平台。Apache Hadoop三大核心组件:
HDFS:hadoop分布式文件系统海量数据存储(集群服务)。MapReduce:分布式运算框架(编程框架),海量数据运算分析。YARN:资源调度管理集群(可以理解为一个分布式的操作系统,管理和分配集群硬件资源)。2.2 HDFS介绍
HDFS - Hadoop Distributed File System Hadoop分布式文件系统
特点:
可扩展,可容错、可海量的存储数据;将文件切分成指定大小的数据块(一般默认128M),并以多副本的存储在多个机器上;(达到容错目的)数据切分、多副本、容错等操作对用户是透明的;
HDFS主要由NameNode、DataNode、Client三部分组成。
NameNode:负责管理文件的路径、属主等信息DataNode:负责管理每个数据节点上的数据存储Client:面向用户提供对文件的读写操作
2.3 MapReduce介绍
MapReduce - 分布式计算框架;
特点:
可扩展、可容错、做海量数据离线处理(不能实时处理);
MapReduce其实是一种编程模型。这个模型的核心步骤主要分两部分:Map(映射)和Reduce(归约)。
当用户向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。
YARN - Yet Another Resource Negotiator 资源管理器,负责整个Hadoop集群资源的管理和调度;
特点:
可扩展,计算能力不足时可添加机器可容错多框架资源统一调度,可以跑不同的框架,进而可以进行针对不同的业务
三、Hadoop生态
Apache Hadoop是最基础的设施,只是提供了大数据存储的基础能力以及分布式计算的通用框架,业界通常不会直接使用Apache Hadoop的接口来进行开发。Hadoop的接口过于复杂,社区在此基础上开发了Apache Hive、Apache Spark这些更容易使用的框架,让数据分析师可以更方便地进行日常的数据开发。
3.1 Apache HiveHive是Hadoop中的一个重要子项目,最早由Facebook设计,是建立在Hadoop基础上的数据仓库架构,它为数据仓库的管理提供了许多功能,包括:数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询和分析能力。
Hive提供的是一种结构化数据的机制,定义了类似于传统关系数据库中的类SQL语言:Hive QL,通过该查询语言,数据分析人员可以很方便地运行数据分析业务。
3.2 Apache SparkSpark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。