---のMapReduceのHadoopの基礎を達成するために

A:MapReduceの思考

(A)MapReduceの問題

1.クラスタ内のノードに分散したコードを達成するための方法、およびそれらを実行する方法

2.指定されたマシンが稼働したコードの配布

ノードの動作の3リアルタイム監視

4.結果が要約されている方法

要するに:私たちの単純なビジネス・ロジックを簡単に大量のデータに分散コンピューティング環境に拡張します

(B)基本的な概念と、プログラムロジックの調製のMapReduce

MapReduceのプログラムの実行プロセスを2つの段階に分けられます:マッパーと減速ステージのステージ

含まマッパー段階:

コードをコピー
1>、入力ファイルのパスを指定し、入力ファイルと論理的にデータの分割片を複数に分割。その後スライス入力キーと値のペア<K1、V1>に分解、k1は、多くの場合、v1は一定のルールに従ってテキストの行の内容で、私たちは、開始オフセットと言われています。

各キーと値のペア<K1、V1>マップ関数がいったん呼び出される前記2>その調製をマッピングする関数呼び出しを、<K1、V1>へのキー入力は、<K2、V2>キーと値のペアに変換します。

3>出力キー値<K2、V2>分割、パケットがそれらとセットに同じキー値であり、グループ化、ソート。

ローカルマージ処理(合成)に4>(オプション)データパケット。
コードをコピー

含ま減速段階:

5>マッパー出力する複数のタスクから、異なるパーティションに応じて、出力マッパー複数のタスク続いて異なる減速治療上のネットワーク・ノードをコピーするには、組み合わされ順序付けされます。

6>関数呼び出しは、それらの調製を低減するために、キーと値のペアに変換<K2、V2が構成へのキー入力> <K3、V3>

7>リデューサーは、タスクは、指定したファイルに出力を保存します。

2:WORDCOUNTプログラム実現

書き込み()マッププログラム

cn.hadoop.mr.wcパッケージ; 

インポートにjava.io.IOException; 

インポートorg.apache.commons.lang.StringUtils; 
インポートorg.apache.hadoop.io.LongWritable; 
インポートorg.apache.hadoop.io.Text; 
インポートorg.apache.hadoop.mapreduce.Mapper; 

//ジェネリック第4、第1マッパーの二つは、入力データ・タイプを指定マッパーデータ型の2つの出力
される//マップとデータの入出力を減らしますカプセル化に<K、V>キーと値のペアの形式で
//デフォルト、マッパーデータ入力、テキスト値は行の内容であり、キー列が開始オフセット処理される
パブリック クラス WCMapperマッパー延び<LongWritableを、テキスト、テキスト、LongWritable> { 
    @Override     //カスタム・データ・タイプは、ネットワークの伝送効率を向上させるためにコーディング冗長データネットワークに表示されません。機能は、クラスタのデータ通信改善
    保護 のボイドマップ(LongWritableキー、テキスト値を、マッパー<LongWritable、テキスト、テキスト、LongWritable> .contextコンテキスト)
            IOExceptionが、例外:InterruptedExceptionをスロー{ 
        // 行の内容を取得する 
        文字列LINEVAL = value.toStringを(); 
        
        // 区切りによるテキストセグメンテーションのこの行 
        文字列の単語[] = StringUtils.split(LINEVAL、"  " ); 
        
        / / 出力モード<K、V>フォームに反復、
        のために(文字列ワード:ワード){
             // 出力データがコンテキストに書き込まれる 
            (context.write 新しい新しいテキスト(ワード)、新しい新しい LongWritable(1 )); 
        } 
        
        / /実際に<kは、V>書き込みクラスタ・ノードに送信されますが、キャッシュから送出されたクラスのデータを完全に横断した後、同じキーは、ありません
        //結果は<K、<V1、V2の形で送信され、実際の形式は<Kである、V3、...、VN >>、<1,1,1,1,1、...、1 >>
     } 
}

書き込み(b)のプログラムを削減

パッケージcn.hadoop.mr.wc; 

インポートにjava.io.IOException; 

輸入org.apache.hadoop.io.LongWritable; 
輸入org.apache.hadoop.io.Text; 
輸入org.apache.hadoop.mapreduce.Reducer; 

パブリック クラス WCReducerは減速が<テキスト、LongWritableは、テキスト、LongWritable>が延び{ 
    @Overrideが
    保護 ボイド低減(テキストキー、反復処理可能<LongWritable> の値、
            減速 <テキスト、LongWritable、テキスト、LongWritable> .Contextコンテキストが)にIOException、InterruptedExceptionある{スロー
         長いですカウント= 0 ;
        // 遍历値、统计每个キー出现的总次数
        ため(LongWritable値:値){
            COUNT。+ =値GET (); 
        } 
        // 出力統計そのワード 
        context.write(キー、新しい新LongWritable(COUNT)); 
    } 
}

(C)ジョブを生成するには、クラスター・マップに提出し、低減され

パッケージcn.hadoop.mr.wc; 

インポートにjava.io.IOException; 

輸入org.apache.hadoop.conf.Configuration。
輸入org.apache.hadoop.fs.Path。
輸入org.apache.hadoop.io.LongWritable; 
輸入org.apache.hadoop.io.Text; 
輸入org.apache.hadoop.mapreduce.Job。
輸入org.apache.hadoop.mapreduce.lib.input.FileInputFormat。
輸入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat。

パブリック クラスWCRunner { 

    公共 静的 ボイドメイン(文字列[]引数)がスローにIOException、ClassNotFoundExceptionが、InterruptedExceptionある{ 
        構成CONF = 新しい構成(); 
        仕事wcjob =Job.getInstance(CONF); 
        
        //それらジャーパッケージで使用されることがジョブ全体のクラス設定
        wcjob.setJarByClass(WCRunner.classを); 
        
        //マッパージョブクラスのセットと減速が使用
        wcjob.setMapperClass(WCMapper.class)を、
        wcjob.setReducerClass(WCReducer.class); 
        
        //マップを設定し、出力クラス減らす
        wcjob.setOutputKeyClass(Text.class)を、
        wcjob.setOutputValueClass(LongWritable.class); 
        
        //このマップは、別々に出力データk、V型を提供することができます。上記のタイプが異なる場合、次のように有用である
        wcjob.setMapOutputKeyClass(Text.class); 
        wcjob.setMapOutputValueClass(LongWritable.class); 
        
        パス//指定された入力データを処理するための格納された
        FileInputFormat.setInputPaths(wcjob、新しいパス( " / WC / INPUT /「)); 
        //指定されたストレージパス出力構造
        FileOutputFormat.setOutputPath(wcjob、新しい新しいパス(「/ WC /出力」)); 
        
        //ジョブが実行中のクラスタに提出される
        wcjob.waitForCompletion(真の); //パス引数は次のとおりです。プログラムのステータスと進行状況を表示するかどうか
     } 
}

(D)補助

マップを実行し、削減するために、あなたはまた、フォルダの下に、インポートのjarパッケージのMapReduceファイル共有フォルダに必要

(E)輸出のjarパッケージ

(VI)の実験的試験

1.実験データ

ハローキティハローマーク
バイキティ
良い朝
セイこんにちはシステムパスの
Hostsファイル
を開き、ファイルを
こんにちはssyfj 
取得アクセス
取得デフォルト
wcdata.txt

HDFSシステムへ2.アップロード

ファイル入力ディレクトリを作成します。

HadoopのFS -mkdir -p / WC /入力/

アップロードは、入力ディレクトリにファイル

HadoopのFS -put wcdata.txt / WC /入力/

注:結果出力ディレクトリを作成しないでください、またはエラーになります

データ解析のための3コールプログラム

Hadoopのジャーwc.jar  cn.hadoop.mr.wc.WCRunner

私たちの輸出のjarパッケージをwc.jar、cn.hadoop.mr.wc.WCRunnerは、私たちが実行メインクラスです

4.チェック結果

3:Hadoopのローカルテスト

(A)プロジェクトに(依存JARライブラリLIBパケットを含む)HDFS、MapReduceの、糸ジャーパケットを導入

(B)スレッド「メイン」のjava.lang.NullPointerExceptionの問題で解決例外(二つの方法)

メインクラスのmainメソッドの先頭に1を追加WCRunner

        するSystem.setProperty(" hadoop.home.dir "" E:\\ Hadoopの\\のHadoop-2.7.1 " )。

環境変数を追加します。2.

(C)は、ホームディレクトリのHadoop下のbinディレクトリに以下のファイルを入手します

ダウンロード:https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1

Cへのbinディレクトリ内のすべてのファイルをインポートする(D):\ WINDOWS \ System32ディレクトリ

(E)の結果は見ます

(VI)Eclipseの実行にHadoopを解決するために、ログには、問題が表示されません

一般的に次のことが発生します。MapReduceの進捗情報は表示されません。

log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).  
log4j:WARN Please initialize the log4j system properly.  
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.  

这种情况一般是由于log4j这个日志信息打印模块的配置信息没有给出造成的,可以在项目的src目录下,新建一个文件,命名为“log4j.properties”,填入以下信息:

log4j.rootLogger = INFO、STDOUT   
log4j.appender.stdout = org.apache.log4j.ConsoleAppender   
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout   
log4j.appender.stdout.layout.ConversionPattern =%D%P [ %のC] - %M%N   
log4j.appender.logfile = org.apache.log4j.FileAppender   
log4j.appender.logfile.File =目標/ spring.log   
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout   
のlog4j .appender.logfile.layout.ConversionPattern =%D%P [%のC] - %のm個の%nを  

 

おすすめ

転載: www.cnblogs.com/ssyfj/p/12327470.html