Apresentações do HDFS na faísca do apache

1

Eu tenho vários problemas relacionados ao HDFS, que podem ter raízes diferentes. Estou postando tanta informação quanto posso, com a esperança de que possa obter sua opinião em pelo menos alguns deles. Basicamente os casos são:

  • Classes do HDFS não encontradas
  • Conexões com algum datanode parecem ser lentas / inesperadamente próximas.
  • Os executores se perdem (e não podem ser reiniciados devido a um erro de falta de memória)

O que estou procurando:

- A configuração incorreta / ajuste do HDFS aconselha

- falhas de configuração globais (impacto de VMs e incompatibilidade de NUMA, por exemplo)

- Para a última categoria de problemas, gostaria de saber por que, quando o executor morre, a memória da JVM não é liberada, não permitindo, assim, que um novo executor seja lançado.

Minha configuração é a seguinte:

1 hipervisor com 32 núcleos e 50 GB de RAM, 5 VMs em execução neste hv. Cada vms tem 5 núcleos e 7GB. Cada nó tem 1 configuração de trabalho com 4 núcleos de 6 GB disponíveis (os recursos restantes são destinados a serem usados pelo hdfs / os

Eu executo uma carga de trabalho de contagem de palavras com um conjunto de dados de 4 GB, em uma configuração de faísca 1.4.0 / hdfs 2.5.2. Eu tenho os binários de sites oficiais (sem compilação local).

Por favor, deixe-me saber se posso fornecer outras informações relevantes.

(1) & 2) estão logados no worker, no arquivo work / app-id / exec-id / stderr)

1) Questões relacionadas à classe Hadoop

15:34:32: DEBUG HadoopRDD: SplitLocationInfo and other new Hadoop classes are unavailable. Using the older Hadoop location info code.
java.lang.ClassNotFoundException: org.apache.hadoop.mapred.InputSplitWithLocationInfo


15:40:46: DEBUG SparkHadoopUtil: Couldn't find method for retrieving thread-level FileSystem input data
java.lang.NoSuchMethodException: org.apache.hadoop.fs.FileSystem$Statistics.getThreadStatistics()

2) Problemas relacionados ao desempenho do HDFS

O seguinte erro surge:

 15:43:16: ERROR TransportRequestHandler: Error sending result ChunkFetchSuccess{streamChunkId=StreamChunkId{streamId=284992323013, chunkIndex=2}, buffer=FileSegmentManagedBuffer{file=/tmp/spark-b17f3299-99f3-4147-929f-1f236c812d0e/executor-d4ceae23-b9d9-4562-91c2-2855baeb8664/blockmgr-10da9c53-c20a-45f7-a430-2e36d799c7e1/2f/shuffle_0_14_0.data, offset=15464702, length=998530}} to /192.168.122.168:59299; closing connection
java.io.IOException: Broken pipe

15:43:16 ERROR TransportRequestHandler: Error sending result ChunkFetchSuccess{streamChunkId=StreamChunkId{streamId=284992323013, chunkIndex=0}, buffer=FileSegmentManagedBuffer{file=/tmp/spark-b17f3299-99f3-4147-929f-1f236c812d0e/executor-d4ceae23-b9d9-4562-91c2-2855baeb8664/blockmgr-10da9c53-c20a-45f7-a430-2e36d799c7e1/31/shuffle_0_12_0.data, offset=15238441, length=980944}} to /192.168.122.168:59299; closing connection
java.io.IOException: Broken pipe


15:44:28 : WARN TransportChannelHandler: Exception in connection from /192.168.122.15:50995
java.io.IOException: Connection reset by peer (note that it's on another executor)

Algum tempo depois:

15:44:52 DEBUG DFSClient: DFSClient seqno: -2 status: SUCCESS status: ERROR downstreamAckTimeNanos: 0
15:44:52 WARN DFSClient: DFSOutputStream ResponseProcessor exception  for block BP-845049430-155.99.144.31-1435598542277:blk_1073742427_1758
java.io.IOException: Bad response ERROR for block BP-845049430-155.99.144.31-1435598542277:blk_1073742427_1758 from datanode x.x.x.x:50010
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer$ResponseProcessor.run(DFSOutputStream.java:819)

Os dois erros a seguir aparecem várias vezes:

15:51:05 ERROR Executor: Exception in task 19.0 in stage 1.0 (TID 51)
java.nio.channels.ClosedChannelException
        at org.apache.hadoop.hdfs.DFSOutputStream.checkClosed(DFSOutputStream.java:1528)
        at org.apache.hadoop.fs.FSOutputSummer.write(FSOutputSummer.java:98)
        at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:58)
        at java.io.DataOutputStream.write(DataOutputStream.java:107)
        at org.apache.hadoop.mapred.TextOutputFormat$LineRecordWriter.writeObject(TextOutputFormat.java:81)
        at org.apache.hadoop.mapred.TextOutputFormat$LineRecordWriter.write(TextOutputFormat.java:102)
        at org.apache.spark.SparkHadoopWriter.write(SparkHadoopWriter.scala:95)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13$$anonfun$apply$6.apply$mcV$sp(PairRDDFunctions.scala:1110)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13$$anonfun$apply$6.apply(PairRDDFunctions.scala:1108)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13$$anonfun$apply$6.apply(PairRDDFunctions.scala:1108)
        at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1285)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1116)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1095)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:63)
        at org.apache.spark.scheduler.Task.run(Task.scala:70)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
        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)


15:51:19 DEBUG AkkaRpcEnv$$anonfun$actorRef$lzycompute$1$1$$anon$1: [actor] received message AssociationError [akka.tcp://[email protected]:38277] -> [akka.tcp://[email protected]:34732]: Error [Invalid address: akka.tcp://[email protected]:34732] [
akka.remote.InvalidAssociation: Invalid address: akka.tcp://[email protected]:34732
Caused by: akka.remote.transport.Transport$InvalidAssociationException: Connection refused: /x.x.x.x:34732
] from Actor[akka://sparkExecutor/deadLetters]

Nos registros do datanode:

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: localhost.localdomain:50010:DataXceiver error processing WRITE_BLOCK operation  src: /192.168.122.15:56468 dst: /192.168.122.229:50010
java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/192.168.122.229:50010 remote=/192.168.122.15:56468]

Eu também posso encontrar os seguintes avisos:

2015-07-13 15:46:57,927 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow BlockReceiver write data to disk cost:718ms (threshold=300ms)
2015-07-13 15:46:59,933 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow BlockReceiver write packet to mirror took 1298ms (threshold=300ms)

3) Perdas dos executores

No início do trabalho, os registros do mestre exibem as seguintes mensagens:

15/07/13 13:46:50 INFO Master: Removing executor app-20150713133347-0000/5 because it is EXITED
15/07/13 13:46:50 INFO Master: Launching executor app-20150713133347-0000/9 on worker worker-20150713153302-192.168.122.229-59013
15/07/13 13:46:50 DEBUG Master: [actor] handled message (2.247517 ms) ExecutorStateChanged(app-20150713133347-0000,5,EXITED,Some(Command exited with code 1),Some(1)) from Actor[akka.tcp://[email protected]:59013/user/Worker#-83763597]

Isso não cessará até que o trabalho seja concluído ou acabe falhando (dependendo do número de executores realmente falhando.

Aqui estão os logs de java disponíveis em cada tentativa de lançamento do executor (em work / app-id / exec-id no worker) : link

    
por Bacon 13.07.2015 / 22:53

0 respostas