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

HadoopInputFormatとMapReduceのInputFormatのタイプ

    以前のHadoopチュートリアル Hadoop Mapperの詳細な説明を提供しました およびレデューサー。 このブログでは、MapReduceプロセスの他のコンポーネントであるHadoopInputFormatについて説明します。

    HadoopのInputFormatとは何か、MapReduceInputFormatによって提供される機能について説明します。また、MapReduceのInputFormatのタイプと、InputFormatを使用してマッパーからデータを取得する方法についても説明します。

    Hadoop InputFormatとは何ですか?

    Hadoop InputFormat Map-Reduceジョブを実行するための入力仕様について説明します。

    InputFormatは、入力ファイルを分割して読み取る方法を説明します。 MapReduceジョブの実行では、InputFormatが最初のステップです。また、入力分割を作成し、それらをレコードに分割する役割も果たします。

    入力ファイルには、MapReduceジョブのデータが保存されます。入力ファイルはHDFSにあります 。これらのファイル形式は任意ですが、行ベースのログファイルとバイナリ形式を使用することもできます。したがって、MapReduceでは、InputFormatクラスは以下の機能を提供する基本的なクラスの1つです。

    • InputFormatは、入力するファイルまたはその他のオブジェクトを選択します。
    • データ分割も定義します。個々のマップタスクのサイズとその潜在的な実行サーバーの両方を定義します。
    • HadoopInputFormatはRecordReaderを定義します。また、入力ファイルから実際のレコードを読み取る役割もあります。

    マッパーからデータを取得するにはどうすればよいですか?

    マッパーからデータを取得するメソッドは次のとおりです。getsplits() およびcreateRecordReader() これは次のとおりです:

    public abstract class InputFormat<K, V>
    {
    public abstract List<InputSplit> getSplits(JobContext context)
    throws IOException, InterruptedException;
    public abstract RecordReader<K, V>
    createRecordReader(InputSplit split,
    TaskAttemptContext context) throws IOException,
    InterruptedException;
    }

    MapReduceのInputFormatのタイプ

    Hadoopには、さまざまな目的で使用されるさまざまなタイプのMapReduceInputFormatがあります。以下でHadoopInputFormatタイプについて説明しましょう:

    1。 FileInputFormat

    これは、すべてのファイルベースのInputFormatsの基本クラスです。 FileInputFormatは、データファイルの場所を持つ入力ディレクトリも指定します。 MapReduceジョブの実行を開始すると、FileInputFormatは読み取るファイルを含むパスを提供します。

    このInpuFormatはすべてのファイルを読み取ります。次に、これらのファイルを1つ以上のInputSplitに分割します。

    2。 TextInputFormat

    これはデフォルトのInputFormatです。このInputFormatは、各入力ファイルの各行を個別のレコードとして扱います。解析は実行されません。 TextInputFormatは、フォーマットされていないデータやログファイルなどの行ベースのレコードに役立ちます。したがって、

    • キー– これは、ファイル内の行の先頭のバイトオフセットです(ファイル全体が1つに分割されているわけではありません)。したがって、ファイル名と組み合わせると一意になります。
    • 価値– 行の内容です。ラインターミネータは除外されます。

    3。 KeyValueTextInputFormat

    これはTextInputFormatに似ています。このInputFormatは、入力の各行を個別のレコードとしても扱います。違いは、TextInputFormatは行全体を値として扱うことですが、KeyValueTextInputFormatは、行自体をタブ文字(‘/ t’)によってキーと値に分割します。したがって、

    • キー– タブ文字までのすべて。
    • 価値– タブ文字の後の行の残りの部分です。

    4。 SequenceFileInputFormat

    シーケンスファイルを読み取るInputFormatです。シーケンスファイルはバイナリファイルです。これらのファイルには、バイナリキーと値のペアのシーケンスも格納されます。これらはブロック圧縮されており、いくつかの任意のデータの直接シリアル化と逆シリアル化を提供します。したがって、

    キーと値はどちらもユーザー定義です。

    5。 SequenceFileAsTextInputFormat

    これはSequenceFileInputFormatのバリアントです。この形式は、シーケンスファイルのキー値をテキストオブジェクトに変換します。したがって、「 tostring()」を呼び出して変換を実行します キーと値の’。したがって、SequenceFileAsTextInputFormatは、シーケンスファイルをストリーミングに適した入力にします。

    6。 SequenceFileAsBinaryInputFormat

    SequenceFileInputFormatを使用することで、シーケンスファイルのキーと値を不透明なバイナリオブジェクトとして抽出できます。

    7。 NlineInputFormat

    これはTextInputFormatの別の形式であり、キーは行のバイトオフセットです。そして、値は行の内容です。したがって、各マッパーは、TextInputFormatおよびKeyValueTextInputFormatを使用して可変数の入力行を受け取ります。

    数は分割のサイズによって異なります。また、線の長さにもよります。したがって、マッパーが固定数の入力行を受け取るようにする場合は、NLineInputFormatを使用します。

    N-各マッパーが受け取る入力の行数です。

    デフォルト(N =1)では、各マッパーは正確に1行の入力を受け取ります。

    N =2とすると、各分割には2行が含まれます。したがって、1つのマッパーが最初の2つのキーと値のペアを受け取ります。別のマッパーが2番目の2つのキーと値のペアを受け取ります。

    8。 DBInputFormat

    このInputFormatは、JDBCを使用してリレーショナルデータベースからデータを読み取ります。また、MultipleInputsを使用してHDFSからの大きなデータセットと結合するために、小さなデータセットもロードします。したがって、

    • キー– LongWritables
    • 価値– DBWritables。

    結論

    したがって、InputFormatは、ファイルからMapperインスタンスにデータを読み取る方法を定義します。このチュートリアルでは、FileInputFormat、TextInputFormatなどの多くの種類のInputFormatを学習しました。

    デフォルトの入力形式はTextInputFormatです。 MapReduce InputFormatに関連するクエリがある場合は、お気軽にご連絡ください。私たちがそれらを解決することを願っています。


    1. 公式のPHPDockerイメージアプローチを使用してphp-redis拡張機能をインストールするにはどうすればよいですか?

    2. Redisluaスクリプトが機能しない

    3. HadoopInputFormatとMapReduceのInputFormatのタイプ

    4. MongoDBのサブドキュメントのすべてのフィールドを合計するにはどうすればよいですか?