Spark GraphX ​​- алгоритм PageRank: ошибка нехватки памяти - PullRequest
0 голосов
/ 08 сентября 2018

Я новичок в 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

Есть идеи, как мне перестать получать эту ошибку?

Спасибо.

...