sql >> データベース >  >> NoSQL >> HBase

Hadoop RecordReaderの紹介、作業とタイプ

    以前のブログでは、 Hadoopについて学習しました。 カウンター 詳細に。このチュートリアルでは、HadoopのRecordReaderについて説明します。

    ここでは、RecordReaderの動作であるHadoopRecordReaderの概要について説明します。また、このMapReduceチュートリアルでは、MapReduceのRecordReaderのタイプ、HadoopMapReduceの単一レコードのサイズについても説明します。

    MapReduceのRecordReaderとは何ですか?

    RecordReaderは、入力のバイト指向のビューをマッパーのレコード指向のビューに変換します およびレデューサー 処理するタスク。

    Hadoop RecordReaderを理解するには、MapReduceDataflowを理解する必要があります。データフローの方法を学びましょう:

    MapReduceは、データ処理の単純なモデルです。 mapおよびreduce関数の入力と出力はキーと値のペアです 。以下は、マップおよびリデュース関数の一般的な形式です。

    • 地図: (K1、V1)→リスト(K2、V2)
    • 削減: (K2、リスト(V2))→リスト(K3、V3)

    処理を開始する前に、処理するデータを知る必要があります。したがって、 InputFormat クラスはこれを達成するのに役立ちます。このクラスは、 HDFSからファイルを選択します これは、マップ関数への入力です。また、入力分割の作成も担当します。

    また、それらをレコードに分割します。データをHDFSの分割数(通常は64 / 128 MB)に分割します。これはInputSplitとして知られています。 InputSplitは、データの論理表現です。 MapReduceジョブでは、マップタスクの実行数はInputSplitsの数と同じです。

    「getSplit()」を呼び出す クライアントはジョブの分割を計算します。次に、アプリケーションマスターに送信しました。ストレージの場所を使用して、クラスター上でそれらを処理するマップタスクをスケジュールします。

    その後、マップタスクは分割を createRecordReaderに渡します ( 方法。それから、分割用のRecordReaderを取得します。 RecordReaderはレコード(キーと値のペア)を生成します。次に、マップ関数に渡されます。

    MapReduceジョブ実行のHadoopRecordReaderは、inputsplitによって作成されている境界内のデータを使用します。次に、マッパーのキーと値のペアを作成します。 「開始」はファイル内のバイト位置です。

    開始時に、HadoopRecordReaderはキーと値のペアの生成を開始します。 「終了」は、RecorReaderがレコードの読み取りを停止する場所です。 RecordReaderでは、データはそのソースからロードされます。

    次に、データはマッパーによる読み取りに適したキーと値のペアに変換されます。ファイルの読み取りが完了するまで、inputsplitと通信します。

    RecorReaderはHadoopでどのように機能しますか?

    これは、レコードに対するイテレータ以上のものです。マップタスクは、1つのレコードを使用して、マップ関数に渡すキーと値のペアを生成します。これは、以下に示すマッパーの実行関数を使用して確認することもできます。

    public void run(Context context ) throws IOException, InterruptedException{
    setup(context);
    while(context.nextKeyValue())
    {
    map(context.setCurrentKey(),context.getCurrentValue(),context)
    }
    cleanup(context);
    }

    RecordReaderは、入力分割によって作成された境界の間に留まってキーと値のペアを生成する必要はありませんが、通常は留まります。また、カスタム実装では、inputsplitの外部でさらに多くのデータを読み取ることもできます。

    次に、 setup()を実行した後 、 nextKeyValue() コンテキストで繰り返します。これにより、マッパーのキーオブジェクトと値オブジェクトが設定されます。コンテキストとして、フレームワークはレコードリーダーからキー値を取得します。次に、 map()に渡します その仕事をする方法。

    したがって、マップ関数への入力(キー値)は、マップコードに記載されているロジックに従って処理されます。レコードがレコードの最後に到達すると、 nextKeyValue() メソッドはfalseを返します。

    HadoopRecordReaderの種類

    InputFormatは、HadoopでRecordReaderインスタンスを定義します。デフォルトでは、TextInputFormatを使用して、ReordReaderはデータをキーと値のペアに変換します。 TextInputFormatには、次の2種類のRecordReaderも用意されています。

    1。 LineRecordReader

    これはデフォルトのRecordReaderです。 TextInputFormatは、このRecordReaderを提供します。また、入力ファイルの各行を新しい値として扱います。次に、関連付けられたキーはバイトオフセットです。最初の分割でない場合は、分割の最初の行(またはその一部)を常にスキップします。

    最後に分割の境界の後に常に1行を読み取ります(データが利用可能な場合、それは最後の分割ではありません)。

    2。 SequenceFileRecordReader

    このHadoopRecorReaderは、シーケンスファイルのヘッダーで指定されたデータを読み取ります。

    単一レコードの最大サイズ

    以下のパラメータを使用して、最大値を設定します。

    conf.setInt("mapred.linerecordreader.maxlength", Integer.MAX_VALUE);

    結論

    結論として、Hadoop RecorReaderはマッパーへの入力(キー値)を作成します。また、TextInputFormatを使用してデータをキーと値のペアに変換します。

    Hadoop RecordReaderに関する質問があれば、このブログを気に入っていただけたでしょうか。お気軽にお知らせください。喜んで解決させていただきます。


    1. mongodbでの1回の更新呼び出しで2つの別々の配列にプッシュします

    2. Rails + MongoMapper+EmbeddedDocumentフォームヘルプ

    3. 一度に数百のカウンターをインクリメントしますか、redisまたはmongodb?

    4. すべてのドキュメントから配列のネストされたドキュメントのみを返す方法