OSS-HDFS からの繰り返し読み取りは、アクセスごとにリモート I/O を発生させるため、ジョブのレイテンシーが増加します。JindoCache は OSS-HDFS オブジェクトを EMR クラスターのストレージ上に保存し、以降の読み取りをローカルキャッシュから提供します。初回読み取り後にデータが自動的にキャッシュされるため、Hadoop ジョブは設定変更なしで OSS-HDFS にアクセスできます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
JindoCache をクラスター作成時に選択済みの EMR クラスターが存在すること。詳細については、「クラスターの作成」をご参照ください。
OSS-HDFS が有効化され、アクセス権限が付与済みであること。詳細については、「OSS-HDFS の有効化とアクセス権限の付与」をご参照ください。
キャッシュの仕組み
JindoCache では、特定の OSS パスにキャッシュポリシーを適用するために CacheSets を使用します。各 CacheSet は親パスを対象とし、そのパス配下のすべてのデータについてメタデータ、読み取り、書き込みの処理方法を制御します。データセットごとのアクセスパターンに応じて、異なるポリシーを持つ 1 つ以上の CacheSet を定義できます。
CacheSet を定義し、JindoSDK を構成した後は、キャッシュ処理が完全に透過的になります。Hadoop ジョブは通常通り OSS-HDFS にアクセスし、JindoCache がキャッシュの登録および検索を自動的に処理します。
手順 1:キャッシュポリシーの定義
cacheset.xml の作成
CacheSet を cacheset.xml ファイルに定義します。以下の例では、異なる OSS パスに対して 2 つの CacheSet を構成しています。
<?xml version="1.0" encoding="UTF-8"?>
<cachesets>
<cacheset>
<name>name1</name>
<path>oss://emr-test/dir1</path>
<cacheStrategy>DISTRIBUTED</cacheStrategy>
<metaPolicy>
<type>ALWAYS</type>
</metaPolicy>
<readPolicy>CACHE_ASIDE</readPolicy>
<writePolicy>WRITE_AROUND</writePolicy>
</cacheset>
<cacheset>
<name>name2</name>
<path>oss://emr-test/dir2</path>
<cacheStrategy>DHT</cacheStrategy>
<metaPolicy>
<type>ONCE</type>
</metaPolicy>
<readPolicy>CACHE_ASIDE</readPolicy>
<writePolicy>WRITE_AROUND</writePolicy>
</cacheset>
</cachesets>各 CacheSet は親パスと一連のポリシーをマッピングします。以下の表に、すべてのパラメーターを示します。
| パラメーター | 説明 | 例 |
|---|---|---|
name | CacheSet の一意の名前です。同名の CacheSet が既に存在する場合、その構成は上書きされます。 | name1 |
path | 親 OSS パスです。このパス以下のすべてのデータに対してポリシーが適用されます。 | oss://emr-test/dir1 |
cacheStrategy | キャッシュポリシーです。有効な値は DISTRIBUTED および DHT です。DHT は「distributed hash table(分散ハッシュテーブル)」の略称であり、小規模・読み取り専用ファイルへのアクセスを高速化するために使用されます。 | DISTRIBUTED |
metaPolicy | ファイルメタデータをローカル記憶域にキャッシュするかどうかを指定します。ALWAYS:メタデータはキャッシュされず、常にリモートストレージから読み込まれます。ONCE:メタデータは一度だけリモートストレージから読み込まれ、その後は常にローカル記憶域から読み込まれます。cacheStrategy が DHT の場合は、この値を ONCE に設定してください。 | ALWAYS |
readPolicy | ファイルの読み取り方法です。CACHE_ASIDE のみが有効です:ファイルは優先的にキャッシュから読み込まれます。 | CACHE_ASIDE |
writePolicy | 書き込み先を指定します。WRITE_AROUND:ファイルをリモートストレージにのみ書き込みます。WRITE_THROUGH:ファイルをキャッシュとリモートストレージの両方に書き込みます。CACHE_ONLY:ファイルをキャッシュのみに書き込みます。この設定を使用するには、metaPolicy を ONCE に設定する必要があります。 | WRITE_AROUND |
CacheSet 構成の適用
ご利用のクラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。
cacheset.xmlをクラスター上の任意のディレクトリに保存します。本例では、ファイルのパスは/path/cacheset.xmlです。以下のコマンドを実行して、CacheSet 構成を JindoCache に読み込みます。
jindocache -refreshCacheSet -path /path/cacheset.xml正常終了時には以下のように表示されます。
Successfully refresh cacheset !!!JindoCache CLI の利用可能なすべてのコマンドについては、「JindoCache CLI 使用ガイド」をご参照ください。
以下のコマンドを実行して、CacheSet が正しく読み込まれていることを確認します。
jindocache -listCacheSet
手順 2:JindoSDK の構成
Hadoop-Common 内で OSS-HDFS 実装クラスを設定し、クライアントがトラフィックを JindoCache 経由でルーティングするようにします。EMR コンソールで、core-site.xml タブを開き、Hadoop-Common サービスページの [構成] タブから、以下の構成項目を追加します。詳細については、「設定項目の管理」をご参照ください。
| 設定項目 | 値 | デフォルト動作 |
|---|---|---|
fs.xengine | jindocache | 空欄のままの場合、クライアントはキャッシュを経由せず、OSS-HDFS に直接通信します。 |
この構成はクライアントレベルで適用され、JindoCache の再起動を伴わずに有効になります。
構成を保存すると、OSS-HDFS から読み取るジョブは初回読み取り時に自動的にキャッシュを登録します。同一データの以降の読み取りは、キャッシュから提供されます。
よくある質問
OSS-HDFS へのクロスアカウントアクセスを構成するには?
デフォルトでは、JindoCache は明示的な認証情報を使用せずに OSS-HDFS にアクセスします(パスワードレスモード)。クロスアカウントアクセスを有効化するには、JindoCache サービスページの common タブに以下の設定項目を追加します。
構成タブを開く手順:
EMR コンソール にログインします。左側ナビゲーションウィンドウで、ECS 上の EMR をクリックします。
上部ナビゲーションバーで、ご利用のクラスターが配置されているリージョンおよびリソースグループを選択します。
ECS 上の EMR ページで、対象のクラスターを見つけ、[操作] 列の サービス をクリックします。
JindoCache を見つけ、構成 をクリックします。
common タブをクリックします。
設定項目の追加:
設定項目の追加 をクリックし、以下の項目を追加します。YYY は、OSS-HDFS が有効化された OSS バケット名に置き換えてください。構成変更の適用方法については、「設定項目の管理」をご参照ください。
| 設定項目 | 説明 |
|---|---|
jindocache.oss.bucket.YYY.accessKeyId | OSS-HDFS へのアクセスに使用する AccessKey ID です。 |
jindocache.oss.bucket.YYY.accessKeySecret | OSS-HDFS へのアクセスに使用する AccessKey Secret です。 |
jindocache.oss.bucket.YYY.endpoint | OSS-HDFS のエンドポイントです。例: cn-hangzhou.oss-dls.aliyuncs.com。 |
jindocache.oss.bucket.YYY.data.lake.storage.enable | true に設定します。 |