系列博客目录链接:Hadoop权威指南学习笔记:总章
零. 本节主要内容
- Hadoop产生的背景
- Hadoop的历史
- 什么是Hadoop
- Hadoop的主要作用是什么
- Hadoop的基础架构
一. Hadoop产生的背景
在当今这个数据爆炸的时代,我们要想在未来取得成功,就不仅需要管理存储自己的数据,还要从其他企业或组织获取数据,此时我们就需要对大规模的数据进行存储分析,然而以往的关系型数据库对这方面确捉襟见肘。
二. Hadoop的历史
- 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
- 2003年Google发表了一篇技术学术论文谷歌文件系统(GFS)。GFS也就是google File System,google公司为了存储海量搜索数据而设计的专用文件系统。
- 2004年Nutch创始人Doug Cutting基于Google的GFS论文实现了分布式文件存储系统名为NDFS。
- 2004年Google又发表了一篇技术学术论文MapReduce。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行分析运算。
- 2005年Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了该功能。
- 2006年,Yahoo雇用了Doug Cutting,Doug Cutting将NDFS和MapReduce升级命名为Hadoop,Yahoo开建了一个独立的团队给Goug Cutting专门研究发展Hadoop。
不得不说Google和Yahoo对Hadoop的贡献功不可没。
三. 什么是Hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算
四. Hadoop的主要作用是什么
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
五. Hadoop的基础架构
本节内容部分参考自:HDFS
从Hadoop产生的背景我们可以得知,Hadoop需要解决大规模数据存储和大规模数据并行计算两个痛点,而针对大规模的数据进行计算时,又涉及到多个节点的资源分配,任务管理,因此在Hadoop 2.0 框架中,Hadoop集群主要分为以下三个部分:
5.1 HDFS
Hadoop Distributed File System (HDFS) 是Hadoop集群中最根本的文件系统,它提供了高扩展,高容错,机架感知数据存储等特性,可以非常方便的部署在机器上面。HDFS除过分布式文件系统所通有的特点之外,还有些仅属自己的特点:
- 对硬件故障的考虑设计
- 更大的数据单元,默认的块大小为128M
- 对序列操作的优化
- 机架感知
- 支持异构集群和跨平台
Hadoop集群中的数据被划分成更小的单元(通常被称为块),并且将其分布式存储在集群中,每个块有两个副本,这个两个副本被存储在集群的的一个机架上。这样数据包含自身便有三个副本,具有极高的可用性和容错性,如果一个副本丢失,HDFS将会自动的重新复制一份,以确保集群中一共包含三个数据副本(包含自身)。
5.2 MapReduce
MapReduce是为能够在集群上分布式处理海量数据而量身订做的框架,MapReduce job分为以下三个操作
- Map 将输入数据划分为key-value集合。
- Shuffle 将Map产生的结果传输给Reduce。
- Reduce 则对接收到的key-value进一步处理。
以下以一个简单的单词出现次数统计为例:
原始文件:
Hello World
Hello Good
Hello Python
Python is Good
map阶段转化过程:
Hello World -> (Hello, 1) (World, 1)
Hello Good -> (Hello, 1) (Good, 1)
Hello Python -> (Hello, 1) (Python, 1)
Python Good -> (Python, 1) (Good, 1)
shuffle过程
(Hello, 1) (World, 1)
(Hello, 1) (Good, 1) ->(Good, [1, 1]) (Hello, [1, 1, 1]) (Python, [1, 1]) (World, [1])
(Hello, 1) (Python, 1)
(Python, 1) (Good, 1)
reduce过程
(Good, [1, 1]) -> (Good, 2)
(Hello, [1, 1, 1]) -> (Hello, 3)
(Python, [1, 1]) -> (Python, 2)
(World, [1]) -> (World, 1)
5.3 Yarn
YARN (Yet Another Resource Negotiator) 是为应用执行分配计算资源的一个框架。YARN主要包含下面三个核心组件
- ResourceManager(一个集群只有一个)
- ApplicationMaster(每个应用都有一个)
- NodeManagers (每个节点都有一个)
Note:
YARN 使用了一些容易让人误解的名词作为术语,因此应该特别注意。比如在Hadoop ecosystem中,Container这个概念,平常我们听到Container时,我们都认为是与Docker相关。但是这里却是指Resource Container (RC),即表示物理资源的集合。通常被抽象的表示,将资源分配给到目标和可分配单元。
Application也是一个熟词僻义的用法,在YARN中,一个Application指的是被一并执行的task的集合,YARN中的Application的概念大概类似于MapReduce中的job这个概念。