系列博客目录链接:Hadoop权威指南学习笔记:总章
在当今这个数据爆炸的时代,我们要想在未来取得成功,就不仅需要管理存储自己的数据,还要从其他企业或组织获取数据,此时我们就需要对大规模的数据进行存储分析,然而以往的关系型数据库对这方面确捉襟见肘。
不得不说Google和Yahoo对Hadoop的贡献功不可没。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
本节内容部分参考自:HDFS
从Hadoop产生的背景我们可以得知,Hadoop需要解决大规模数据存储和大规模数据并行计算两个痛点,而针对大规模的数据进行计算时,又涉及到多个节点的资源分配,任务管理,因此在Hadoop 2.0 框架中,Hadoop集群主要分为以下三个部分:
Hadoop Distributed File System (HDFS) 是Hadoop集群中最根本的文件系统,它提供了高扩展,高容错,机架感知数据存储等特性,可以非常方便的部署在机器上面。HDFS除过分布式文件系统所通有的特点之外,还有些仅属自己的特点:
Hadoop集群中的数据被划分成更小的单元(通常被称为块),并且将其分布式存储在集群中,每个块有两个副本,这个两个副本被存储在集群的的一个机架上。这样数据包含自身便有三个副本,具有极高的可用性和容错性,如果一个副本丢失,HDFS将会自动的重新复制一份,以确保集群中一共包含三个数据副本(包含自身)。
MapReduce是为能够在集群上分布式处理海量数据而量身订做的框架,MapReduce job分为以下三个操作
以下以一个简单的单词出现次数统计为例:
原始文件:
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)
YARN (Yet Another Resource Negotiator) 是为应用执行分配计算资源的一个框架。YARN主要包含下面三个核心组件
Note:
YARN 使用了一些容易让人误解的名词作为术语,因此应该特别注意。比如在Hadoop ecosystem中,Container这个概念,平常我们听到Container时,我们都认为是与Docker相关。但是这里却是指Resource Container (RC),即表示物理资源的集合。通常被抽象的表示,将资源分配给到目标和可分配单元。
Application也是一个熟词僻义的用法,在YARN中,一个Application指的是被一并执行的task的集合,YARN中的Application的概念大概类似于MapReduce中的job这个概念。