我有大量的小文件要存储在hdfs中。根据文件名,我希望将它们存储在不同的数据节点中。通过这种方式,我可以实现以特定字母开头的文件名进入特定的数据节点。如何在hadoop中做到这一点?
gudnpqoy1#
不是很好的选择。原因: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
但是,如果您真的想将特定文件的块发送到某些特定节点,那么您需要实现自己的块放置策略,这并不容易。请参阅此以了解更多详细信息。
1条答案
按热度按时间gudnpqoy1#
不是很好的选择。原因:
hadoop并不擅长处理大量的小文件。
在单个节点中存储一个完整的文件违反了hdfs的基本原则之一,即分布式存储。
我想知道这种方法能给你带来什么好处。
针对您的评论:
hdfs不像hbase那样做任何排序。当您将一个文件放入hdfs时,它首先被分割成小块,然后被存储(每个块位于不同的节点上)。所以没有什么比将整个文件发送到单个节点更好的了。文件(块)位于多个节点上。
您可以根据需要创建一个目录层次结构,并将文件存储在这些目录中(如果您的目的是根据文件的位置直接获取文件)。例如,
但是,如果您真的想将特定文件的块发送到某些特定节点,那么您需要实现自己的块放置策略,这并不容易。请参阅此以了解更多详细信息。