1
複数のジョブを持つスタンドアロンスパーククラスタでメモリが不足しています。 調査している間、私たちは、これらのメッセージを発見し、あまりにも少ないメモリは、我々は通常、500MBの+とGB単位で自由なスタックオーバーフロー番組で多くのログ・トレースとして報告自由持って別のクラスタではApache spark memoryでMemoryStore tryToPut空き平均は何ですか
16/09/23 12:30:38 INFO MemoryStore: Block broadcast_50802_piece0 stored as bytes in memory (estimated size 5.1 KB, free 233.5 KB)
16/09/23 12:30:38 INFO TorrentBroadcast: Reading broadcast variable 50802 took 9 ms
16/09/23 12:30:38 INFO MemoryStore: Block broadcast_50802 stored as values in memory (estimated size 11.3 KB, free 244.9 KB)
自由であることを疑うようになりました。
コードを分析した後、このメッセージは誤解を招くようです。報告された空きメモリが実際に
if (enoughMemory) {
// We acquired enough memory for the block, so go ahead and put it
val entry = new MemoryEntry(value(), size, deserialized)
entries.synchronized {
entries.put(blockId, entry)
}
val valuesOrBytes = if (deserialized) "values" else "bytes"
logInfo("Block %s stored as %s in memory (estimated size %s, free %s)".format(
blockId, valuesOrBytes, Utils.bytesToString(size), Utils.bytesToString(blocksMemoryUsed)))
} else {
// Tell the block manager that we couldn't put it in memory so that it can drop it to
// disk if the block allows disk storage.
lazy val data = if (deserialized) {
Left(value().asInstanceOf[Array[Any]])
} else {
Right(value().asInstanceOf[ByteBuffer].duplicate())
}
val droppedBlockStatus = blockManager.dropFromMemory(blockId,() => data)
droppedBlockStatus.foreach { status => droppedBlocks += ((blockId, status)) }
}
をblocksMemoryusedされる文書は、その使用されているメモリの自由ではないと述べ
/**
* Amount of storage memory, in bytes, used for caching blocks.
* This does not include memory used for unrolling.
*/
private def blocksMemoryUsed: Long = memoryManager.synchronized {
memoryUsed - currentUnrollMemory
}
質問は、これは無料の理由と呼ばれているその実際に使用されるメモリであればまたは私はミスです解釈する。
PRが私の懸念を証明してくれてありがとう – randombulbs