2016-07-27 11 views
1

Ich habe eine mp4-Datei auf hdfs gelegt und versucht, es direkt zu analysieren, ich habe einen Klassennamen wie VideoRecordReader, in dem es den Casting-Fehler gibt. Unten ist die Beschreibung von Fehler.SplitFile gibt Casting Fehler

Sie haben Bibliothek /usr/local/lib/libopencv_core.so.3.0.0 geladen, die möglicherweise deaktiviert Stack-Guard haben. Die VM wird nun versuchen, den Stack Guard zu reparieren. versuch_201607261400_0011_m_000000_1: Es ist hoch empfohlen, dass Sie die Bibliothek mit 'execstack -c' reparieren, oder verknüpfen Sie es mit '-z noexecstack'. 16/07/26 17.32.27 INFO mapred.JobClient: Task-ID: attempt_201607261400_0011_m_000000_2, Status: FAILED java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSplit nicht zu gegossen werden kann org.apache.hadoop.mapred.FileSplit bei com.finalyearproject.VideoRecordReader.initialize (VideoRecordReader.java:65) bei org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.initialize (MapTask.java:521) bei org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java:763) bei org.apache.hadoop.mapred.MapTask.run (MapTask.java:364) um org.apache.hadoop.mapred.Child $ 4 .run (Child.java:255) um java.security.AccessController.doPrivileged (Native Metho d) unter javax.security.auth.Subject.doAs (Betreff.java:422) um org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1190) bei org.apache.hadoop.mapred. Child.main (Child.java:249)

Hier ist der Code von SplitFile.

public void initialize(InputSplit genericSplit, TaskAttemptContext context) 
      throws IOException, InterruptedException { 

     FileSplit split = (FileSplit) genericSplit; 
     Configuration job = context.getConfiguration(); 

     start = 0; 
     end = 1; 

     final Path file = split.getPath(); 
     FileSystem fs = file.getFileSystem(job); 
     fileIn = fs.open(split.getPath()); 
     filename = split.getPath().getName(); 
     byte [] b = new byte[fileIn.available()]; 
     fileIn.readFully(b); 
     video = new VideoObject(b); 
    } 

freundlicherweise helfen Sie mir danken Ihnen mit freundlichen Grüßen.

Antwort

0

Es ist wahrscheinlich, dass Sie die mapred und mapreduce APIs zusammen mischen.

Sie beschweren sich, dass Sie versuchen, org.apache.hadoop.mapreduce.lib.input.FileSplit zu org.apache.hadoop.mapred.FileSplit zu übertragen.

Sie müssen sicherstellen, dass Sie in der Regel keine Importe zwischen den beiden APIs mischen.

Überprüfen Sie, ob der org.apache.hadoop.mapred.FileSplit importiert wurde und ändern Sie ihn in org.apache.hadoop.mapreduce.lib.input.FileSplit.

+0

Vielen Dank, Sir, es funktioniert :) –