Hadoop尽量在计算节点上存数据,以实现数据的快速访问,即数据本地化(data locatily)。

MapReduce 三大设计目标:

1:为只需要短短几分钟或数小时就能完成的任务设计。

2:运行于同一个内部有高速网络连接的数据中心。

3:数据中心的计算机都是可靠的,专门的硬件。

Map任务的三种可能:

MapReduce项目需求分析 mapreduce的设计目标包括_HDFS

a,本地数据,本地运行;

    即在存储有输入数据(HDFS中的数据)的节点运行map任务,无需使用宝贵的集群带宽资源,可获得最佳性能(数据本地化优化)。

b,本地节点,本地机架运行;

    即存储数据副本的所有机器均有其他map任务未执行完,且当前机架有空闲map槽来运行。

c:本地数据,跨机架运行

   即存储数据副本的所有机器均有其他map任务未执行完,且当前机架无空闲map槽来运行,需到其他机架寻找map槽来运行,这将导致机架与机架之间的网络传输。

HDFS:

HDFS以流式数据访问模式来存储超大文件,运行于商用硬件上。

1.超大文件:数百GB,TB,PB级

2.流式数据访问:hdfs构建思路:一次写入,多次读取是最高效的访问模式。

3.商用硬件:即普通商店即可买到的硬件设施。

4.低延时的数据访问:低延时不适用于在HDFS上运行,HDFS是以高数据吞吐量应用优化的,这可能以提高时间延时为代价。低延时HBase是更好的选择。

5.多用户写入,任意修改文件:HDFS只支持单用户以“只添加”的方式在文件末尾写数据,且不支持多用户同时写操作,也不支持在文件任意位置进行修改。

HDFS中的数据块:HDFS文件系统默认块大小128M,但HDFS中小于块大小的文件不会占据整个块空间(如,1M的文件存储在128M块中时,文件只会占用1M的磁盘空间,而非12M)。

Q:HDFS中的块为什么这么大?是不是块越大越好?

A:块大的目的主要是最小化寻址开销,如果块足够大,从磁盘传输数据的时间明显大于寻址时间,因此,传输一个由多个块组成的文件的时间主要取决于磁盘传输速率。寻址时间控制在传输时间的1%为佳。块不是越大越好,如果块设置的过大MapReduce中的Map任务通常只处理一个块中的数据,因此如果任务数太少(少于集群中节点数),作业的运行速率就会比较慢。

分布式文件系统的块抽象的好处:

    一:一个文件的大小可以大于网络中任意一个磁盘容量

    二:大大简化了存储子系统的设计,如分块数据和元数据管理。

    三:非常适用于数据备份进而提供数据容错性和高可用性。