[ 
https://issues.apache.org/jira/browse/HDFS-767?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12790477#action_12790477
 ] 

Ning Zhang commented on HDFS-767:
---------------------------------

Thanks for the comments Steve and Todd. 

I checked the JDK source code (1.6.0_16) and Random() uses a very simple 
default seed:

    /**
     * Creates a new random number generator. This constructor sets
     * the seed of the random number generator to a value very likely
     * to be distinct from any other invocation of this constructor.
     */
    public Random() { this(++seedUniquifier + System.nanoTime()); }
    private static volatile long seedUniquifier = 8682522807148012L;

Based on the discussion in Sun's forum: 
http://forums.sun.com/thread.jspa?threadID=5398150 , nanoTime is a native 
method and is implemented based on the CPU clock cycles. So I guess the chance 
of getting the same value from nanoTime is not that high even though all 
machines boot up at the same time. I agree that adding the machine's MAC 
address would greatly reduce the conflict probability, I am also fine to make 
that change in the next version. The change would be fairly simple since JDK1.6 
has support get the MAC address.


> Job failure due to BlockMissingException
> ----------------------------------------
>
>                 Key: HDFS-767
>                 URL: https://issues.apache.org/jira/browse/HDFS-767
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>            Reporter: Ning Zhang
>            Assignee: Ning Zhang
>         Attachments: HDFS-767.patch
>
>
> If a block is request by too many mappers/reducers (say, 3000) at the same 
> time, a BlockMissingException is thrown because it exceeds the upper limit (I 
> think 256 by default) of number of threads accessing the same block at the 
> same time. The DFSClient wil catch that exception and retry 3 times after 
> waiting for 3 seconds. Since the wait time is a fixed value, a lot of clients 
> will retry at about the same time and a large portion of them get another 
> failure. After 3 retries, there are about 256*4 = 1024 clients got the block. 
> If the number of clients are more than that, the job will fail. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to