Я новичок в Spark Hadoop. Я пытаюсь использовать алгоритм PageRank с 1 итерацией, но у меня проблема с большим графиком.
Я попытался запустить кластер из 7 узлов, и объем памяти на NodeManager каждого узла составляет 48G.
У моего графа около 80 миллионов вершин и 430 миллионов ребер.
Я запускаю работу под искрой как
./bin/spark-shell --executor-cores 5 --executor-memory 10G --num-executors 30
Вот мой код:
val edgesRDD: RDD[Edge[Int]] = edges.rdd.map { edge =>
Edge(edge.get(0).toString.toLong, edge.get(1).toString.toLong, 0)
}
val verticesRDD: RDD[(VertexId, Int)] = vertices.rdd.map { vertex =>
(vertex.get(0).toString.toLong, 0)
}
val graph = Graph(verticesRDD, edgesRDD)
val resPR = graph.staticPageRank(1)
Вот подробности исключения:
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill %p"
# Executing /bin/sh -c "kill 56758"...
2018-09-05 17:29:57 WARN TransportChannelHandler:78 - Exception in connection from IDC-vbidatanode44/10.60.170.44:40934
java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
at io.netty.buffer.CompositeByteBuf.nioBuffer(CompositeByteBuf.java:1466)
at io.netty.buffer.AbstractDerivedByteBuf.nioBuffer(AbstractDerivedByteBuf.java:113)
at io.netty.buffer.AbstractByteBuf.nioBuffer(AbstractByteBuf.java:1203)
at org.apache.spark.network.buffer.NettyManagedBuffer.nioByteBuffer(NettyManagedBuffer.java:45)
at org.apache.spark.network.BlockTransferService$$anon$1.onBlockFetchSuccess(BlockTransferService.scala:109)
at org.apache.spark.network.shuffle.RetryingBlockFetcher$RetryingBlockFetchListener.onBlockFetchSuccess(RetryingBlockFetcher.java:204)
at org.apache.spark.network.shuffle.OneForOneBlockFetcher$ChunkCallback.onSuccess(OneForOneBlockFetcher.java:97)
at org.apache.spark.network.client.TransportResponseHandler.handle(TransportResponseHandler.java:171)
at org.apache.spark.network.server.TransportChannelHandler.channelRead(TransportChannelHandler.java:120)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at org.apache.spark.network.util.TransportFrameDecoder.channelRead(TransportFrameDecoder.java:85)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1359)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:935)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:138)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645)
2018-09-05 17:29:57 ERROR CoarseGrainedExecutorBackend:43 - RECEIVED SIGNAL TERM
2018-09-05 17:29:57 INFO DiskBlockManager:54 - Shutdown hook called
2018-09-05 17:29:57 INFO ShutdownHookManager:54 - Shutdown hook called
Есть идеи, как мне перестать получать эту ошибку?
Спасибо.