我有一个关于HDFS文件写入和读取的基本问题。
举个例子,如果我正在写一个文件,并使用默认配置,Hadoop内部必须将每个块写入3个数据节点。我的理解是,对于每个块,首先客户端将块写入管道中的第一个数据节点,然后通知第二个数据节点,以此类推。一旦第三个数据节点成功接收到块,它会通过数据节点2向数据节点1提供确认,最终通过数据节点1向客户端提供确认。只有在接收到块的确认后,才认为写入成功,客户端才会继续写入下一个块。
如果是这种情况,那么写入每个块所需的时间难道不比传统文件写入更长吗,因为 -
- 复制因子(默认为3)和
- 写入过程是按块顺序进行的。
如果我对理解有误,请纠正我。另外,以下是一些问题:
- 我理解的是,在Hadoop中,文件读/写没有任何并行性,它能够执行的最佳操作与传统文件读/写相同(即如果将复制设置为1)+涉及分布式通信机制的一些开销。
- 仅在数据处理阶段通过Map Reduce提供并行性,而不是在客户端进行文件读/写时提供并行性。