我试着比较本地文件系统和hdfs之间写一个大文件的性能。结果有点让我困惑。通过本地写入所用的时间比hdfs短。我不理解“hadoop适合于顺序数据访问”这个概念。。。
[root@datanodetest01 tmp]# dd if=/dev/zero of=testfile count=1 bs=256M
1+0 records in
1+0 records out
268435456 bytes (268 MB) copied, 0.324765 s, 827 MB/s
[root@datanodetest01 tmp]# time hadoop fs -put testfile /tmp
real 0m3.461s
user 0m6.829s
sys 0m0.666s
2条答案
按热度按时间ca1c2owp1#
hdfs有很多好处,这里和这里都列出了
请注意,无论您是将数据存储在本地磁盘还是hdfs上,最终您都希望对数据进行一些处理。在这种情况下,所有的大数据技术栈都利用hdfs特性,以容错的方式提供数据的快速处理。
在本地和hdfs中复制数据的差异可以简单地归因于以下事实:
1) hdfs至少制作3个数据副本,这样无论机器是否集群化,它都能以高可用的方式工作。
2) 在hdfs中,数据副本跨集群维护在不同的机器上,因此会发生一些网络i/o。
另请注意-refhttp://hadooptutorials.co.in/tutorials/hadoop/hadoop-fundamentals.html
hadoop使用块来存储文件或文件的一部分。hadoop块是底层文件系统上的一个文件。由于底层文件系统将文件存储为块,一个hadoop块可能由底层文件系统中的许多块组成。积木很大。它们默认为每个64兆字节,大多数系统运行的块大小为128兆字节或更大。
hadoop设计用于流式或顺序数据访问,而不是随机访问。顺序数据访问意味着更少的查找,因为hadoop只查找每个块的开头,并从那里开始顺序读取。
给出了一个很好的读本——hadoop顺序数据访问
jyztefdp2#
hadoop将文件存储为块(默认128mb),并在不同节点的hdd上复制这些块。
从硬盘读取数据时,硬盘磁头必须穿过盘片移动到适当的位置才能读取数据。如果您读取了分布在硬盘上的许多小文件,那么磁头在这些位置之间移动的寻道时间会增加大量开销(降低吞吐量)。
如果你读一个大文件头必须寻找一次并读取数据。总寻道时间现在小于读取时间。
这就是所谓的“hadoop对于顺序访问是有效的”,对于随机访问(具有高寻道时间)来说,它不是那么好
您不应该将hadoop性能与local进行比较,因为hadoop在通过网络与不同节点之间进行传输时会产生很大的(网络)开销。