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

Jonathan Lawlor commented on HBASE-11544:
-----------------------------------------

[~lhofhansl] thanks for the comments

bq. Is the limit per cell or per row?

Sorry, let me be clear in what I mean when I say cell level and row level:

Partitioning at the row level (the current behavior):
Currently, the maxResultSize operates at the row level on the server. What I 
mean by this is that the result size limit is checked after each row's worth of 
cells is fetched. This presented the problem of running into OOME for large 
rows because a single row may be many times larger than the maxResultSize. 
Thus, when trying to retrieve all the cells for a single large row we would 
continue to traverse the row even when we had already passed the result size 
limit, and only realize we had exceeded the limit once the entire row's worth 
of cells had been retrieved.

Partitioning at the cell level (the new behavior):
The solution that has been implemented above moves the concept of maxResultSize 
down from the row level to the cell level. What this means is that the result 
size limit is checked after each cell/keyValue is fetched. This is nice because 
it provides a more precise size restriction on result size than the current 
solution. When the result size limit is reached while fetching the 
cells/keyValues for a particular row, that row will be returned as partial 
results that must be reconstructed client-side (i.e. the server will never 
contain the entire row's worth of cells in memory at once).

So when I said the server will only ever see partial results for very large 
rows, what I mean is: if the row is very large, the server will be returning 
partial results for that row in separate RPC responses, and thus, will never 
hold the entire row in memory but rather parts of it at different points in 
time.

> [Ergonomics] hbase.client.scanner.caching is dogged and will try to return 
> batch even if it means OOME
> ------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-11544
>                 URL: https://issues.apache.org/jira/browse/HBASE-11544
>             Project: HBase
>          Issue Type: Bug
>            Reporter: stack
>            Assignee: Jonathan Lawlor
>            Priority: Critical
>              Labels: beginner
>         Attachments: HBASE-11544-v1.patch
>
>
> Running some tests, I set hbase.client.scanner.caching=1000.  Dataset has 
> large cells.  I kept OOME'ing.
> Serverside, we should measure how much we've accumulated and return to the 
> client whatever we've gathered once we pass out a certain size threshold 
> rather than keep accumulating till we OOME.



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

Reply via email to