hadoop是一个分布式计算和存储的框架,是解决大数据量问题的利器。刚接触这个领域时需要有一个起码的认识,后面才能进行深入的开发。这里不做条条框框的介绍,只是从直观理解上说明。
无论是hdfs(分布式文件系统)还是mapreduce架构,其思想都是“分治并行”。“分治”一词来自算法中的分治算法,含义是将一个复杂的、庞大的问题分解成独立的、规模较小的子问题,每个子问题分别求解,最终把中间结果合并成最终结果。在整个“分治”过程中,子问题都是“并行”执行的,这样一个庞大的问题就被“拆分并行”,提高了解决问题的效率。
hadoop分布式系统是一个磁盘密集和IO密集的架构。包括分布式磁盘操作和计算操作,都十分密切的依赖于磁盘读取和网络传输。又因为主要思想是分治法,所以计算和存储都是把同一份数据分布到多个节点中,每次访问都会从多个节点并行的访问。
先说hdfs,也就是分布式文件系统。
hdfs中关键的一个概念是NameNode。它是在hdfs中存储文件路径和大小等基础信息的节点。当我们(client)要访问hdfs时,首先会查询NameNode,找到目标数据对应的节点信息后,从多个节点读取数据(IO密集型操作),再通过网络(网络密集型操作)将数据返回给我们。
hdfs,包括mapreduce框架在内,都是一个主从结构。这里的“主人”(master)就是NameNode节点,它管理着所有的数据,也知道所有数据的基本信息,每次访问都由它发起。同时它还负责着基础工作,例如数据完整性保证(为了防止磁盘故障等原因导致的数据丢失)。
再说mapreduce,也就是分布式计算框架。这里的概念较多,为了从宏观上理解mapreduce,具体的一些名词见参考文献。
mapreduce不是一个词,而是map+reduce。这里又要提到分治法,举个简单的分治法的例子,例如我要求一个10维int数组的最大数,可以在index 0~4中找到最大的,同时也在index 5~9中找到最大的,然后在这两个最大数中间选择更大的作为最终结果。整个过程就是分而治之,把一个大问题转换成小问题,最终在合成大问题的结果。这和mapreduce的思想是一样的。这个过程中,把数组分成0~4和5~9对应的是map,最终在两个数中找到更大的对应的是reduce。
下面给一个mapreduce的例子,数日志中某个字段的出现次数。例如有1T的日志,日志格式是 A B C,即,A,B,C用空格连接起来的字符串,其中B有三种取值:1、2和3。目标是通过mapreduce分别统计B字段中1、2、3的出现次数。
首先,将整个文件划分成若干个子文件,例如每个子文件128MB。
其次,对于每个子文件进行map过程。每读一条日志,产生一系列的键值对,<B, 1>。这样一来,有多少日志就会产生多少键值对。每一份128MB的数据会产生一个临时文件,里面存的是键值对。
一份中间文件X例如:
- 2 1
- 1 1
- 2 1
- 3 1
另一份中间文件Y例如:
- 3 1
- 2 1
- 3 1
- 1 1
最后进行reduce过程:
1. 对每一个临时文件按照key进行排序,例如上面的X中间文件和Y中间文件,会得到:
X:
- 1 1
- 2 1
- 2 1
- 3 1
Y:
- 1 1
- 2 1
- 3 1
- 3 1
2. 对每个临时文件进行处理:将相同key的value进行合并(这里就是对value进行相加),得到:
X:
- 1 1
- 2 2
- 3 1
Y:
- 1 1
- 2 1
- 3 2
3. 对多个临时文件进行归并,相同的key对应的value相加,得到所有全局数据中key对应的数量。如果只有上面的X和Y两个临时文件的话,最终得到结果:
- 1 2
- 2 3
- 3 3
通过上述方式,最终会得到这1TB数据中,B字段1、2、3分别对应的频次。整个过程就是分治法的过程,将大文件分成小文件,处理,最后将结果合并。
- NameNode:存储所有数据的节点,包括数据的路径和大小等基本信息。
- DataNode:实际存储数据的节点。
- 存取过程:分治法,分成多份存取,多个节点(机器)并行处理。
- jobtracker:相当于hdfs中的NameNode,负责整个作业的调度
- tasktracker:一个大的任务被分解成n个小任务,每个小人物对应一个tasktracker去处理。
- slot:在tasktracker看来,一个任务的执行是需要slot这个资源的,如cpu和内存。只有有空闲的slot的时候才能执行。
本文介绍了Hadoop作为一个分布式计算和存储框架,其核心思想是分治并行,通过HDFS和MapReduce实现大数据处理。HDFS中的NameNode管理文件信息,DataNode存储数据,而MapReduce则通过map和reduce阶段实现分布式计算。
1964

被折叠的 条评论
为什么被折叠?



