第35章 Apache Hadoop との統合
35.1. Apache Hadoop との統合
JBoss Data Grid コネクターは、JBoss Data Grid を Hadoop 対応のデータソースにします。この統合は、Hadoop の InputFormat および OutputFormat の実装を提供して実現され、アプリケーションが最適な場所の JBoss Data Grid サーバーに対してデータを読み書きできるようにします。JBoss Data Grid の InputFormat および OutputFormat 実装は、従来の Hadoop Map/Reduce ジョブの実行を可能にしますが、Hadoop の InputFormat データソースをサポートするツールやユーティリティーと使用することもできます。
35.2. Hadoop の依存関係
Hadoop の形式の JBoss Data Grid 実装は以下の Maven 依存関係にあります。
<dependency>
<groupId>org.infinispan.hadoop</groupId>
<artifactId>infinispan-hadoop-core</artifactId>
<version>0.2.2.Final-redhat-1</version>
</dependency>35.3. サポートされる Hadoop 設定パラメーター
以下のパラメーターがサポートされます。
表35.1 サポートされる Hadoop 設定パラメーター
| パラメーター名 | 説明 | デフォルト値 |
|---|---|---|
|
|
読み取りの前にデータを事前にフィルターするためにサーバーにデプロイされるフィルターファクトリーの名前。 |
null (有効なフィルタリングなし) |
|
|
データが読み取られるキャッシュの名前。 |
___defaultcache |
|
|
以下の形式を使用する、入力キャッシュのサーバーのリスト。 host1:port;host2:port2 |
localhost:11222 |
|
|
データが書き込まれるキャッシュの名前。 |
default |
|
|
以下の形式を使用する、出力キャッシュのサーバーのリスト。 host1:port;host2:port2 |
null (出力キャッシュなし) |
|
|
キャッシュから読み取りするときのバッチサイズ。 |
5000 |
|
|
キャッシュに書き込みするときのバッチサイズ。 |
500 |
|
|
キャッシュから読み取りした後に適用される、 |
null (有効な変換なし)。 |
|
|
書き込みの前に適用される、 |
null (有効な変換なし)。 |
35.4. Hadoop コネクターの使用
InfinispanInputFormat および InfinispanOutputFormat
Hadoop では、InputFormat インターフェースは、特定のデータソースがパーティション化される方法と、各パーティションからのデータの読み取り方法を示します。OutputFormat インターフェースはデータの書き込み方法を指定します。
InputFormat インターフェースには、重要なメソッドが 2 つ定義されています。
getSplitsメソッドは、データの特定セクションに関する情報が含まれる 1 つ以上のInputSplitインスタンスを返すデータパーティショナーを定義します。List<InputSplit> getSplits(JobContext context);
InputSplitを使用すると、結果となるデータセットで反復処理を行うために使用されるRecordReaderを取得できます。RecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context);
これらの 2 つの操作は、複数のノード全体でデータの並列処理を可能にするため、大型のデータセットで Hadoop のスループットが大きくなります。
JBoss Data Grid では、パーティションはセグメントの所有権を基に生成されるため、各パーティションは特定のサーバーのセグメントのセットになります。デフォルトでは、パーティションの数はクラスターのサーバーの数と同じになり、各パーティションにはその特定のサーバーに関連するすべてのセグメントが含まれます。
JBoss Data Grid における Hadoop Map Reduce ジョブの実行
以下に JBoss Data Grid クラスターをターゲットとする Map Reduce ジョブの設定例を示します。
import org.infinispan.hadoop.*; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapreduce.Job; [...] Configuration configuration = new Configuration(); configuration.set(InfinispanConfiguration.INPUT_REMOTE_CACHE_SERVER_LIST, "localhost:11222"); configuration.set(InfinispanConfiguration.INPUT_REMOTE_CACHE_NAME, "map-reduce-in"); configuration.set(InfinispanConfiguration.OUTPUT_REMOTE_CACHE_SERVER_LIST, "localhost:11222"); configuration.set(InfinispanConfiguration.OUTPUT_REMOTE_CACHE_NAME, "map-reduce-out"); Job job = Job.getInstance(configuration, "Infinispan Integration"); [...]
JBoss Data Grid をターゲットとするには、ジョブを InfinispanInputFormat および InfinispanOutputFormat クラスと設定する必要があります。
[...] // Define the Map and Reduce classes job.setMapperClass(MapClass.class); job.setReducerClass(ReduceClass.class); // Define the JBoss Data Grid implementations job.setInputFormatClass(InfinispanInputFormat.class); job.setOutputFormatClass(InfinispanOutputFormat.class); [...]

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.