呉ユーキション - 自然生まれHADOOP行った実験の研究ノート:カウントの書き込みWORプログラム

実験の目的

理解のMapReduceの動作原理を

理解パーティショナの方法を書きます

理解 GroupingComparatorの方法を書きます

原則

  私たちは学んだのHadoopの基礎のほとんどを、そして残りは、実際のビジネスの問題を解決するためにHadoopを使用することです。まず、MapReduceの作業工程を見て:
  によるデータ読み取りがRecordReaderのInputFormatは、その後、マップ処理は、キーと値のペアの形式で書かれて完了すると、マップで処理する外出するキーと値のペアの形式で記述し、定義されて来て、途中で経由パーティションは、パケットは、ソート後、反復子が経過低減に同一のキー値を、各データ処理タスクは、セット・イテレータからなる同一のキー値を減少させることです。

1.カウントが達成言葉
  私たちはまず、ワードカウントプログラムを実現するために必要なキー、値として言葉そして、読み取り終了データをワードに分割されたマップ。1は、ライトで、データはワードキーの削減を取得することで、値のすべて1つのイテレータからなる単語に対応し、我々はすべての単語の数の値まで追加されます。
  ワードカウントが最も簡単かつ最高の体現である 1は、MapReduceのプログラムは「Hello World」ののMapReduceのバージョンと呼ばれることができると思いました。下に示すように、統計的な単語が表示され、各シリーズのテキストファイルの数:主な機能は、ワードカウントを完了することです:

 

 

2.カスタムパーティションを実装
  時には我々は合理的に自分の願いに応じてそれぞれに割り当てることができるようにしたい、計算を減らす単語、例えば、私は最終的に文字で別々の出力を開始し、すべての単語を入れたい、この時間は、カスタムのパーティションを必要とするキー与えられたにで始まる単語に減らします。カスタムパーティション分割パーティション分割またはサブクラスから継承するクラスを定義する必要性を仕切る、getPartitionは、ビジネスニーズに応じて減少させるために割り当てられた異なる鍵を割り当てる方法を実施しました。

アルファベット順にソートどのくらい3.リアライズ
  統計は、単語の数は難しいビジネスではありませんが、我々は結果の出力をソートしたいです。もちろん、我々はプログラムの実行が終了した後に使用することができますソートするには、シェルPythonと他のツールを、私たちはまた、MapReduceの直接部品を発注来る使用することができ、使用MapReduceはGroupingComparatorのMapReduceのソート私たちを助けるためにフレームワークを使用することができています。

4.mapreduce作業手順
  によるデータ受信RecorderReaderのInputFormatを読み取るは、定義され、そして、キーと値のペアの形式で<キー、値のスタイル=「ボックス -sizing:境界ボックス;」> マッププログラムに渡し、処理をマップに完了する<キー、値のスタイル=「ボックス -sizing:境界ボックス;」> 着信パーティショナカスタムに従って決定減らす書面、減速のそれぞれの着信データ、同じキー値はキーと値のペアになりますイテレータに、これは同じカスタムGroupingComparatorに基づいているかどうかを判断するための鍵。これは、キーの方法を比較するために応じてソートされます。

書き込みの5.Partitioner方法
  私たちのカスタムパブリック抽象int型getPartition(KEYキー:実装getPartition方法、getPartitionの署名があることをクラスから継承するにパーティション分割パーティション分割の必要性を 、VALUE値、int型numPartitions)、 キーと値が手続きマップを書かれています値のペアは、numPartitionsは、番号がプログラムコードによって提供される低減戻り値はインデックスである減らします。

6.GroupingComparator書き込む方法
  出力にキーマップは、同じキー値が同じ繰り返し内に配置され、パケットは、キーに応じて、キーを上書きすることにより、同じルール米国GroupingComparatorセットか否かが判断されます比較の方法は、あなたが意思決定ロジックを変更することができます。

実験環境

1. OS
  サーバー: Linux_Centosの
  マニピュレータ: Windows_7
  サーバーのデフォルトのユーザー名:ルート、パスワード:123456
  マニピュレータデフォルトのユーザー名: Hongya、パスワード:123456
2.実験ツールのIntelliJ IDEA
  

 

 

IDEAはのIntelliJ IDEA、Java言語の開発統合環境の略で、業界内のIntelliJは自動的アシスタント、リファクタリング、J2EEのサポート、アリ、JUnitの、CVSの統合を促していること、特にスマートコードでは、最高のJava開発ツールの一つとして認識されていますエリア、コードレビュー、および革新的なGUIの設計およびその他の機能は例外であると言うことができます。ジェットブレーンズのIDEAは、開発者は、主に東欧のプログラマが知られている厳しい、同社はプラハ、チェコ共和国の首都に本社を置き、同社の製品です。利点: 1)最も顕著な自然の機能がデバッグしている(デバッグ)は、Javaコードは、JavaScript、jQueryの、Ajaxや他の技術をデバッグすることができます。他の編集はさておき見ていない、これははるかに良いのEclipseよります。2)第1のチェック、オブジェクトタイプマップを実装クラスは、ハッシュマップを使用している場合、フィルタは自動的に空きエントリの例です。Eclipseのとは違って、唯一の()メソッドは、デフォルトのtoStringで必要なキーを検索します。3)第二に、動的に必要式の値が評価は、例えば、私はクラスのインスタンスを持っていますが、そのAPIを知らない、コード補完は、それがサポートするメソッドを指摘することができ、この点は、Eclipseと一致することはできません。4)最後に、マルチスレッドのデバッグの場合には、ログのコンソール機能を使用すると、マルチスレッドの実装を確認することができます。短所: 1)に比べて、プラグイン開発の欠如、 Eclipseの、IDEAのプラグインのみのドワーフと考えることができ、少ない電流公式プラグイン400、および多くのプラグインと実質的なものよりも、IDEA自体が強すぎるかもしれません。2)プロジェクトが一致していない心理的なプログラマーを持参する方法のテスト部分に開発されたテストのように構築されている場合は特に、開発のためのいくつかの不便をもたらし、同じプロジェクトにのみ単一のページをサポートしています。

  





  


3)技術記事の欠如を、現在のネットワークは基本的にノー技術サポートを見つけることができ、技術的な記事も少なく、これまでの間。
4)リソースの消費量が比較的大きく、中型のビルドである J2EEプロジェクト、ほとんど500Mハードディスクスペースのサポートに含むソフトウェアのインストールを含め、より多くの200Mメモリサポートよりに基本的に開始。(リアルタイムで多くのインテリジェントな機能として、クラスを含むすべてのクラス、システムが含まれては、IDEAのワーキングパスにIDEAを格納しています)。特徴:  のインテリジェントな選択  の豊富なナビゲーションモードの  履歴機能が完全にJUnitのを支援する  優れたサポートを再構成するため  の補助エンコード  柔軟なレイアウト機能のためのXMLの完璧なサポートの  動的な文法の検出  コードチェックを、というように。

  



  



  

ステップ 1:カスタム出力クラス

  パッケージの実験コード com.hongya.day025 hellohadoopプロジェクトの下。/ hongya / ideaspace / hellohadoop:私たちは、D入力することができます / SRC / COM / hongya / day025 ソースコードを表示します。

  私たちは、ソートに必要な1.1は、まず次のように、出力クラスおよびワードカウントを含める必要性をカスタマイズし、独自の出力クラスを定義する必要があります。

パブリッククラスWORDCOUNT実装WritableComparable <WORDCOUNT> {

 

    プライベート文字列の単語;

    プライベート長い数;

    // GETSETメソッド、コンストラクタ省略

    @オーバーライド

    公共のintのcompareTo(WORDCOUNT O){

        私は= int型 - Long.compare(数、o.count)。

        もし(私!= 0){

            私は返します。

        }

        リターンword.compareTo(o.word)。

    }

 

    @オーバーライド

    公共のボイドの書き込み(アウトデータ出力)は、IOExceptionがスロー{

 

        out.writeUTF(単語)。

        out.writeLong(カウント)。

    }

 

    @オーバーライド

    公共ボイドreadFields(DataInput内の)は、IOExceptionが{スロー

 

        ワード= in.readUTF()。

        カウント= in.readLong();

    }

  私たちは、実装する必要があります削減内部ソートするための方法として、メソッドcompareToメソッドを、また読み取りおよび書き込みを定義します

  1.2カスタム分割し、単語の出現回数順達成するためにグループ化します。
  私たちは、欲しいだけ各に従って行うことができ、ソートので、我々は混沌とすることはできませんデータのそれぞれに入力を削減する必要があるので、ソート内部カウントを減らし、データがマップを完了できるようにします。デザイン・パーティションは、単語数に応じて分割この点を考慮することは合理的でなければなりません。

@オーバーライド

    公共INT getPartition(WORDCOUNTキー、NullWritable値、int型numReduceTasks){

 

        IF(numReduceTasksは1 ==){

            0を返します。

        }

        IF(key.getCount()<numReduceTasks){

            リターン(INT)key.getCount();

        }

        リターンnumReduceTasks - 1。

    }

  まず、決定それは、計算各カウント数が相対的に大きいだけで対応するカウントを減少させないであれば、削減数を、すべてのは、もちろん、あなたがより良いパーティションをカスタマイズすることができ、最終的な計算を低減します。

  機能をグループ化する1.3カスタム。
  もちろん、私たちは、グループ化の言葉を無視し、それが唯一の論理比較回数で、すべてが同じグループに同じすべてをカウントできるようにすることです

 @オーバーライド

    公共INTは比較(WritableComparable、WritableComparable B){

        WORDCOUNT O1 =(WORDCOUNT)。

        WORDCOUNT O2 =(WORDCOUNT)B。

        リターンLong.compare(o1.getCount()、(o2.getCount()));

 

    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/tszr/p/12169339.html