以前の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に関連するクエリがある場合は、お気軽にご連絡ください。私たちがそれらを解決することを願っています。