Подключение внешнего сервиса Shuffle бездействует более 120 секунд, пока есть ожидающие запросы - PullRequest
0 голосов
/ 02 июля 2018

Я управляю искрой работы на пряже. Работа работает на Amazon EMR. (1 ведущий и 2 ведомых с m4.xlarge)

Я настроил аналогичную инфраструктуру с использованием дистрибутива HDP 2.6 на машинах aws ec2. Но задание spark застревает на одном конкретном этапе, и через некоторое время я получаю следующую ошибку в журналах контейнеров. Похоже, что основной ошибкой является простоя службы в случайном порядке.

18/06/25 07:15:31 INFO spark.MapOutputTrackerWorker: выполнение выборки; конечная точка трекера = NettyRpcEndpointRef (spark: //MapOutputTracker@10.210.150.150: 44343) 18/06/25 07:15:31 ИНФОРМАЦИЯ spark.MapOutputTrackerWorker: нет выводов карты для перемешивания 9, выбирая их 18/06/25 07:15:31 ИНФОРМАЦИЯ spark.MapOutputTrackerWorker: нет выводов карты для перемешивания 9, выбирая их 18/06/25 07:15:31 INFO spark.MapOutputTrackerWorker: получил выходные места 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: получение 5 непустых блоков из 1000 блоков 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: запущен 1 удаленный выбор за 0 мс 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: получение 5 непустых блоков из 1000 блоков 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: запущено 0 удаленных выборок за 0 мс 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: получение 5 непустых блоков из 1000 блоков 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: запущен 1 удаленный выбор за 0 мс 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: получение 5 непустых блоков из 1000 блоков 18/06/25 07:15:31 INFO storage.ShuffleBlockFetcherIterator: запущен 1 удаленный выбор за 1 мс 18/06/25 07:15:31 INFO codegen.CodeGenerator: код сгенерирован за 4.822611 мс 18/06/25 07:15:31 INFO codegen.CodeGenerator: код, сгенерированный за 8.430244 мс 18/06/25 07:17:31 ОШИБКА server.TransportChannelHandler: Соединение с ip-10-210-150-180. ******** / 10.210.150.180:7447 было тихо в течение 120000 мс, пока невыполненные запросы. Предполагая, что связь не работает; пожалуйста, настройте spark.network.timeout, если это не так. 18/06/25 07:17:31 ОШИБКА client.TransportResponseHandler: Все еще не обработано 307 запросов, когда соединение с ip-10-210-150-180. ******** / 10.210.150.180:7447 закрыто 18/06/25 07:17:31 INFO shuffle.RetryBlockFetcher: повторная выборка (1/3) для 197 ожидающих блоков через 5000 мс 18/06/25 07:17:31 ОШИБКА shuffle.OneForOneBlockFetcher: Ошибка при запуске выборки блока java.io.IOException: соединение с ip-10-210-150-180. ******** / 10.210.150.180:7447 закрыто в org.apache.spark.network.client.TransportResponseHandler.channelInactive (TransportResponseHandler.java:146) в org.apache.spark.network.server.TransportChannelHandler.channelInactive (TransportChannelHandler.java:108) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.ChannelInboundHandlerAdapter.channelInactive (ChannelInboundHandlerAdapter.java:75) в io.netty.handler.timeout.IdleStateHandler.channelInactive (IdleStateHandler.java:278) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.ChannelInboundHandlerAdapter.channelInactive (ChannelInboundHandlerAdapter.java:75) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241)в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.ChannelInboundHandlerAdapter.channelInactive (ChannelInboundHandlerAdapter.java:75) в org.apache.spark.network.util.TransportFrameDecoder.channelInactive (TransportFrameDecoder.java:182) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.DefaultChannelPipeline $ HeadContext.channelInactive (DefaultChannelPipeline.java:1289) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.DefaultChannelPipeline.fireChannelInactive (DefaultChannelPipeline.java:893) на io.netty.channel.AbstractChannel $ AbstractUnsafe $ 7.run (AbstractChannel.java:691) в io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks (SingleThreadEventExecutor.java:399) на io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:446) в io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run (SingleThreadEventExecutor.java:131) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory.java:144) на java.lang.Thread.run (Thread.java:748) 18/06/25 07:17:31 ИНФОРМАЦИЯ shuffle.RetryBlockFetcher: повторная выборка (1/3) для 166 ожидающих блоков через 5000 мс 18/06/25 07:17:31 ОШИБКА shuffle.OneForOneBlockFetcher: Ошибка при запуске выборки блока java.io.IOException: соединение с ip-10-210-150-180. ******** / 10.210.150.180:7447 закрыто в org.apache.spark.network.client.TransportResponseHandler.channelInactive (TransportResponseHandler.java:146) в org.apache.spark.network.server.TransportChannelHandler.channelInactive (TransportChannelHandler.java:108) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.ChannelInboundHandlerAdapter.channelInactive (ChannelInboundHandlerAdapter.java:75) в io.netty.handler.timeout.IdleStateHandler.channelInactive (IdleStateHandler.java:278) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.ChannelInboundHandlerAdapter.channelInactive (ChannelInboundHandlerAdapter.java:75) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.ChannelInboundHandlerAdapter.channelInactive (ChannelInboundHandlerAdapter.java:75) в org.apache.spark.network.util.TransportFrameDecoder.channelInactive (TransportFrameDecoder.java:182) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241)в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive (AbstractChannelHandlerContext.java:220) в io.netty.channel.DefaultChannelPipeline $ HeadContext.channelInactive (DefaultChannelPipeline.java:1289) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:241) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive (AbstractChannelHandlerContext.java:227) в io.netty.channel.DefaultChannelPipeline.fireChannelInactive (DefaultChannelPipeline.java:893) на io.netty.channel.AbstractChannel $ AbstractUnsafe $ 7.run (AbstractChannel.java:691) в io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks (SingleThreadEventExecutor.java:399) на io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:446) в io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run (SingleThreadEventExecutor.java:131) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory.java:144) at java.lang.Thread.run (Thread.java:748)

В настоящее время я использую искру на кластере пряжи со следующими конфигурациями искровых настроек по умолчанию

spark.eventLog.dir=hdfs:///user/spark/applicationHistory
spark.eventLog.enabled=true
spark.yarn.historyServer.address=ppv-qa12-tenant8-spark-cluster-master.periscope-solutions.local:18080
spark.shuffle.service.enabled=true
spark.dynamicAllocation.enabled=true
spark.driver.extraLibraryPath=/usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64-64
spark.executor.extraLibraryPath=/usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64-64
spark.driver.maxResultSize=0
spark.driver.extraJavaOptions=-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxHeapFreeRatio=70 -XX:+CMSClassUnloadingEnabled -XX:OnOutOfMemoryError='kill -9 %p'
spark.executor.extraJavaOptions=-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxHeapFreeRatio=70 -XX:+CMSClassUnloadingEnabled -XX:OnOutOfMemoryError='kill -9 %p'
spark.executor.memory=5g
spark.driver.memory=1g
spark.executor.cores=4

И у меня есть следующий набор в yarn-site.xml в nodemanager подчиненных машин

<configuration>
  <property>
    <name>yarn.application.classpath</name>
    <value>/usr/hdp/current/spark2-client/aux/*,/etc/hadoop/conf,/usr/hdp/current/hadoop-client/*,/usr/hdp/current/hadoop-client/lib/*,/usr/hdp/current/hadoop-hdfs-client/*,/usr/hdp/current/hadoop-hdfs-client/lib/*,/usr/hdp/current/hadoop-yarn-client/*,/usr/hdp/current/hadoop-yarn-client/lib/*</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>spark2_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.spark2_shuffle.class</name>
    <value>org.apache.spark.network.yarn.YarnShuffleService</value>
  </property>
  <property>
    <name>yarn.nodemanager.container-manager.thread-count</name>
    <value>64</value>
  </property>
  <property>
    <name>yarn.nodemanager.localizer.client.thread-count</name>
    <value>20</value>
  </property>
  <property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>5</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>************</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.client.thread-count</name>
    <value>64</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.client.thread-count</name>
    <value>64</value>
  </property>
  <property>
    <name>yarn.scheduler.increment-allocation-mb</name>
    <value>32</value>
  </property>
  <property>
    <name>yarn.scheduler.increment-allocation-vcores</name>
    <value>1</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-vcores</name>
    <value>128</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>32</value>
  </property>
  <property>
    <name>yarn.timeline-service.enabled</name>
    <value>true</value>
  </property>
  <property>
  <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>8</value>
  </property>
  <property>
  <name>yarn.nodemanager.resource.memory-mb</name>
    <value>11520</value>
  </property>
  <property>
  <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>11520</value>
  </property>
  <property>
  <name>yarn.nodemanager.hostname</name>
    <value>*************</value>
  </property>
</configuration>

Редактировать: В ходе некоторой сетевой отладки я обнаружил, что временный порт, созданный контейнером для соединения с сервисом случайного воспроизведения, активно отказывается от соединения. (телнет сразу выдает ошибку)

1 Ответ

0 голосов
/ 05 июля 2018

При просмотре журналов активности ядра и системы мы обнаружили следующую проблему в /var/log/messages

xen_netfront: xennet: skb запускает ракету: 19 слотов

Это означает, что на наших машинах aws ec2 произошла потеря сетевых пакетов.

Передача данных в б / п контейнере и в случайном порядке происходит через вызовы RPC (ChunkFetchRequest, ChunkFetchSuccess и ChunkFetchFailure), и эти вызовы RPC были подавлены сетью.

Более подробную информацию об этом журнале можно найти в следующей теме.

http://www.brendangregg.com/blog/2014-09-11/perf-kernel-line-tracing.html

Сообщение журнала означает, что мы превышаем максимальный размер буфера пакета, который может быть помещен в очередь кольцевого буфера драйвера (16), и эти SKB потеряны

Scatter-collect собирает несколько ответов и отправляет их как один ответ, который, в свою очередь, отвечает за увеличение размера SKB.

Итак, мы отключили сборку рассеяния с помощью следующей команды.

sudo ethtool -K eth0 sg off

После этого больше не было потери пакетов.

Производительность также аналогична той, что была у нас в EMR.

...