フレームのHadoopのMapReduce-のデータ出力原則OUTPUTFORMAT

1.OutputFormatインタフェースクラス

  OUTPUTFORMAT MapReduceの出力は、全出力をMapReduceのOUTPUTFORMATインタフェースを達成するために実装される基本クラスです。

  1.1テキスト出力TextOutputFormat

    TextOutputFormatデフォルトの出力フォーマットは、各レコードのテキスト行に書き込まれ、キーとその値は文字列に変換するTextOutputFormatコールのtoString()メソッドのように、任意のタイプであってもよいです。

  1.2 SequenceFileOutputFormat

    入力として後続のMapReduce SequenceFileOutputFormat簡単に圧縮するために、、そのコンパクトな形式で、良好な出力フォーマットであるタスクの出力、。

  1.3カスタムOUTPUTFORMAT

    ユーザーの要件、カスタム実装の出力によると、

2.カスタムOUTPUTFORMAT

  2.1利用シナリオ

    出力パスと出力ファイル形式の最終的な制御を達成するために、自動的にOUTPUTFORMATすることができます。

    例えば:別のディレクトリに出力結果データに応じMapReduceのプログラムタイプに、このようなフレキシブル出力要求がカスタムOUTPUTFORMATによって達成することができます。

  2.2カスタマイズステップOUTPUTFORMAT

    2.2.1カスタムクラスを継承FileOutputFormatいます。

    2.2.2書き換えRecordWriter、書き込み書き換え特定の出力データ()。

  2.3デマンド

    ログログ入力フィルタは、ファイルにBaiduのサイトbaidu.log出力を備え、それはother.log Baiduの出力ファイルへのサイトが含まれていません。

http:// www.baidu.com 
ます。http:// www.google.com 
ます。http:// cn.bing.com 
ます。http:// www.baidu.com 
ます。http:// www.sohu.com 
のhttp:// WWW .sina.com 
ます。http:// www.sin2a.com 
ます。http:// www.sin2desa.com 
ます。http:// www.sindsafa.com

3.カスタムケースOUTPUTFORMAT実用的な操作

  3.1 FilterMapperを書きます

パッケージcom.wn.outputformat。

輸入org.apache.hadoop.io.LongWritable; 
輸入org.apache.hadoop.io.NullWritable; 
輸入org.apache.hadoop.io.Text; 
輸入org.apache.hadoop.mapreduce.Mapper; 

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

パブリック クラス FilterMapperはマッパー<LongWritableは、テキスト、テキスト、NullWritable>は拡張{ 
    @Overrideは、
    保護された 無効マップ(LongWritableキー、テキスト値、コンテキストコンテキスト)にIOException、InterruptedExceptionある{スロー
         // 写出 
        context.write(値を、NullWritable。取得します() ); 
    } 
}

  3.2 FilterReducerを書きます

パッケージcom.wn.outputformat。

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

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

パブリック クラス FilterReducerは減速を<テキスト、NullWritable、テキスト、NullWritable>延び{ 

    テキストテキスト = 新しいテキスト(); 

    @Override 
    保護 ボイド低減(テキストキーを、反復処理可能で<NullWritableは> の値は、コンテキスト・コンテキスト)にIOException、InterruptedExceptionがスロー{
         // 获取一行 
        文字ライン= text.toString()。
        // 拼接 
        line =行+ " \ rを\ nは" ;
         // セット 
        。テキストSET (ライン);
         // 出力 
        context.write(テキスト、NullWritable。GET ()); 
    } 
}

  3.3 FilterRecordWriterを書きます

パッケージcom.wn.outputformat。

輸入org.apache.hadoop.fs.FSDataOutputStream; 
輸入org.apache.hadoop.fs.FileSystem; 
輸入org.apache.hadoop.fs.Path。
輸入org.apache.hadoop.io.IOUtils。
輸入org.apache.hadoop.io.NullWritable; 
輸入org.apache.hadoop.io.Text; 
輸入org.apache.hadoop.mapreduce.RecordWriter; 
輸入org.apache.hadoop.mapreduce.TaskAttemptContext; 

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

パブリック クラス FilterRecordWriterはRecordWriter <テキスト、NullWritable>延び{ 

    FSDataOutputStream atguiguOut = ヌル
    FSDataOutputStream otherOut = nullを

    公衆FilterRecordWriter(TaskAttemptContext仕事){
         // 取得したファイルシステムの
        ファイルシステムFS;
         試し{ 
            FS =ファイルシステム。GET (job.getConfigurationを());
             //は、出力ファイルのパスを作成します 
            atguiguPathがPATH = 新新(パスをE:\\ \\ APTECH Hadoopの大規模なデータ\\ \\ 04をbaidu.log " ); 
            パスotherPath = 新しい新しいパス(" E:\\ APTECH Hadoopの\\ \\ \\大規模データother.log 04 " );
             // 出力ストリームを作成します 
            atguiguOut = fs.create(atguiguPath); 
            otherOut =fs.create(otherPath)。
        } キャッチ(IOExceptionを電子){ 
            e.printStackTrace(); 
        } 
    } 

    @Override 
    公共 のボイドの書き込み(テキスト、テキスト、NullWritable nullWritableは)にIOException、InterruptedExceptionがスロー{
         // 判断包含"百度"输出到不同文件
        場合(text.toStringは()。(含まれている" 百度" {))
            atguiguOut.writeを( text.toString()GetBytesメソッド())。
        } { 
            otherOut.write(text.toString()GetBytesメソッド()。)。
        } 
    } 

    @Override 
    公共 のボイド近い(TaskAttemptContext taskAttemptContext)はIOExceptionが、例外:InterruptedExceptionをスロー{
         // 关闭资源
        IOUtils.closeStream(atguiguOut)。
        IOUtils.closeStream(otherOut)。
    } 
}

  3.4 FilterOutputFormatを書きます

パッケージcom.wn.outputformat。


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

輸入org.apache.hadoop.io.NullWritable; 
輸入org.apache.hadoop.io.Text; 
輸入org.apache.hadoop.mapreduce.RecordWriter; 
輸入org.apache.hadoop.mapreduce.TaskAttemptContext; 
輸入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat。


パブリック クラス FilterOutputFormatはFileOutputFormat <テキスト、NullWritable>延び{ 

    @Override 
    公共 RecordWriter <テキスト、NullWritable> getRecordWriter(TaskAttemptContext taskAttemptContextが)にIOException、InterruptedExceptionあるが{スロー
         戻り 新しいFilterRecordWriter(taskAttemptContext)を、
    } 
}

  3.5 FilterDriverを書きます

com.wn.outputformatパッケージ; 

インポートorg.apache.hadoop.conf.Configuration; 
インポートorg.apache.hadoop.fs.Path; 
インポートorg.apache.hadoop.io.NullWritable; 
インポートorg.apache.hadoop.io.Text ; 
インポートorg.apache.hadoop.mapreduce.Job; 
インポートorg.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
インポートorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 

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

公衆 クラスFilterDriver {
     公共 静的 ボイドメイン(文字列[]引数)はIOExceptionが、ClassNotFoundExceptionがスローされ、InterruptedExceptionある{
         // 入出力経路ニーズは、そのコンピュータ上の実際の入力及び出力経路に応じて設定される 
        引数= 新しい新しい文字列[] {" E:\\北大青鸟\\大数据04 \\ Hadoopの\\入力"" E:\\北大青鸟\\大数据04 \\ Hadoopの\\出力" }。
        設定confが = 新しいコンフィギュレーション(); 
        ジョブジョブ = Job.getInstance(CONF)。

        job.setJarByClass(FilterDriver。クラス); 
        job.setMapperClass(FilterMapper。クラス); 
        job.setReducerClass(FilterReducer。クラス); 

        job.setMapOutputKeyClass(テキスト。クラス); 
        job.setMapOutputValueClass(NullWritable。クラス); 

        job.setOutputKeyClass(テキスト。クラス); 
        job.setOutputValueClass(NullWritable。クラス); 

        // 仕事に独自のカスタム設定コンポーネント出力フォーマット 
        。job.setOutputFormatClass(FilterOutputFormat クラス); 

        FileInputFormat.setInputPaths(仕事、新しい新しいパス(引数[ 0 ])) ; 

        FileOutputFormat.setOutputPath(ジョブ、新しい新しいパス(引数[ 1 ])); 

        ブールB =(job.waitForCompletion 真の); 
        System.exitと(B01 ); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/wnwn/p/12642495.html