[ https://issues.apache.org/jira/browse/HIVE-900?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12771544#action_12771544 ]
Ning Zhang commented on HIVE-900: --------------------------------- The essential problem is that there are too many mappers are trying to accessing the same block at the same time so that it exceeds the threshold of accessing the same block. Thus the BlockMissingException is thrown. Discussed with Namit and Dhruba offline. There are the proposed solutions: 1) Make the HDFS fault tolerant to this issue. Dhruba mentioned there already exists retry logic implemented in the DFS client code: if the BlockMissingException is throw it will wait about 400ms and retry. If there are still exceptions then wait for 800 ms and so on until 5 unsuccessful retry. This mechanism works for non-correlated simultaneous request of the same block. However in this case, almost all the mappers request the same block at the same time, so their retries will be also at about the same time. So it would be better to introduce a random factor into the wait time. Dhruba will look into the DFS code and working on that. This will solve a broader type of issues beside the map-side join. 2) Another orthogonal issue brought up by Namit for map-side join is that if there are too many mappers and each of them request the same small table, it comes with a cost of transferring the small file to all these mappers. Even though the BlockMissingException is resolved, the cost is still there and it is proportional to the number of mappers. In this respect it would be better to reduce the number of mappers. But it also comes with the cost that each mappers then has to deal with larger portion of the large table. So we have to tradeoff the network cost of the small table and the processing cost of the large table. Will come with a heuristic on tune the parameters to decide the number of mappers for map join. > Map-side join failed if there are large number of mappers > --------------------------------------------------------- > > Key: HIVE-900 > URL: https://issues.apache.org/jira/browse/HIVE-900 > Project: Hadoop Hive > Issue Type: Improvement > Reporter: Ning Zhang > Assignee: Ning Zhang > > Map-side join is efficient when joining a huge table with a small table so > that the mapper can read the small table into main memory and do join on each > mapper. However, if there are too many mappers generated for the map join, a > large number of mappers will simultaneously send request to read the same > block of the small table. Currently Hadoop has a upper limit of the # of > request of a the same block (250?). If that is reached a > BlockMissingException will be thrown. That cause a lot of mappers been > killed. Retry won't solve but worsen the problem. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.