根据 HDFS 架构页面,HDFS 是为“流数据访问”而设计的。我不确定这到底是什么意思,但猜测这意味着像 seek 这样的操作要么被禁用,要么性能不佳。这是正确的吗?
我对使用 HDFS 存储需要流式传输到浏览器客户端的音频/视频文件感兴趣。大多数流式传输都是从头到尾的,但有些流式传输的寻道次数可能很多。
也许有另一个文件系统可以做得更好?
答案1
流式传输只是意味着它可以在传输数据时为您提供高于某个阈值的恒定比特率,而不是让数据以突发或波浪的形式传入。
如果 HDFS 是为流式传输而设计的,它可能仍将支持寻道,但需要一些开销来缓存恒定流的数据。
当然,根据系统和网络负载,您的搜索可能会花费更长时间。
答案2
HDFS 以大块(例如 64 MB)存储数据。其理念是让数据按顺序排列在硬盘上,从而减少硬盘读取数据所需的寻道次数。
此外,HDFS 是一个用户空间文件系统,因此有一个中央名称节点,其中包含一个内存目录,其中存储了集群中的所有块(及其副本)。文件预计很大(例如 1 GB 或更大),并被分成几个块。为了读取文件,代码会向名称节点请求一个块列表,然后按顺序读取这些块。
通过保持驱动器对这些大型数据块所能承受的最大 I/O 速率,数据可以从硬盘驱动器“流出”。
答案3
对于来自Hadoop:权威指南,第三版:
HDFS 的构建理念是,最高效的数据处理模式是一次写入、多次读取。数据集通常是从源生成或复制的,然后随着时间的推移对该数据集执行各种分析。每次分析都会涉及大部分(如果不是全部)数据集,因此读取整个数据集的时间比读取第一条记录的延迟更重要。