我使用jdbc从hive获取数据,代码如下。
hiveJdbcTemplate.query("SELECT ... FROM ... without any condition", new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
// do a some aggregate calculate but not memory consuming
}
});
因为表格太大,我经常会收到错误信息。
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
at org.apache.thrift.transport.TSaslTransport.readFrame(TSaslTransport.java:458)
...
at org.apache.hive.service.rpc.thrift.TCLIService$Client.recv_FetchResults(TCLIService.java:559)
...
所以我需要像mongodb那样用游标(或者一些数据库叫懒惰取值)来取。mysql和postgresql等rdbms也有这样的模式,见。
mysql:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-implementation-notes.html
postgresql:https://jdbc.postgresql.org/documentation/head/query.html
这可以在很大程度上减少客户端的内存占用。
如何在hive中做到这一点?
暂无答案!
目前还没有任何答案,快来回答吧!