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

James Taylor commented on HBASE-12790:
--------------------------------------

What's the resistance to having a round robin scheduler? Conceptually it's 
pretty simple and I think it's a good addition to HBase. The client just needs 
to pass some kind of identifier that tells the server that these operations are 
"one operation" that should be round robin-ed against others (that's the 
GroupID - we can name it something else too and it's fine as an attribute or 
new field). 

It's not Phoenix specific either. Another common use case would be if multiple 
MR jobs are running against a cluster - all the mappers from a given job could 
use the same identifier (i.e. identifying them conceptually as "one 
operation"). Then these map tasks would be round robin-ed against other sets of 
map task from other MR jobs.

This is a real issue right now and there's a patch available (which has taken 
considerable effort - started back in Feb 2015). We've perf tested it under 
scale and it looks good. What's the reason to *not* have this optionally 
configurable, round-robin scheduler?


> Support fairness across parallelized scans
> ------------------------------------------
>
>                 Key: HBASE-12790
>                 URL: https://issues.apache.org/jira/browse/HBASE-12790
>             Project: HBase
>          Issue Type: New Feature
>            Reporter: James Taylor
>            Assignee: ramkrishna.s.vasudevan
>              Labels: Phoenix
>         Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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

Reply via email to