2016-07-27 52 views
1

我已經在hdfs上放置了一個mp4文件,並試圖直接分析它,我有一個類名爲VideoRecordReader,它給出了鑄造錯誤。以下是錯誤的描述。SplitFile給出了鑄造錯誤

您已加載其中 可能已禁用堆棧後衛庫/usr/local/lib/libopencv_core.so.3.0.0。虛擬機將嘗試修復現在的警衛堆棧 。 attempt_201607261400_0011_m_000000_1:建議您使用'execstack -c'修復庫,或者使用'-z noexecstack'鏈接 。 16/07/26 17時32分27秒INFO mapred.JobClient:任務標識:attempt_201607261400_0011_m_000000_2, 狀態:失敗java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSplit不能轉換爲 org.apache.hadoop.mapred.FileSplit在 com.finalyearproject.VideoRecordReader.initialize(VideoRecordReader.java:65) 在 org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.initialize(MapTask.java:521) 在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)at org.apache.hadoop.mapred.Child $ 4 .run(Child.java:255)at java.security.AccessController.doPrivileged(Native Metho d) javax.security.auth.Subject.doAs(Subject.java:422) org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190) at org.apache.hadoop.mapred。 Child.main(Child.java:249)

這裏是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); 
    } 

請親切地幫助我,謝謝你最好的問候。

回答

0

它可能是你將mapredmapreduce API混合在一起。

它抱怨說您要將org.apache.hadoop.mapreduce.lib.input.FileSplit投到org.apache.hadoop.mapred.FileSplit

您需要確保您通常不會在兩個API之間混合導入。

因此請檢查org.apache.hadoop.mapred.FileSplit是否已導入並將其更改爲org.apache.hadoop.mapreduce.lib.input.FileSplit

+0

謝謝你,先生,它的工作:) –