バージョン 3.42 以降、またはバージョン 5.8.0 以降を実行している E-MapReduce (EMR) クラスターは、データストアとして OSS-HDFS (JindoFS) をサポートしています。OSS-HDFS は、キャッシュアクセラレーションと Ranger 認証を提供し、Hive または Spark を使用するビッグデータ ETL シナリオのパフォーマンス向上と HDFS 移行の簡素化に役立ちます。このトピックでは、EMR クラスターの Hive または Spark を使用して OSS-HDFS のデータにアクセスする方法について説明します。
背景情報
OSS-HDFS は、クラウドネイティブのデータレイクストレージサービスです。統一されたメタデータ管理により、HDFS ファイルシステムインターフェイスと完全に互換性があり、包括的な POSIX サポートを提供します。これにより、ビッグデータや AI における幅広いデータレイクコンピューティングシナリオに最適です。詳細については、「OSS-HDFS とは」をご参照ください。
前提条件
EMR クラスターを作成済みであること。詳細については、「クラスターの作成」をご参照ください。
操作手順
ステップ1:OSS-HDFS の有効化
OSS-HDFS を有効にし、必要なアクセス権限を付与します。詳細については、「OSS-HDFS の有効化」をご参照ください。
ステップ2:OSS-HDFS エンドポイントの取得
<Bucket-name>.<region>.oss-dls.aliyuncs.com です。ステップ3:EMR クラスターでの OSS-HDFS の使用
- クラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。
- OSS-HDFS を指す Hive テーブルを作成します。
- 次のコマンドを実行して、Hive コマンドラインに入ります。
hive - 次のコマンドを実行して、OSS-HDFS を指すデータベースを作成します。
CREATE DATABASE if not exists dw LOCATION 'oss://<your-oss-hdfs-endpoint>/<path>';説明- 上記のコマンドで、
dwはデータベース名、<path>は任意のパス、<your-oss-hdfs-endpoint>は ステップ2:OSS-HDFS エンドポイントの取得 で取得した OSS-HDFS エンドポイントです。 - この例では、OSS-HDFS エンドポイントをパスプレフィックスとして使用します。バケット名のみを使用して OSS-HDFS を指すようにしたい場合は、バケットレベルまたはグローバルエンドポイントを設定できます。詳細については、「EMR 以外のクラスターから OSS-HDFS への接続」をご参照ください。
- 上記のコマンドで、
- 次のコマンドを実行して、新しいデータベースを使用します。
use dw; - 次のコマンドを実行して、新しいデータベースにテーブルを作成します。
CREATE TABLE IF NOT EXISTS employee(eid int, name String,salary String,destination String) COMMENT 'Employee details'; - 次のコマンドを実行して、テーブル情報を表示します。
desc formatted employee;次の出力が返されます。Locationフィールドは、テーブルが OSS-HDFS 上のパスを指していることを示しています。# col_name data_type comment eid int name string salary string destination string # Detailed Table Information Database: dw Owner: root CreateTime: Fri May 06 16:40:06 CST 2022 LastAccessTime: UNKNOWN Retention: 0 Location: oss://****.cn-hangzhou.oss-dls.aliyuncs.com/dw/employee Table Type: MANAGED_TABLE
- 次のコマンドを実行して、Hive コマンドラインに入ります。
- テーブルにデータを挿入します。
INSERT INTO 文を使用して、テーブルにデータを書き込みます。この文は MapReduce ジョブを生成します。
INSERT INTO employee(eid, name, salary, destination) values(1, 'John Doe', '100.0', ''); - テーブルデータを確認します。
SELECT * FROM employee WHERE eid = 1;出力には、挿入したデータが含まれます。OK 1 John Doe 100.0 Time taken: 12.379 seconds, Fetched: 1 row(s)
EMR クラスターへの権限付与
ご利用の EMR クラスターがデフォルトの AliyunECSInstanceForEMRRole インスタンス RAM ロールを使用していない場合は、クラスターに権限を付与する必要があります。
AliyunECSInstanceForEMRRole インスタンス RAM ロールは AliyunECSInstanceForEMRRolePolicy ポリシーに関連付けられており、このポリシーにはデフォルトで oss:PostDataLakeStorageFileOperation 権限が含まれています。したがって、デフォルトのロールを使用するクラスターは、追加の権限付与なしで OSS-HDFS にアクセスできます。