When you write on a machine running a datanode process, the data is *always* 
written locally first.  This is to provide an optimization to the MapReduce 
framework.   The lesson here is that you should *never* use a datanode machine 
to load your data.  Always do it outside the grid.

Additionally, you can use fsck (filename) -files -locations -blocks to see 
where those blocks have been written.  

On Jul 13, 2010, at 9:45 AM, Nathan Grice wrote:

> To test the block distribution, run the same put command from the NameNode
> and then again from the DataNode.
> Check the HDFS filesystem after both commands. In my case, a 2GB file was
> distributed mostly evenly across the datanodes when put was run on the
> NameNode, and then put only on the DataNode where I ran the put command
> 
> On Tue, Jul 13, 2010 at 9:32 AM, C.V.Krishnakumar 
> <[email protected]>wrote:
> 
>> Hi,
>> I am a newbie. I am curious to know how you discovered that all the blocks
>> are written to datanode's hdfs? I thought the replication by namenode was
>> transparent. Am I missing something?
>> Thanks,
>> Krishna
>> On Jul 12, 2010, at 4:21 PM, Nathan Grice wrote:
>> 
>>> We are trying to load data into hdfs from one of the slaves and when the
>> put
>>> command is run from a slave(datanode) all of the blocks are written to
>> the
>>> datanode's hdfs, and not distributed to all of the nodes in the cluster.
>> It
>>> does not seem to matter what destination format we use ( /filename vs
>>> hdfs://master:9000/filename) it always behaves the same.
>>> Conversely, running the same command from the namenode distributes the
>> files
>>> across the datanodes.
>>> 
>>> Is there something I am missing?
>>> 
>>> -Nathan
>> 
>> 

Reply via email to