drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DRILL-4706) Fragment planning causes Drillbits to read remote chunks when local copies are available
Date Wed, 02 Nov 2016 02:19:59 GMT

    [ https://issues.apache.org/jira/browse/DRILL-4706?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15627396#comment-15627396
] 

ASF GitHub Bot commented on DRILL-4706:
---------------------------------------

Github user sohami commented on a diff in the pull request:

    https://github.com/apache/drill/pull/639#discussion_r86057320
  
    --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetGroupScan.java
---
    @@ -822,10 +838,103 @@ private void getFiles(String path, List<FileStatus> fileStatuses)
throws IOExcep
         }
       }
     
    +  /*
    +   * Figure out the best node to scan each of the rowGroups and update the preferredEndpoint.
    +   * Based on this, update the total work units assigned to the endpoint in the endpointAffinity.
    +   */
    +  private void computeRowGroupAssignment() {
    +    Map<DrillbitEndpoint, Integer> numEndpointAssignments = Maps.newHashMap();
    +    Map<DrillbitEndpoint, Long> numAssignedBytes = Maps.newHashMap();
    +
    +    // Do this for 2 iterations to adjust node assignments after first iteration.
    +    int numIterartions = 2;
    +
    +    while (numIterartions-- > 0) {
    +
    +      for (RowGroupInfo rowGroupInfo : rowGroupInfos) {
    +        EndpointByteMap endpointByteMap = rowGroupInfo.getByteMap();
    +
    +        // This can be empty for local file system or if drilbit is not running
    +        // on hosts which have data.
    +        if (endpointByteMap.isEmpty()) {
    +          continue;
    +        }
    +
    +        // Get the list of endpoints which have maximum (equal) data.
    +        List<DrillbitEndpoint> topEndpoints = endpointByteMap.getTopEndpoints();
    --- End diff --
    
    It took me a while to understand the below algorithm just by reading code. It will be
helpful if we can name the variables better here and add some comment explaining different
sections. Like changing as below might help:
    1) "topEndPoints" to "maxRGDataEndPoints", 
    2) "minBytes" to "assignedBytesOnPickedNode"
    3) "numBytes" to "assignedBytesOnCurrEndpoint"
    4) "endpoint" to "currEndpoint"
    
    As per my understanding line 864 to 892 represents one section which has the below logic:

    1) For each row group assign a drillbit from topEndPoints list such that the chosen one
is least loaded in terms of workunits.


> Fragment planning causes Drillbits to read remote chunks when local copies are available
> ----------------------------------------------------------------------------------------
>
>                 Key: DRILL-4706
>                 URL: https://issues.apache.org/jira/browse/DRILL-4706
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Query Planning & Optimization
>    Affects Versions: 1.6.0
>         Environment: CentOS, RHEL
>            Reporter: Kunal Khatua
>            Assignee: Sorabh Hamirwasia
>              Labels: performance, planning
>
> When a table (datasize=70GB) of 160 parquet files (each having a single rowgroup and
fitting within one chunk) is available on a 10-node setup with replication=3 ; a pure data
scan query causes about 2% of the data to be read remotely. 
> Even with the creation of metadata cache, the planner is selecting a sub-optimal plan
of executing the SCAN fragments such that some of the data is served from a remote server.




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

Mime
View raw message