【问题标题】:How to fix "org.apache.spark.shuffle.FetchFailedException: Failed to connect" in NetworkWordCount Spark Streaming application?如何修复 NetworkWordCount Spark Streaming 应用程序中的“org.apache.spark.shuffle.FetchFailedException:连接失败”?
【发布时间】:2019-11-18 23:43:19
【问题描述】:

我尝试提交示例 Apache Spark Streaming 应用程序:

/opt/spark/bin/spark-submit --class org.apache.spark.examples.streaming.NetworkWordCount --deploy-mode cluster --master yarn --driver-memory 2g --executor-memory 2g /opt/spark/examples/jars/spark-examples_2.11-2.0.0.jar 172.29.74.68 9999

作为参数,我输入主 IP 和本地端口(在另一个控制台中运行:nc -lk 9999)。

而且总是出错:

WARN scheduler.TaskSetManager: Lost task 0.0 in stage 1.0 (TID 50, iws1): FetchFailed(BlockManagerId(2, iws2, 41569), shuffleId=0, mapId=19, reduceId=0, message=
org.apache.spark.shuffle.FetchFailedException: Failed to connect to iws2/172.29.77.40:41569
    at org.apache.spark.storage.ShuffleBlockFetcherIterator.throwFetchFailedException(ShuffleBlockFetcherIterator.scala:357)
    at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:332)
    at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:54)
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
    at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
    at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
    at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32)
    at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39)
    at org.apache.spark.util.collection.ExternalAppendOnlyMap.insertAll(ExternalAppendOnlyMap.scala:154)
    at org.apache.spark.Aggregator.combineCombinersByKey(Aggregator.scala:50)
    at org.apache.spark.shuffle.BlockStoreShuffleReader.read(BlockStoreShuffleReader.scala:85)
    at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:109)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
    at org.apache.spark.scheduler.Task.run(Task.scala:85)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Failed to connect to iws2/172.29.77.40:41569
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:228)
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:179)
    at org.apache.spark.network.netty.NettyBlockTransferService$$anon$1.createAndStart(NettyBlockTransferService.scala:96)
    at org.apache.spark.network.shuffle.RetryingBlockFetcher.fetchAllOutstanding(RetryingBlockFetcher.java:140)
    at org.apache.spark.network.shuffle.RetryingBlockFetcher.access$200(RetryingBlockFetcher.java:43)
    at org.apache.spark.network.shuffle.RetryingBlockFetcher$1.run(RetryingBlockFetcher.java:170)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    ... 3 more
Caused by: java.net.ConnectException: Connection refused: iws2/172.29.77.40:41569
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:224)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:289)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    ... 1 more

Full log here

示例“HdfsWordCount”工作正常。其他“非流媒体”应用程序也是如此。

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    解决方法是在socketTextStream方法中添加StorageLevel.MEMORY_ONLY_SER,更改spark-defaults.conf(如下)并增加yarn-site.xml文件中的硬件资源。

    spark-defaults.conf

    spark.core.connection.ack.wait.timeout 600s
    spark.default.parallelism 4
    spark.driver.memory 6g
    spark.executor.memory 10g
    spark.cores.max 4
    spark.executor.cores 2
    

    【讨论】:

    • 是否有指南在哪里可以找到这些 spark 参数和 yarn-site.xml 中的参数的适当组合?
    【解决方案2】:

    如果您有很多小文件...在一个分区中 您的 SparkJOB 将失败 Exception“org.apache.spark.shuffle.FetchFailedException: Failed to connect”

    你需要合并分区中的文件..

    (example)
    [AS-IS]
    /yyyy=2019/a.txt
    /yyyy=2019/b.txt
    /yyyy=2019/c.txt
    [TO-BE]
    /yyyy=2019/merged.txt
    

    如果您在一个分区中合并了文件, 您的 SparkJOB 将会成功! 祝你好运

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 2022-08-13
      • 2018-12-19
      • 2017-04-02
      • 2017-05-27
      • 1970-01-01
      • 2017-04-26
      • 2016-10-11
      相关资源
      最近更新 更多