Yi Liu created HDFS-8946:
----------------------------

             Summary: Improve choosing datanode storage for block placement
                 Key: HDFS-8946
                 URL: https://issues.apache.org/jira/browse/HDFS-8946
             Project: Hadoop HDFS
          Issue Type: Improvement
          Components: namenode
            Reporter: Yi Liu
            Assignee: Yi Liu


This JIRA is to:
*1.* Improve chooseing datanode storage for block placement:
In {{BlockPlacementPolicyDefault}} ({{chooseLocalStorage}}, {{chooseRandom}}), 
we have following logic to choose datanode storage to place block.
For given storage type, we iterate storages of the datanode. But for datanode, 
it only cares about the storage type. In the loop, we check according to 
Storage type and return the first storage if the storages of the type on the 
datanode fit in requirement. So we can remove the iteration of storages, and 
just need to do once to find a good storage of given type, it's efficient if 
the storages of the type on the datanode don't fit in requirement since we 
don't need to loop all storages and do the same check.
Besides, no need to shuffle the storages, since we only need to check according 
to the storage type on the datanode once.
This also improves the logic and make it more clear.
{code}
      if (excludedNodes.add(localMachine) // was not in the excluded list
          && isGoodDatanode(localDatanode, maxNodesPerRack, false,
              results, avoidStaleNodes)) {
        for (Iterator<Map.Entry<StorageType, Integer>> iter = storageTypes
            .entrySet().iterator(); iter.hasNext(); ) {
          Map.Entry<StorageType, Integer> entry = iter.next();
          for (DatanodeStorageInfo localStorage : DFSUtil.shuffle(
              localDatanode.getStorageInfos())) {
            StorageType type = entry.getKey();
            if (addIfIsGoodTarget(localStorage, excludedNodes, blocksize,
                results, type) >= 0) {
              int num = entry.getValue();
              ...
{code}
(current logic above)

*2.* Improve the logic and remove some duplicated code
for example, In {{chooseLocalStorage}}, {{chooseRandom}}, we add the node to 
excludeNodes before the {{for}}, and we do it again if we find it's a good 
target. {{numOfAvailableNodes -= newExcludedNodes}} is duplicated too.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to