Hadoop介绍
需要Hadoop的初衷是:信息的爆炸式增长需要一种系统能够高效地存储管理和分析大量数据。采用的方法就是通过分布式存储方式来提高读写速度和扩大存储容量;用MapReduce整合分布式文件系统上的数据,保证高速分析处理数据;另外Hadoop这种系统还采用存储冗余数据来保证数据的安全性。
Hadoop的优势
- 高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖
- 高扩展性:Hadoop是在可用的机损己簇间分配数据完成计算任务的,这些集簇可以方便地扩展到数以千亿计的节点中
- 高效性:Hadoop能够在节点之间动态地移动数据,以保证各个节点的动态平衡,因此其处理速度非常快
- 高容错性:Hadoop能够自动保存数据的多分份副本,并且能够自动将失败任务重新分配
Hadoop核心架构
这里核心架构是三件套:HBase、MapReduce、HDFSHDFS
HDFS是分布式计算的存储基石.
整个HDFS有三个重要角色:NameNode(名称节点)、DataNode(数据节点)和Client(客户机)。
NameNode:是Master节点,可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。
DataNode:是Slave节点(从节点),是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。
Client:切分文件;访问HDFS;与NameNode交互,获得文件位置信息;与DataNode交互,读取和写入数据。
块的概念:
Block是HDFS中的基本读写单元;HDFS中的文件都是被切割为block(块)进行存储的;这些块被复制到多个DataNode中;块的大小(通常为64MB)和复制的块数量在创建文件时由Client决定。
HDFS的读写过程
首先是写入流程:
1 用户向Client(客户机)提出请求。例如,需要写入200MB的数据。
2 Client制定计划:将数据按照64MB为块,进行切割;所有的块都保存三份。
3 Client将大文件切分成块(block)。
4 针对第一个块,Client告诉NameNode(主控节点),请帮助我,将64MB的块复制三份。
5 NameNode告诉Client三个DataNode(数据节点)的地址,并且将它们根据到Client的距离,进行了排序。
6 Client把数据和清单发给第一个DataNode。
7 第一个DataNode将数据复制给第二个DataNode。
8 第二个DataNode将数据复制给第三个DataNode。
9 如果某一个块的所有数据都已写入,就会向NameNode反馈已完成。
10 对第二个Block,也进行相同的操作。
11 所有Block都完成后,关闭文件。NameNode会将数据持久化到磁盘上。
读取流程:
1 用户向Client提出读取请求。
2 Client向NameNode请求这个文件的所有信息。
3 NameNode将给Client这个文件的块列表,以及存储各个块的数据节点清单(按照和客户端的距离排序)。
4 Client从距离最近的数据节点下载所需的块。
(注意:以上只是简化的描述,实际过程会更加复杂。)
MapReduce
MapReduce 就是一种编程模型.这个模型的核心步骤主要分两部分:Map(映射)和Reduce(归约)
当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。
举个例子
上图是一个统计词频的任务。
1 Hadoop将输入数据切成若干个分片,并将每个split(分割)交给一个map task(Map任务)处理。
2 Mapping之后,相当于得出这个task里面,每个词以及它出现的次数。
3 shuffle(拖移)将相同的词放在一起,并对它们进行排序,分成若干个分片。
4 根据这些分片,进行reduce(归约)。
5 统计出reduce task的结果,输出到文件。
在MapReduce里,为了完成上面这些过程,需要两个角色:JobTracker和TaskTracker。
JobTracker用于调度和管理其它的TaskTracker。JobTracker可以运行于集群中任一台计算机上。TaskTracker 负责执行任务,必须运行于 DataNode 上。
HBase
HBase 名称的由来是由于其作为 Hadoop Database 存在的,用来存储非结构化、半结构化数据。
HBase是构建在 HDFS 之上的,这是由于 HBase 内部管理的文件全部都是存储在HDFS当中的。同时,MapReduce这个计算框架在HBase之上又提供了高性能的计算能力来处理海量数据。此外还有一些像 Pig、Hive 用来提供高层语言的支持。还有 Sqoop 用来完成传统数据库到 HBase 之间的数据迁移。
Hive
Hive是建立在Hadoop上的数据仓库基础框架。他提供了一系列的工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL的查询语言,称为Hive QL,他允许熟悉SQL的用户用SQL语言查询数据。作为一个数据仓库,Hive的数据管理按照使用层次可以从元数据存储、数据存储和数据交换三方面来介绍。
部署Hadoop
Hadoop 主要有以下三种部署模式:
单机模式:在单台计算机上以单个进程的模式运行。
伪分布式模式:在单台计算机上以多个进程的模式运行。该模式可以在单节点下模拟“多节点”的场景。
完全分布式模式:在多台计算机上分别以单个进程的模式运行。
Spark
有时候还会听到一个叫Spark的玩意儿。它是加州大学伯克利分校AMP实验室所开源的类Hadoop MapReduce的通用并行框架。
Spark只是分布式计算平台,而Hadoop已经是分布式计算、存储、管理的生态系统
而要说对应,与Spark相对应的应该是Hadoop MapReduce。
Spark是面向内存的。这使得Spark能够为多个不同数据源的数据提供近乎实时的处理性能,适用于需要多次操作特定数据集的应用场景。
MapReduce是面向磁盘的。因此,受限于磁盘读写性能的约束,MapReduce在处理迭代计算、实时计算、交互式数据查询等方面并不高效。但是,这些计算却在图计算、数据挖掘和机器学习等相关应用领域中非常常见。
Spark的优势主要体现在以下5个方面:
1、更快的计算速度。采用计算中间结果的内存缓存机制和基于DAG的数据处理过程优化策略,进一步提升数据处理速率。
2、简单易用的分布式计算。将大规模数据处理任务,抽象为RDD的处理变换操作,将并行实现的分布式计算任务拆分为各自独立的串行计算过程。
3、适合丰富的应用场景。Spark内部集成了SQL、机器学习、流计算、图运算等多种类型计算模型,满足多种大规模数据分析的场景需求。
4、兼容多样的存储系统。满足对包括HDFS、HBase、Hive、S3等多种大规模数据存储系统的高效读写需求,轻松处理TB级以上规模以上的数据。
5、资源管理与高可靠性。结合Yarn、Mesos等多种类型的资源管理器,监控协调各计算子任务的运行状态,失败重启机制确保分布式作业的可靠性。