那么结果将是hadoop还是将数据尝试平分到两个分区,但是由于第一个分区已经用完,这是后hadoop则会放弃在这个node存储更多的数据!!
这个绝对是我们不想要的结果,但是有什么办法可以解决这个问题呢?
搜索了一下官方的文档以后我发现了答案:
http://wiki.apache.org/hadoop/FAQ#On_an_individual_data_node.2C_how_do_you_balance_the_blocks_on_the_disk.3F
其实hadoop node内部的数据存放是非常简单的,没一个数据块都是有一个meta data的文件维持.*(什么是数据块请参考hadoop dfs相关文献)
所以举例:
数据块 A 一定有一个叫 A.meta的文件维持其在hadoop dfs中的存放.
简单的来说就是,hadoop将大数据文件split成小文件块,default size是64MB~ (这里有一个hadoop小文件problem,请参考相关资料)
每一个数据块都需要有一个meta文件以便让hadoop dfs方便的知道这个数据块的内容,这样hadoop dfs就不需要完全的读出整个数据块的内容就可以轻易的在我们需要找到他的时候快速的找出(里面用到了Hash以及Indexing的有关算法,有兴趣可以查看相关的文档)
那么现在的问题就是,我们怎样自己把文件转移到另一个分区.
根据官方的说法:
Hadoop currently does not have a method by which to do this automatically. To do this manually:
Take down the HDFS
Use the UNIX mv command to move the individual blocks and meta pairs from one directory to another on each host