キーを押すと、詳細な接続組み合わせパケット集約原理を軽減する方法です

1.reduce接続ゴール

気象データセット、および気象観測所名データテーブルID

StationId StationName

1〜杭州

2〜上海

3〜北京

録音温度データセット

StationIdタイムスタンプ温度

3〜20200216〜6

3〜20200215〜2

3〜20200217〜8

1〜20200211〜9

1〜20200210〜8

2〜20200214〜3

2〜20200215〜4

目的:上記二つのデータセットは、天候温度の名前は、ほとんどの天候IDとして出力する記録ステーションを追加され、接続されます。

1〜杭州〜20200211〜9

1〜杭州〜20200210〜8

2〜上海〜20200214〜3

2〜上海〜20200215〜4

3〜北京〜20200216〜6

3〜北京〜20200215〜2

3〜北京〜20200217〜8

2.主要な問題:パケット集約を減らす方法ですか?

地図出力結果は、最初のキー・フィールドの組み合わせstationidの昇順に従って昇順データを記録し、気象データ、次いで混合一緒に、shulfeプロセスは、地図データを低減する第2のフィールドに同じstationid記録が通過しますパーティションパーティションは、同じデータが同じを削減するために割り当てられますstationid、中に同じデータがstationidがグループ化されてい減らします。二つの作業を減らすと仮定すると、stationid%2によれば、結果はパーティションで仕切ら

ゾーン1

<1,0>杭州

<1,1> 20200211〜9

<1,1> 20200210〜8

<3,0>北京

<3,1> 20200216〜6

<3,1> 20200215〜2

<3,1> 20200217〜8

ディビジョン2

<2,0>上海

<2,1> 20200214〜3

<2,1> 20200215〜4

4 )次いで、各パーティションのデータと後のパーティションによるstationid パケットアグリゲーション

ゾーン1

ヒート1

<1,0> <杭州、  〜9 20200211、20200210〜8 >

ヒート2

<3,0> <北京、  〜6 20200216〜20200215 2、20200217〜8 >

パーティション2

<2,0> <上海、  〜3 20200214、20200215〜4 >

3.原則分析

以下に示すソースコードを減らします

// 
// ソースコードはのIntelliJ IDEAでの.classファイルから再作成
 // (Fernflower逆コンパイラによって供給)
 //
 
パッケージorg.apache.hadoop.mapreduce。

インポートにjava.io.IOException;
インポートするjava.util.Iterator;
輸入org.apache.hadoop.classification.InterfaceAudience.Public;
輸入org.apache.hadoop.classification.InterfaceStability.Stable;
輸入org.apache.hadoop.mapreduce.ReduceContext.ValueIterator;
輸入org.apache.hadoop.mapreduce.task.annotation.Checkpointable; 

@Checkpointable 
@public 
@Stable 
パブリック クラス減速<KEYIN、VALUEIN、KEYOUT、VALUEOUT> {
     パブリックリデューサ(){ 
    } 

    保護された ボイドセットアップ(減速<KEYIN、VALUEIN、KEYOUT、VALUEOUT> .Contextコンテキスト)スローIOExceptionが、InterruptedExceptionが{ 
    } 

    保護された 空隙(KEYINキー、反復処理可能を減らします< VALUEIN>の値、減速<KEYIN、VALUEIN、KEYOUT、VALUEOUT> .Contextコンテキスト)スローにIOException、InterruptedExceptionあるが{ 
        イテレータI $ = values.iterator()。

        ながら、{(iは.hasNext()$)
            VALUEIN値 = I $ .next(); 
            context.write(キー、値)。
        }

    } 

    保護された ボイドクリーンアップ(減速<KEYIN、VALUEIN、KEYOUT、VALUEOUT> .Contextコンテキスト)スローにIOException、InterruptedExceptionあるが、{ 
    } 

    公共ボイドラン(減速<KEYIN、VALUEIN、KEYOUT、VALUEOUT> .Contextコンテキスト)にIOException {InterruptedExceptionあるスロー
        これは。セットアップ(コンテキスト)。

        試す{ 
            (context.nextKey()){ながら
                this.reduce(context.getCurrentKey()、context.getValues()、コンテキスト)。
                。反復子<VALUEIN> ITER = context.getValues()反復子(); 
                IF(ITER ValueIteratorのinstanceof){ 
                    ((ValueIterator)ITER).resetBackupStore(); 
                } 
            }
        }最後に{ 
            this.cleanup(コンテキスト)。
        } 

    }

    パブリック 抽象 クラスコンテキスト実装 ReduceContext <KEYIN、VALUEIN、KEYOUT、VALUEOUT> {
         パブリックコンテキスト(){ 
        } 
    } 
}

shuffer検出プロセスをデバッグした後、直接ではなく、私たちの実装を減らすの減速関数を呼び出しますが、赤のランをマークし、上記の機能の実装は、実行する機能がグループ化されたトラバースキーにnextKey()関数のコンテキストで呼び出されます次いで、キーに対応する値の配列は、我々自身のコードが内部機能を実現低減あるthis.reduce()関数に渡されます。したがって、この機能グループがあります。

具体的には、リンクパケットの順序を減らす見ます

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

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

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

 

おすすめ

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