原文地址:

HDFS为什么使用大块,如64MB,128MB
1,减少NameNode的压力。
namenode用来存储hdfs上文件的元数据信息,如果是小文件,会导致产生大量的元数据信息。hdfs中每个文件,目录,和数据块的存储信息大约在150字节。
这样,如果大量小文件会导致namenode内存不够用。
2,最小化寻址时间。如果块设置的足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需要的时间,因而,传输一个由多块组成的文件时间取决于传输速率。
比如,寻址时间是10ms,传输速率是100MB/s,块的大小就是100MB。
而且,如果我们设置的块过小,那么,一个文件就是产生很多的块,那么,当我们要对块进行操作的时候,就会产生好多次的寻址,这样就导致了寻址的时间会很长。
当寻址时间比io还长的时候,寻址时间就成为了瓶颈。所以,合理设置大小能提高吞吐量。
3,块的大小也不合适太大。
因为Map通常是处理一个块,如果块设置的太大,就无法充分利用并行的特性。


HDFS为什么不推荐随机模式访问hdfs文件,推荐流模式。

流式数据,特点就是,像流水一样,不是一次过来而是一点一点“流”过来。而你处理流式数据也是一点一点处理。如果是全部收到数据以后再处理,那么延迟会很大,而且在很多场合会消耗大量内存。
流式数据被封装成了byte流(其实也是二进制的)

流式读取最小化了硬盘的寻址开销,只需要寻址一次,然后就一直读啊读。硬盘的物理构造导致寻址开销的优化跟不上读取开销。所以流式读取更加适合硬盘的本身特性。当然大文件的特点也更适合流式读取。与流数据访问对应的是随机数据访问,它要求定位、查询或修改数据的延迟较小,比较适合于创建数据后再多次读写的情况,传统关系型数据库很符合这一点
总结为:
流式就是按照顺序来,一条线,找一次就够了。所以适合一次写,多次读的数据
随机访问,就是需要找了在找那个。