Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算.
Hadoop框架中最核心设计就是:HDFS和MapReduce. HDFS提供了海量数据的存储,MapReduce提供了对数据的计算.
Hadoop Distributed File System,简称HDFS[1],是一个分布式文件系统。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
故障的检测和自动快速恢复是HDFS一个很核心的设计目标。
移动计算比移动数据更经济:在靠近计算数据所存储的位置来进行计算是最理想的状态,尤其是在数据集特别巨大的时候。这样消除了网络的拥堵,提高了系统的整体吞吐量。一个假定就是迁移计算到离数据更近的位置比将数据移动到程序运行更近的位置要更好。HDFS提供了接口,来让程序将自己移动到离数据存储更近的位置
在靠近计算数据所存储的位置来进行计算是最理想的状态,尤其是在数据集特别巨大的时候。这样消除了网络的拥堵,提高了系统的整体吞吐量。一个假定就是迁移计算到离数据更近的位置比将数据移动到程序运行更近的位置要更好。HDFS提供了接口,来让程序将自己移动到离数据存储更近的位置
HDFS运行在跨越大量机架的集群之上。两个不同机架上的节点是通过交换机实现通信的,在大多数情况下,相同机架上机器间的网络带宽优于在不同机架上的机器。HDFS的副本放置策略是将第一个副本放在本地节点,将第二个副本放到本地机架上的另外一个节点而将第三个副本放到不同机架上的节点。这种方式减少了机架间的写流量,从而提高了写的性能。机架故障的几率远小于节点故障。
HDFS把文件分割成block(下文如果没有特别声明,block都是指HDFS中的64MB大小的block)大小的数据块,
HDFS集群中有两种节点:NameNode和DataNode。NameNode管理整个文件系统的命名空间(namespace),它维护着整个文件系统树以及树中所有文件及目录的元数据。
Map/Reduce是一个任务分发和回收的机制。
一个分布式任务的执行,分为以下几步:
1. 头结点接到任务请求,把它分解为多个子任务(Map)
2. 头结点将子任务(Map)分发到各个结点,并监控子结点的运行状态
3. 子结点接到Map子任务后,执行任务,产生子任务的中间结果,将结果提交头结点
4. 头结点对各子结点中间结果进行汇总(Reduce),生成最终结果。
MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性;每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点(类同Google档案系统中的主服务器)记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。每个操作使用命名文件的不可分割操作以确保不会发生并行线程间的冲突;当文件被改名的时候,系统可能会把他们复制到任务名以外的另一个名字上去。(避免副作用)
例 这20个文件,求每一个单词的总出现次数,并求出出现频率最高的单词
这也不难嘛。还是每个Map算一个文件,只不过算出的结果不是一个数值,而是一组<键,值>对。键就是单词,值就是它的出现次数:
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |