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