我有大量的小文件要存储在 HDFS 中。根据文件名,我想将它们存储在不同的数据节点中。这样我可以实现以某些字母开头的文件名以进入特定的数据节点。如何在 Hadoop 中做到这一点?
问问题
194 次
1 回答
1
不是一个很好的选择。原因:
- Hadoop 不擅长处理大量的小文件。
- 在单个节点中存储一个完整的文件违反了 HDFS 的基本原则之一,即分布式存储。
我想知道这种方法会给您带来什么好处。
回应您的评论:
HDFS 不像 HBase 那样做任何排序。当您将文件放入 HDFS 时,它首先被分成小块,然后被存储(每个块在不同的节点上)。所以没有什么比将整个文件发送到单个节点更好的了。您的文件(块)驻留在多个节点上。
您可以做的是根据您的需要创建一个目录层次结构并将文件存储在这些目录中(如果您的意图是直接根据它们的位置获取文件)。例如,
/dirA
/dirA/A.txt
/dirA/B.txt
/dirB
/dirB/P.txt
/dirB/Q.txt
/dirC
/dirC/Y.txt
/dirC/Z.txt
但是,如果您真的想将特定文件的块发送到某些特定节点,那么您需要实现自己的块放置策略,这并不容易。有关更多详细信息,请参阅此内容。
于 2013-09-16T12:36:33.417 回答