sstableloader的错误

时间:2016-03-10 16:22:00

标签: java cassandra

我尝试使用sstableloader将数据加载到Cassandra集群。 sstableloader显示以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
        at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
        at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
        at org.apache.cassandra.io.compress.BufferType$1.allocate(BufferType.java:28)
        at org.apache.cassandra.io.util.RandomAccessReader.allocateBuffer(RandomAccessReader.java:69)
        at org.apache.cassandra.io.util.RandomAccessReader.<init>(RandomAccessReader.java:62)
        at org.apache.cassandra.io.util.RandomAccessReader.open(RandomAccessReader.java:103)
        at org.apache.cassandra.io.util.RandomAccessReader.open(RandomAccessReader.java:92)
        at org.apache.cassandra.io.util.RandomAccessReader.open(RandomAccessReader.java:87)
        at org.apache.cassandra.io.util.BufferedSegmentedFile.getSegment(BufferedSegmentedFile.java:60)
        at org.apache.cassandra.io.util.SegmentedFile$SegmentIterator.next(SegmentedFile.java:271)
        at org.apache.cassandra.io.util.SegmentedFile$SegmentIterator.next(SegmentedFile.java:252)
        at org.apache.cassandra.io.sstable.format.big.BigTableReader.getPosition(BigTableReader.java:184)
        at org.apache.cassandra.io.sstable.format.SSTableReader.getPosition(SSTableReader.java:1558)
        at org.apache.cassandra.io.sstable.format.SSTableReader.getPositionsForRanges(SSTableReader.java:1489)
        at org.apache.cassandra.io.sstable.SSTableLoader$1.accept(SSTableLoader.java:128)
        at java.io.File.list(File.java:1161)
        at org.apache.cassandra.io.sstable.SSTableLoader.openSSTables(SSTableLoader.java:79)
        at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:161)
        at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:97)

如果我了解情况需要增加MAX_HEAP_SIZE。我怎样才能为sstableloader做到这一点?

听起来不太乐观 - “/ usr / bin / sstableloader仍然有一个硬编码的-Mx256M,无法轻易覆盖”。 https://issues.apache.org/jira/browse/CASSANDRA-7385

感谢。

我编辑了bin / sstableloader来设置MAX_HEAP_SIZE =“16GB”。在sstatableloader工作之后。

2 个答案:

答案 0 :(得分:1)

sstableloader.sh在代码中包含以下行

if [ "x$MAX_HEAP_SIZE" = "x" ];
   ...

因此,将MAX_HEAP_SIZE放在sstableloader命令前会设置临时环境变量并被sstableloader识别:

MAX_HEAP_SIZE="16G" sstableloader -d node /file/path

答案 1 :(得分:0)

对于Cassandra v.2.2.4,您可以使用vi,nano等编辑sstableloader文件,以设置MAX_HEAP_SIZE =&#34; 16GB&#34; 或者:

sed -i -e 's/MAX_HEAP_SIZE="256M"/MAX_HEAP_SIZE="16G"/g' sstableloader