org.apache.hadoop.mapred.MapTask$NewOutputCollector@1398c56のクローズ中に例外を無視すると、java.lang.NullPointerException

1.問題の説明:MapReduceの二次ソート(セカンダリソート)をデバッグするプロセスでは、常にエラープログラムを実行します

org.apache.hadoop.mapred.MapTask$NewOutputCollector@1398c56のクローズ中に例外を無視する
と、java.lang.NullPointerException
org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:157)で
org.apache.hadoop.mapredで.MapTask $ MapOutputBuffer.compare(MapTask.java:1269)
org.apache.hadoop.util.QuickSort.sortInternal(QuickSort.java:74)で
org.apache.hadoop.util.QuickSort.sortで(QuickSort.java:63 )
org.apache.hadoop.mapred.MapTask $ MapOutputBuffer.sortAndSpill(MapTask.java:1602)で
org.apache.hadoop.mapred.MapTask $ MapOutputBuffer.flush(MapTask.java:1491)で
org.apache.hadoopで。 mapred.MapTask $ NewOutputCollector.close(MapTask.java:723)
org.apache.hadoop.mapred.MapTask.closeQuietlyで(MapTask.java:2021)
org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:797)で
org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)で
org.apache.hadoop.mapred.LocalJobRunner $仕事で$ MapTaskRunnable.run(LocalJobRunner.java:270)
java.util.concurrent.Executors $ RunnableAdapter.callで(Executors.java:511)
java.util.concurrent.FutureTask.run(FutureTask.java:266)で
のjavaで。 util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)で
java.lang.Thread.run(Thread.java:748)で
8860 [スレッド-6] INFO org.apache.hadoop.mapred.LocalJobRunner -地図タスクエグゼキュータが完了しました。
8872 [スレッド-6] org.apache.hadoop.mapred.LocalJobRunnerをWARN - job_local1887386767_0001
のjava.lang.Exception:java.lang.NullPointerExceptionが
org.apache.hadoop.mapred.LocalJobRunner $ Job.runTasks(LocalJobRunner.java:489)で
org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:549)で
のjava.lang.NullPointerException:によって引き起こさ
org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:157)で
ORGで.apache.hadoop.mapred.MapTask $ MapOutputBuffer.compare(MapTask.java:1269)
org.apache.hadoop.util.QuickSort.sortInternal(QuickSort.java:74)で
org.apache.hadoop.util.QuickSort.sortで(QuickSort.java:63)
org.apache.hadoop.mapred.MapTask $ MapOutputBuffer.sortAndSpillで(MapTask.java:1602)
org.apache.hadoop.mapred.MapTask $ MapOutputBuffer.flush(MapTask.java:1491)で
org.apache.hadoop.mapred.MapTask $ NewOutputCollector.close(MapTask.java:723)で
org.apache.hadoop.mapredで.MapTask.runNewMapper(MapTask.java:793)
org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)で
org.apache.hadoop.mapred.LocalJobRunner $仕事$ MapTaskRunnable.runで(LocalJobRunner.java :270)
java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)で
java.util.concurrent.FutureTask.run(FutureTask.java:266)で
java.util.concurrent.ThreadPoolExecutor.runWorkerで( ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)で
java.lang.Thread.runで(Thread.java:748)

 

 

2.分析:

(1)最初にNULLポインタを呼び出すことによって決定します。

(2)指定された場所のthis.buffer.reset(B1、S1、L1)にWritableComparator.java:157ジャンプをクリックします。

比較公共INT(バイト[] B1、INT S1、INT L1、バイト[] B2、INT S2、INT L2){ 
試み{
this.buffer.reset(B1、S1、L1)。
this.key1.readFields(this.buffer)。
this.buffer.reset(B2、S2、L2)。
this.key2.readFields(this.buffer)。
this.buffer.reset((バイト[])NULL、0、0);
}キャッチ(のIOExceptionがvar8){
スロー新規のRuntimeException(がvar8)。
}
(3)也就是说WritableComparatorバッファ没有初始化
パブリッククラスWritableComparator実装RawComparator、設定可能な{ 
のConcurrentHashMap <クラス、WritableComparator>コンパレータ=のConcurrentHashMap()の新しい新しいのプライベート静的最終;
;設定のconfプライベート
プライベートfinalクラスkeyClass <拡張WritableComparable?>;
民間最終WritableComparableキー1;
民間最終WritableComparableのKEY2、
プライベート決勝DataInputBufferバッファ、

比較的FirstSecondComparator最初のフィールド、パケットタイプであるReducerGroupingComparatorないデフォルトコンストラクタ関連クラスWritableComparatorクラスを探すために、プログラムで使用される(4)で定義されています
静的クラスReducerGroupingComparator WritableComparatorの公共拡張
{ //はデフォルトコンストラクタを追加してください、とスーパーを追加してください、そうでなければ、彼らは閉じるjava.lang.NullPointerExceptionがorg.apache.hadoop.mapred.MapTask$NewOutputCollector@1398c56のための使用中に異常を無視し、例外を報告される
パブリックReducerGroupingComparator()
{
スーパー(IntPair.class、真の);
}
@Override
比較公共INT(WritableComparable A、B WritableComparable){
IntPair Pairal =(IntPair)A;
IntPair pairB =(IntPair)B;
同年//戻り値0のセットに分割される
(INT)リターン(pairA.getFirst() - pairB.getFirst());
}
}
//デフォルト同じ機能は、クラスを表示するためのコントラスト設定をFirstSecondComparatorコントラスト関数を定義
パブリック静的クラスFirstSecondComparatorがWritableComparatorを拡張
{
//
//デフォルトコンストラクタを追加してください、とスーパーを追加してください、それ以外の場合はorg.apache.hadoop.mapred.MapTask$NewOutputCollector@1398cのために近い中に例外を無視して、例外java.lang.NullPointerExceptionが報告されます
    FirstSecondComparator公開()
{
スーパー(IntPair.class、真の);
}
@Override
比較公共INT(WritableComparable A、B WritableComparable){
IntPair Pairal =(IntPair)A;
IntPair pairB =(IntPair)B;
INT CMP =(INT) (pairA.getFirst() - pairA.getFirst());
IF(!CMP = 0)
{
リターンCMP;
}
ダブルpairA.getSecond A =();
ダブルpairB.getSecond B =();
戻り- ((A = B =)0:(A> Bの1:?? -1));
}
}
(5)なぜこのメッセージを追加する必要はありませんでした。java.lang.NullPointerExceptionがの例外を?オープニングスーパー(IntPair.class、真の);
それはWritableComparatorコンストラクタにジャンプします
WritableComparator保護(クラスkeyClass、ブールcreateInstances <拡張WritableComparable?>){ 
この(keyClass、(コンフィギュレーション)ヌル、createInstances);
}
これをクリックした後、別のオーバーロードコンストラクタにさらにジャンプ、ここを参照してください、私たちは名前を理解する必要がありますこれらの変数のメモリ空間には適用されませんでした上記報告した異常箇所、
保護WritableComparator(クラスkeyClass、構成CONF、ブールcreateInstances <?WritableComparableは延び>){ 
this.keyClass = keyClass。
this.conf = confに!= nullの?CONF:新しいConfiguration();
IF(createInstances){
this.key1 = this.newKey()。
this.key2 = this.newKey()。
this.bufferは新しいDataInputBufferを()=;
}他{
this.key1 = this.key2 = NULL;
this.buffer = NULL;
}


}

ご自身が、あなたが取得するために、下のリンクをクリックする必要があり、非常に強力な、インテリジェント株式解析ソフトウェアを開発しました:

https://www.cnblogs.com/bclshuai/p/11380657.html



 

おすすめ

転載: www.cnblogs.com/bclshuai/p/12329390.html