第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 設定パラメーター リンクのコピーリンクがクリップボードにコピーされました!
以下のパラメーターがサポートされます。
| パラメーター名 | 説明 | デフォルト値 |
|---|---|---|
|
|
読み取りの前にデータを事前にフィルターするためにサーバーにデプロイされるフィルターファクトリーの名前。 |
null (有効なフィルタリングなし) |
|
|
データが読み取られるキャッシュの名前。 |
___defaultcache |
|
|
以下の形式を使用する、入力キャッシュのサーバーのリスト。
|
localhost:11222 |
|
|
データが書き込まれるキャッシュの名前。 |
default |
|
|
以下の形式を使用する、出力キャッシュのサーバーのリスト。
|
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);
[...]