【发布时间】:2012-08-13 21:31:09
【问题描述】:
我在一些 aws 实例上运行 HDFS (0.20.2)。我强制 HDFS 将文件的所有块写入一个数据节点(通过将复制减少到 1 并仅添加 1 个数据节点)。
在本地访问文件(在存储块的数据节点上)或从集群中的另一台主机访问文件时,我看不到任何显着的性能差异。本质上,执行 copyToLocal 所需的时间与我在本地数据节点或任何其他机器上的时间完全相同(通过 JAVA-API 访问也是如此) 不应该有区别吗?
文件大小为 3.5 GB,块大小为 128MB(如果这很重要)。普通中等实例的实例。
更新
感谢您的建议,但实际问题仅发生在小型或中型实例上,而在大型实例上,我得到了预期的行为(因此本地访问明显快于 ~20 秒与 ~40 秒)。
【问题讨论】:
-
1.运行 copyToLocal 命令的客户端曾经在数据所在的数据节点上,然后在另一台机器上? 2.namenode在同一台机器上?
-
1.是 2. 否,namenode 位于没有数据节点的另一台机器上
-
由于您只有一个数据节点,因此副本放置策略没有任何区别。作为旁注,你能告诉我们你在这两种情况下的时间吗?
-
好吧,运行 copyToLocal 我得到了本地和远程客户端的 ~1:30。请注意,所有机器都在一个可用区中。我还运行了一个 hadoop fs -cat > /dev/null,它在本地和远程机器上都运行了 38 秒