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