OSS-HDFS (JindoFS) は、キャッシュベースのアクセラレーションと Ranger 認証をサポートするストレージサービスです。OSS-HDFS は、E-MapReduce (EMR) V3.42 以降のマイナーバージョン、および EMR V5.8.0 以降のマイナーバージョンのクラスターで利用できます。バックエンドストレージとして OSS-HDFS を使用するクラスターは、ビッグデータの抽出・変換・書き出し (ETL) シナリオでより優れたパフォーマンスを提供し、HDFS から OSS-HDFS へのスムーズなデータ移行を可能にします。このトピックでは、EMR Hive または Spark で OSS-HDFS を使用する方法について説明します。
前提条件
バケットで OSS-HDFS が有効になっており、RAM ロールに OSS-HDFS へのアクセス権限が付与されていること。詳細については、「OSS-HDFS を有効にしてアクセス権限を付与する」をご参照ください。
デフォルトでは、Alibaba Cloud アカウントには、EMR クラスターを OSS-HDFS に接続し、OSS-HDFS に関連する一般的な操作を実行する権限があります。必要な権限が付与された RAM ユーザーが作成されていること。RAM ユーザーを使用して EMR クラスターを OSS-HDFS に接続する場合、その RAM ユーザーは必要な権限を持っている必要があります。詳細については、「RAM ユーザーに EMR クラスターを OSS-HDFS に接続する権限を付与する」をご参照ください。
背景情報
OSS-HDFS は、クラウドネイティブのデータレイクストレージサービスです。OSS-HDFS は、統合メタデータ管理機能を提供し、HDFS API と完全な互換性があります。OSS-HDFS は、Portable Operating System Interface (POSIX) もサポートしています。OSS-HDFS を使用すると、ビッグデータおよび AI 分野のさまざまなデータレイクベースのコンピューティングシナリオでデータを管理できます。詳細については、「OSS-HDFS とは」をご参照ください。
手順
- EMR クラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。
OSS-HDFS を指す Hive テーブルを作成します。
- 次のコマンドを実行して Hive CLI を開きます。
hive 次のコマンドを実行して、OSS-HDFS を指すデータベースを作成します。
CREATE DATABASE if not exists dw LOCATION 'oss://{yourHdfsBucketDomain}/{path}';パラメーターの説明:
dw: データベース名。この名前はカスタマイズできます。{path}: データベースを格納する OSS-HDFS 内のパス。このパスはカスタマイズできます。{yourHdfsBucketDomain}: OSS-HDFS サービスのバケットドメイン名。ドメイン名を取得するには、OSS コンソールにログインします。対象のバケットに移動します。「概要」タブの [アクセスポート] セクションで、[HDFS サービス] に対応する完全なバケットドメイン名をコピーします。
説明この例では、パスのプレフィックスとして OSS-HDFS ドメイン名を使用します。バケット名のみを使用して OSS-HDFS を指すようにする場合は、バケットレベルのエンドポイントまたはグローバルエンドポイントを設定できます。詳細については、「付録 1: エンドポイントを設定するその他の方法」をご参照ください。
- 次のコマンドを実行して、新しいデータベースを使用します。
use dw; - 次のコマンドを実行して、新しいデータベースに Hive テーブルを作成します。
CREATE TABLE IF NOT EXISTS employee(eid int, name String,salary String,destination String) COMMENT 'Employee details';
- 次のコマンドを実行して Hive CLI を開きます。
- Hive テーブルにデータを挿入します。次の SQL 文を実行して、Hive テーブルにデータを書き込みます。EMR ジョブが生成されます。
INSERT INTO employee(eid, name, salary, destination) values(1, 'liu hua', '100.0', ''); - Hive テーブルのデータを確認します。
SELECT * FROM employee WHERE eid = 1;返された情報には、挿入されたデータが含まれています。OK 1 liu hua 100.0 Time taken: 12.379 seconds, Fetched: 1 row(s)