1. 程式人生 > >MapReduce Error: java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:197)

MapReduce Error: java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:197)

13/07/23 22:53:05 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId= 13/07/23 22:53:05 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 13/07/23 22:53:05 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String). 13/07/23 22:53:05 INFO input.FileInputFormat: Total input paths to process : 44 13/07/23 22:53:10 INFO mapred.JobClient: Running job: job_local_0001 13/07/23 22:53:10 INFO input.FileInputFormat: Total input paths to process : 44 13/07/23 22:53:10 INFO mapred.MapTask: io.sort.mb = 100 13/07/23 22:53:14 INFO mapred.JobClient:  map 0% reduce 0% 13/07/23 22:53:14 INFO mapred.MapTask: data buffer = 79691776/99614720 13/07/23 22:53:14 INFO mapred.MapTask: record buffer = 262144/327680 13/07/23 22:53:14 INFO mapred.MapTask: Starting flush of map output 13/07/23 22:53:14 WARN mapred.LocalJobRunner: job_local_0001 java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:197) at org.apache.hadoop.io.Text.readFields(Text.java:265) at CoOccurrence$TextPair.readFields(CoOccurrence.java:74) at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:67) at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:40) at org.apache.hadoop.mapreduce.ReduceContext.nextKeyValue(ReduceContext.java:113) at org.apache.hadoop.mapreduce.ReduceContext.nextKey(ReduceContext.java:92) at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:175) at org.apache.hadoop.mapred.Task$NewCombinerRunner.combine(Task.java:1222) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1265) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1129) at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:549) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:623) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305) at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177) 13/07/23 22:53:15 INFO mapred.JobClient: Job complete: job_local_0001 13/07/23 22:53:15 INFO mapred.JobClient: Counters: 0 1、程式沒有Warning
2、StackOverFlow上有說是While迴圈的問題:然後我把程式中的While迴圈註釋掉還是這個Error。 3、StackOverFlow上還有人說不同的執行時間有的時候會出現,有的時候不出現。 網上還有很多辦法,但是依舊沒有解決掉。
最終查詢到的原因:     @Override     public void readFields(DataInput in) throws IOException {       first.readFields(in);       second.readFields(in);     }     @Override     public void write(DataOutput out) throws IOException {     first.write(out);     out.write('\t');//錯誤原因!!!
    second.write(out);
錯誤原因是DataInput類的readFully方法讀到了檔案末尾丟擲了異常……
在TextPair類的readFields方法中直接使用的Text類的readFields方法
public void readFields(DataInput in) throws IOException {
    int newLength = WritableUtils.readVInt(in);
    setCapacity(newLength, false);
    in.readFully(bytes, 0, newLength);
    length = newLength;
  }
這是Text類的readFields方法原始碼,裡面牽扯到兩個類,一個是Java的DataInput類,一個是WritableUtils類,大體看了一下,Text的在序列化和反序列化時,把資料長度寫入第一個byte,你在序列化時,在寫了第一個變數後,又寫了一個轉義字元,然後繼續寫下一個變數,而在你讀的時候卻沒做處理,這樣就會導致讀第二個變數的時候獨到的第一個byte不是第二個變數的長度,而是你打的\t,長度出錯了,如果讀的長度比原來的長度短,反而不會出錯(但是結果不對),如果比原長度長,那肯定就是EOFException,沒東西可讀了。
把out.write("\t")去掉就好了。
多謝cs402的同學!

相關推薦

MapReduce Error: java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:197)

13/07/23 22:53:05 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId= 13/07/23 22:53:05 WARN mapred.JobClient: Use Gen

tomcat啟動時報:IOException while loading persisted sessions: java.io.EOFException的解決方案 ZT

tint fan add ada osi ostc lac important .cn 錯誤代碼如下: 嚴重: IOException while loading persisted sessions: java.io.EOFException java.io.E

zookeeper報錯: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException

zookeeper報錯: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException 主要因為是沒有序列化。 可以使用預設的序列化類。如下所示: zkClient.setZkSerializer( new Ser

嚴重: Exception loading sessions from persistent storage java.io.EOFException

刪除Tomcat裡面的work\Catalina\localhost下的專案檔案內容即可解決.因為在你部署自己的專案檔案的時候,tomcat會自動給你新增一個session檔案,出現該報錯情景下,你就需要將該Tomcat裡面的work\Catalina\localhost下的專案檔案幹掉,自然就

JavaI/O中使用readUTF()報java.io.EOFException暫時解決方案

練習JavaI/O時自己試著寫demo,當使用RandomAccessFile的readUTF()方法時報java.io.EOFException。原始碼如下: DirList.java a.txt檔案內容如下: 執行程式,輸出結果如下: 檢視輸出結果,並且與輸出語句一

DataInput.readInt()報錯:java.io.EOFException

實現WritableComparable介面序列化時,在readFields方法裡,使用DataInput的readInt方法讀取在write方法裡寫的int,報錯:EOFException。 這個錯的意思是:輸入流已經到了結尾,在這裡的意思就是說,輸入流裡不夠一個整形(32位),查到的

記一個異常java.io.EOFException: No content to map to Object due to end of input

一個提供rest介面的服務出現了以下的異常(後臺介面報錯): [WARN ] 2018-04-16 14:10:02,919 --http-nio-8090-exec-9-- [org.jboss.resteasy.core.ExceptionHandler] Failed

hadoop讀取檔案java.io.EOFException解決

今天除錯hadoop讀取檔案系統的時候遇到了一個java.io.EOFException異常 原始程式碼 String path="hdfs://master:9000/user/hadoop-0.20.2/tmp/7-0-initial-docid"; FileSy

MultipartFile 檔案上傳時 java.io.EOFException 連線斷開的解決辦法

        java.io.EOFException: Unexpected EOF read on the socket          at org.apache.coyote.http11.Htt

supervisor無法正常執行Caused by: java.io.EOFException: null

告警發現一個supervisor停止,重啟啟動服務,但無法正常執行,檢視日誌報錯如下: 2015-09-27 10:21:53 c.n.c.f.i.CuratorFrameworkImpl [INFO] Starting 2015-09-27 10:21:53 o.a.z.

Error:Execution failed for task ':app:transformClassesWithMultidexlistForDebug'. > java.io.IOExcepti

在升級到as3.0後出現部分錯誤,但是通過查度娘解決起來還可以,但是遇到了以上這個錯誤著實讓我頭大!!! 主要解決方法: 由於自己專案有很多第三方依賴,導致dex檔案合併失敗,解決方法 在Module下的build.gradle中新增 multiDexEnabl

(全面)Tomcat執行時,報異常:IOException while loading persisted sessions: java.io.EOFException

JDK1.7+Tomcat7.0+SSM 一月 02, 2019 8:35:28 下午 org.apache.catalina.session.StandardManager doLoad 嚴重: IOException while loading persisted sessions: j

java.io.EOFException: End of File Exception between local host is: "thinkpad/127.0.0.1"; destination

 我這個是單機模式的hadoop環境 java.io.EOFException: End of File Exception between local host is: "thinkpad/127.0.0.1"; destination host is: "localhost

java.io.EOFException的解決辦法

有時我們在非正常關閉Tomcat的時候,下次啟動可能會出現以下錯誤 EOFException表示輸入過程中意外地到達檔案尾或流尾的訊號,導致從session中獲取資料失敗。異常是tomcat本身的問題,由於tomcat上次非正常關閉時有一些活動session被持久化(表

hdfs讀取檔案出發java.io.EOFException異常

[2014-05-05 17:42:51] [main] DEBUG - Error making BlockReader. Closing stale NioInetPeer(Socket[addr=/XXXXX,port=50010,localport=55897])  java.io.EOFExcep

UDP網路程式設計時出現:Exception in thread "main" java.io.EOFException異常

import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; imp

Tomcat啟動時報錯java.io.EOFException的解決方法

嚴重: Exception loading sessions from persistent storage  java.io.EOFException 刪除Tomcat裡面的work/Catalina/localhost下的內容即可解決 Tomcat在啟動時出現如

android studio 錯誤:“java.io.EOFException

大概一週前吧,執行Android應用的時候突然報“java.io.EOFException”,報錯的地方是在JsonReader裡面,當時第一懷疑物件就是後臺的小夥伴改了什麼東西,導致返回的json格式出問題了,然後各種除錯,查資料,版本回退,後臺返回資料寫死等

Java反序列化時報異常java.io.EOFException

問題 第一種解決辦法 在寫完物件後,加一句 oos.writeObject(null); 插入null是用來判斷是否讀取到結尾。oos是ObjectOutputStream例項。 然後讀物件的時候,使用while ((obj = o

android-ksoap2 java.io.EOFException異常

11-04 14:33:52.085: W/System.err(7355): java.io.EOFException 11-04 14:33:52.085: W/System.err(7355): at libcore.io.Streams.readAsciiLine