我尝试使用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 / sstabletableloader以设置MAX_HEAP_SIZE =“ 16GB”。 sstatableloader工作之后。

最佳答案

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

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


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

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

关于java - sstableloader错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35921883/

10-10 18:26