HB堆表扫描中的Java堆空间内存不足

时间:2018-03-15 14:51:53

标签: java hadoop jvm hbase

在我的应用程序中,我正在扫描HBase中的表以获取要在UI上显示的数据。数据量巨大,代码产生以下错误。提供的服务器配置为:server -Xms2048m -Xmx4096m

"Failure in caller transaction.: java.lang.OutOfMemoryError: Java heap space"

代码:

HTable table = null;
        try {
            Configuration config = HBaseConfiguration.create();
            config.set("hbase.zookeeper.quorum", hbaseServer);
            config.set("hbase.zookeeper.property.clientPort", hbasePort);
            FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);
            table = new HTable(config, "tableName");
            SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes(filterName),
                    Bytes.toBytes(filterName), CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes (String.valueOf(filterValue))));
            list.addFilter(filter);
            Scan scan = new Scan();
            scan.setFilter(list);
            scanner = table.getScanner(scan);

如果我添加以下过滤器以减少记录数量,则会正确呈现数据:

scan.setFilter(new PageFilter(100));

但是如果我在Eclipse中使用Memory Analyzer Tool提取堆转储,则无论从HBase获取的记录数是多少,都会创建相同大小的堆转储大小。我还添加了以下代码以避免缓存,但结果并没有变化。

            scan.setCaching(0);
            scan.setCacheBlocks(false);

这是否意味着生成的堆转储不依赖于要提取的数据量?我做错了吗?

0 个答案:

没有答案