[
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)