E-MapReduce (EMR) JindoFS をキャッシュモードで使用して、データレイクとして使用されるオブジェクトストレージサービス (OSS) に接続できます。
背景情報
EMR JindoFS をキャッシュモードまたはブロックストレージモードで使用して、OSS に接続できます。
JindoFS をキャッシュモードで使用する場合、ファイルは OSS にオブジェクトとして保存され、頻繁にアクセスされるオブジェクトは EMR クラスタのローカルディスクにキャッシュされて、データアクセス効率が向上します。キャッシュモードでは、JindoFS はオブジェクト形式を変換することなく OSS 内のオブジェクトにアクセスできます。JindoFS は OSS クライアントと完全に互換性があります。詳細については、JindoFS をキャッシュモードで使用する を参照してください。
ブロックストレージモードは、効率的な読み取りおよび書き込み操作と高いメタデータアクセス性を保証します。JindoFS は OSS をストレージバックエンドとして使用します。ブロックストレージモードでは、JindoFS はデータを OSS にブロックとして保存し、Namespace Service を使用してメタデータを維持します。これにより、データの読み取り、書き込み、またはメタデータのクエリを実行する際の高いパフォーマンスが保証されます。詳細については、JindoFS をブロックストレージモードで使用する を参照してください。
前提条件
EMR クラスタが作成されていること。詳細については、クラスタの作成 を参照してください。
クラスタを作成する前に、以下の点に注意してください。
EMR クラスタと OSS が同じ Alibaba Cloud アカウントに属していること。EMR クラスタと OSS バケットは同じリージョンに配置することをお勧めします。
クラスタを作成するときに、インターネット経由でクラスタにアクセスするには パブリック IP アドレスの割り当て をオンにし、Shell を使用してリモートサーバーにログオンするには リモートログオン をオンにします。
SmartData と Bigboot は、JindoFS の構成を使用するための依存サービスです。これらのサービスがデフォルトで選択されていない場合は、これらのサービスを選択してください。
配信タスクが作成されていること。詳細については、Tablestore コンソールを使用して OSS にデータを配信する を参照してください。
手順
EMR JindoFS をキャッシュモードで使用して OSS に接続し、ローカルキャッシュを有効にします。詳細については、JindoFS をキャッシュモードで使用する を参照してください。
ローカルキャッシュを有効にすると、ホットデータブロックがローカルディスクにキャッシュされます。デフォルトでは、この機能は無効になっており、EMR が OSS から直接データを読み取ることを示します。ローカルキャッシュを有効にすると、Jindo はキャッシュされたデータを自動的に管理します。Jindo は、構成したディスク容量の使用状況に基づいてキャッシュされたデータをクリアします。キャッシュされたデータをクリアするための使用状況を構成し、ローカルディスクの容量使用率を調整します。
Spark SQL を起動します。
PuTTY などのリモートログオンツールを使用して、EMR ヘッダーサーバーにログオンします。
次のコマンドを実行して Spark SQL を実行します。
spark-sql --master yarn --num-executors 5 --executor-memory 1g --executor-cores 2
SQL ステートメントを使用して、OSS フォルダーにマップする外部テーブルを作成します。
Tablestore コンソールで SQL ステートメントを取得します。次の SQL ステートメントの例は、参照用にのみ使用されます。
CREATE EXTERNAL TABLE lineitem (l_orderkey bigint,l_linenumber bigint,l_receiptdate string,l_returnflag string,l_tax double,l_shipmode string,l_suppkey bigint,l_shipdate string,l_commitdate string,l_partkey bigint,l_quantity double,l_comment string,l_linestatus string,l_extendedprice double,l_discount double,l_shipinstruct string) PARTITIONED BY (`year` int, `month` int) STORED AS PARQUET LOCATION 'jfs://test/' ;
Tablestore コンソールで SQL ステートメントを取得するには、次の方法を使用します。
OSS にデータを配信する タブで、配信タスクに対応する アクション 列の テーブルを作成するための SQL ステートメントを表示 をクリックします。SQL ステートメントを表示およびコピーできます。次の図は、外部テーブルを作成するために使用される SQL ステートメントの例を示しています。
次の SQL ステートメントを実行して、OSS ソースからデータパーティションを読み込みます。
lineitem は外部テーブルの名前です。
msck repair table lineitem;
データをクエリします。
select * from lineitem limit 1;