すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:HMS と HDFS を使用した Hadoop Hive データの読み取り

最終更新日:Mar 25, 2026

このトピックでは、E-MapReduce 上の Hive を例として、MaxCompute で外部スキーマを作成し、Hadoop の Hive テーブルデータをクエリする方法について説明します。

注意事項

この機能は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (深セン)、中国 (香港)、シンガポール、ドイツ (フランクフルト) リージョンでのみサポートされています。

操作手順

ステップ 1:前提条件

すでに Hive データをお持ちの場合は、このステップをスキップしてください。

  1. E-MapReduce をアクティブ化します。

  2. MaxCompute プロジェクトの作成

    MaxCompute プロジェクトと Hadoop クラスターは、同じリージョンに存在する必要があります。

  3. ご利用の MaxCompute プロジェクトでスキーマサポートを有効にします。

    1. MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。

    2. 左側のナビゲーションウィンドウで、構成の管理 > プロジェクト管理 を選択します。

    3. プロジェクト管理 ページで、対象プロジェクトの 操作 列にある スキーマレベルをサポートするためのアップグレード をクリックします。

ステップ 2:Hive データの準備

すでに Hive データをお持ちの場合は、このステップをスキップしてください。

  1. E-MapReduce コンソールにログインし、左上のコーナーでリージョンを選択します。

  2. My Clusters ページで、Create Cluster をクリックします。

    1. Software Configuration

      トップメニューバーで、リソースグループを選択します。デフォルトでは、アカウント配下のすべてのリソースが表示されます。他のパラメーターを次のように設定します。

      パラメーター

      説明

      Region

      • クラスターは選択されたリージョンに作成されます。クラスター作成後にリージョンを変更することはできません。

      • MaxCompute プロジェクトと Hadoop クラスターは、同じリージョンに存在する必要があります。

      Business Scenario

      この例では、Custom Cluster を選択します。

      Product Version

      バージョンを選択します。最新バージョンを推奨します。

      High Service Availability

      この機能はデフォルトで無効になっています。High Service Availability を有効にすると、EMR はマスターノードを異なる基盤ハードウェアに分散させ、障害のリスクを低減します。

      Optional Services (Select One At Least)

      この例では、HADOOP-COMMON(3.2.1)HDFS(3.2.1)HIVE(3.1.3)YARN(3.2.1) を選択します。

      サービス運用ログの収集を許可する

      ログ収集はデフォルトで有効になっています。

      サービス運用ログを収集する場合は、クラスター情報から収集ステータスを変更できます。

      Metadata

      この例では、Self-managed RDS インスタンスを使用します。

      RDS インスタンスの作成方法の詳細については、「RDS for MySQL インスタンスの作成とデータベースの設定」をご参照ください。

      • For an EMR cluster that is used in the production environment, we recommend that you use independent ApsaraDB RDS for MySQL. For example, you can use ApsaraDB RDS for MySQL 5.7 of Alibaba Cloud high-availability edition.

      • [hivemetastore-site.xml] で RDS 接続情報を設定します:

        • [javax.jdo.option.ConnectionURL]

          Java Database Connectivity (JDBC) メタデータ接続。例:jdbc:mysql://rds.host.name/hive_db_name

        • [javax.jdo.option.ConnectionUserName]

          メタデータのデータベースアカウント。

        • javax.jdo.option.ConnectionPassword

          メタデータのデータベースパスワード。

      上記の設定は、この例のみを対象としています。E-MapReduce コンソールでデータレイク分析クラスターを作成する方法の詳細については、「DataLake クラスターの作成と使用」をご参照ください。

    2. ハードウェア設定

      パラメーター

      説明

      Billing Method

      • Subscription

      • Pay-as-you-go

      テスト目的では、Pay-as-you-go を使用します。テスト完了後、クラスターをリリースし、本番用に Subscription クラスターを作成できます。

      可用性ゾーン

      クラスター作成後にゾーンを変更することはできません。慎重に選択してください。

      VPC

      リージョン内の VPC (仮想プライベートクラウド) を選択します。存在しない場合は、[VPC の作成] をクリックします。VPC を作成した後、[更新] をクリックして選択します。

      vSwitch

      選択した VPC のゾーンにある vSwitch を選択します。ゾーンに利用可能な vSwitch がない場合は、作成します。

      Default Security Group

      重要

      ECS で作成された高度なセキュリティグループはサポートされていません。

      使用中のセキュリティグループがある場合は、それを選択するか、新しく作成することができます。

      Node Group

      ビジネスニーズに基づいて、マスター、コア、またはタスクノードグループを設定します。詳細については、「ハードウェアとネットワークの選択」をご参照ください。

      この例では、マスターノードグループに対して Assign Public Network IP を有効にし、他のパラメーターにはデフォルト値を使用します。

      クラスターのスケーリング

      スケーリングルールを設定します。

    3. 基本設定

      パラメーター

      説明

      クラスター名

      クラスターの名前。名前は 1~64 文字で、漢字、英字、数字、ハイフン (-)、アンダースコア (_) を含めることができます。

      Identity Credentials

      • Key Pair:パスワードを入力せずに ID 検証を行いたい場合は、Key Pair を使用できます。詳細については、「SSH キーペアの管理」をご参照ください。

      • Password:クラスターのマスターノードにリモートログインするために使用するパスワード。このパスワードはクラスターにログインする際に必要になるため、記録しておいてください。

  3. クラスターのマスターノードにログインし、Hive でデータを準備します。

    1. ノードのパブリック IP アドレスと名前の取得

      1. E-MapReduce コンソールにログインし、左上のコーナーでリージョンを選択します。

      2. 対象クラスターの Nodes をクリックします。

      3. Nodes タブで、ノードグループの行にある image アイコンをクリックして、Public IP AddressNode Name/ID を取得します。

      4. ノードのパブリック IP アドレスが空の場合、クラスター作成時に [パブリック IP のアタッチ] が有効になっていなかったことを示します。この場合、ノード ID をクリックしてインスタンス詳細を表示します。

        [基本情報] > [パブリック IP アドレス] セクションで、[EIP の関連付け] または [パブリック IP アドレスの割り当て] をクリックできます。

        • EIP との関連付け:EIP (Elastic IP Address) を作成して関連付けます。詳細については、「Elastic IP Address」をご参照ください。

        • パブリック IP アドレスの割り当て:帯域幅を 0 Mbps より大きい値に設定します。システムが自動的にパブリック IP アドレスを割り当てます。詳細については、「固定パブリック IP アドレス」をご参照ください。

        パブリック IP アドレスを柔軟に管理する場合 (帯域幅の調整やリソースの切り替えなど) は EIP を使用します。頻繁に変更されない固定のパブリック出口が必要な場合は、固定パブリック IP アドレスを使用します。

    2. クラスターのマスターノードへのログイン

      1. E-MapReduce コンソールにログインし、左上のコーナーでリージョンを選択します。

      2. 対象クラスターの Nodes をクリックします。

      3. Nodes タブで、ノードグループの行にある image アイコンをクリックし、次にノード ID をクリックして [インスタンス] 詳細ページに移動します。

      4. 指定されたノードの[インスタンス]ページで、接続をクリックします。

      5. リモート接続 ダイアログボックスで、デフォルトで ワークベンチ オプションが選択されている状態で、今すぐサインイン をクリックします。

      6. ログインウィンドウで、必要に応じてインスタンス情報を入力します。

        説明

        キーペアを作成すると、秘密鍵が自動的にダウンロードされ、.pem ファイルとして保存されます。Secure Shell (SSH) キー認証を選択し、秘密鍵ファイルをアップロードすることで、パスワードなしで ID 検証を実行できます。

    3. Hive テストデータの準備。Workbench を使用してクラスターのマスターノードにログインした後、ターミナルで次のコマンドを実行します:

      [user@emr-node ~]$ hive
      
      -- データベースを作成します。
      hive> CREATE database IF NOT EXISTS myhive;
      
      -- データベースに切り替えます。
      hive> USE myhive;
      
      -- 非パーティションテーブルを作成します。
      hive> CREATE TABLE IF NOT EXISTS employees (
              id INT,
              name STRING,
              age INT,
              department STRING
            )
            ROW FORMAT DELIMITED
            FIELDS TERMINATED BY ','
            STORED AS TEXTFILE;
      
      -- データを挿入します。
      hive> INSERT INTO employees VALUES(1, 'John', 25, 'Sales'),
          (2, 'Jane', 30, 'Marketing'),
          (3, 'Mike', 35, 'Engineering'),
          (4, 'Sarah', 28, 'HR'),
          (5, 'David', 32, 'Finance'),
          (6, 'Linda', 29, 'IT'),
          (7, 'Robert', 31, 'Operations'),
          (8, 'Emily', 27, 'Research'),
          (9, 'Michael', 33, 'Development'),
          (10, 'Chris', 26, 'Support');
      
      -- パーティションテーブルを作成します。
      hive> CREATE TABLE employees_pt (
            id INT,
            name STRING,
            age INT
          )
        PARTITIONED BY (department STRING)
        ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
      
      -- データを挿入します。
      INSERT INTO employees_pt PARTITION (department='Sales') VALUES(1, 'John', 25),(2, 'Jane', 30),(3, 'Mike', 35);
      INSERT INTO employees_pt PARTITION (department='Marketing') VALUES(4, 'Sarah', 28),(5, 'David', 32);
      INSERT INTO employees_pt PARTITION (department='Engineering') VALUES(6, 'Linda', 29),(7, 'Robert', 31);
      INSERT INTO employees_pt PARTITION (department='HR') VALUES(8, 'Emily', 27),(9, 'Michael', 33),(10, 'Chris', 26);

      非パーティションテーブルとパーティションテーブルのクエリ:

      -- 非パーティションテーブルをクエリします。
      hive> SELECT * FROM employees;
      
      1       John    25      Sales
      2       Jane    30      Marketing
      3       Mike    35      Engineering
      4       Sarah   28      HR
      5       David   32      Finance
      6       Linda   29      IT
      7       Robert  31      Operations
      8       Emily   27      Research
      9       Michael 33      Development
      10      Chris   26      Support
      
      -- パーティションテーブルをクエリします。
      hive> SELECT * FROM employees_pt;
      
      6       Linda   29      Engineering
      7       Robert  31      Engineering
      8       Emily   27      HR
      9       Michael 33      HR
      10      Chris   26      HR
      4       Sarah   28      Marketing
      5       David   32      Marketing
      1       John    25      Sales
      2       Jane    30      Sales
      3       Mike    35      Sales

ステップ 3:Hive+HDFS 外部データソースの作成

  1. MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、構成の管理 > 外部データソース を選択します。

  3. 外部データソース ページで、外部データソースの作成 をクリックします。

  4. 外部データソースの追加 ダイアログボックスで、パラメーターを設定します。以下の表にパラメーターを説明します。

    パラメーター

    必須

    説明

    外部データソースタイプ

    必須

    [Hive+HDFS] を選択します。

    外部データソース名

    必須

    カスタム名を入力します。命名規則は次のとおりです:

    • 名前は英字で始まり、小文字の英字、アンダースコア (_)、数字のみを含めることができます。

    • 名前は 128 文字を超えることはできません。

    例:hive_hdfs_mc

    外部データソースの説明

    任意

    必要に応じて説明を入力します。

    ネットワーク接続オブジェクト

    必須

    ネットワーク接続の名前。MaxCompute から Alibaba Cloud E-MapReduce または Hadoop VPC ネットワークへの接続を選択または作成します。

    重要

    VPC は、MaxCompute 外部データソースおよび外部データソースがアタッチされているプロジェクトと同じリージョンにある必要があります。

    パラメーターの詳細については、「VPC アクセスソリューション (直接接続)」の「MaxCompute とターゲット VPC ネットワーク間のネットワーク接続の作成」ステップをご参照ください。

    クラスター名

    必須

    高可用性 (HA) Hadoop クラスターで NameNode を参照するために使用される名前。

    EMR クラスターを例にとると、クラスター名を取得するには:

    1. E-MapReduce コンソールにログインし、左上のコーナーでリージョンを選択します。

    2. 対象クラスターの ID をクリックして、クラスター詳細ページに移動します。

    3. Services タブで、HDFS サービスの Configure をクリックして、Configure ページに移動します。

    4. [hdfs-site.xml] タブに切り替えます。By Name 列で、dfs.nameservices を検索します。この設定項目の値が クラスター名 です。

    NameNodeアドレス

    必須

    対象 Hadoop クラスターのアクティブおよびスタンバイ NameNode サービスのエンドポイントとポート番号。ポート番号は通常 8020 です。

    EMR クラスターを例にとると、NameNode アドレスを取得するには:

    1. E-MapReduce コンソールにログインし、左上のコーナーでリージョンを選択します。

    2. 対象クラスターの ID をクリックして、クラスター詳細ページに移動します。

    3. Services タブで、HDFS サービスの Status をクリックして、Status ページに移動します。

    4. Components エリアで、[NameNode] の横にある image アイコンをクリックして、トポロジーリストを展開します。

    5. master-1-1 ノードの Private IP Address を取得します。NameNodeアドレス内部 IP:8020 の形式です。

    HMSサービスアドレス

    必須

    対象 Hadoop クラスターのアクティブおよびスタンバイ NameNode の Hive メタデータサービスのエンドポイントとポート番号。ポート番号は通常 9083 です。

    1. E-MapReduce コンソールにログインし、左上のコーナーでリージョンを選択します。

    2. 対象クラスターの ID をクリックして、クラスター詳細ページに移動します。

    3. Services タブで、Hive サービスの Status をクリックして、Status ページに移動します。

    4. Components エリアで、[HiveRuntime] の横にある image アイコンをクリックしてトポロジーリストを展開します。

    5. master-1-1 ノードの Private IP Address を取得します。HMSサービスアドレス内部 IP:9083 の形式です。

    認証タイプ

    これは必須です。

    現在、[認証なし] のみがサポートされています。

    スイッチの作成

    必須

    MaxCompute は VPC を介してデータソースにアクセスします。デフォルトでは、逆アクセス 2.0 ソリューションが使用されます。このソリューションでは、メタデータアクセスリンクを確立するために、特定のゾーンに vSwitch を設定する必要があります。

    各リージョンで vSwitch が利用可能なゾーンは UI に記載されています。データソースが存在する VPC で、ゾーン要件を満たす既存の vSwitch を選択するか、新しく作成します。

  5. [OK] をクリックして外部データソースを作成します。

  6. 外部データソース ページで、対象のデータソースを見つけ、操作 列の 詳細 をクリックします。

ステップ 4:外部スキーマの作成

  1. ご利用の MaxCompute プロジェクトに接続します。

  2. 次のコードを使用して外部スキーマを作成します:

    -- スキーマ構文を有効にします。
    SET odps.namespace.schema=true;
    
    CREATE EXTERNAL SCHEMA IF NOT EXISTS <YOUR_EXTERNAL_SCHEMA_NAME>
    WITH  <YOUR_EXTERNAL_DATASOURCE_NAME>
    ON 'myhive' ;

    パラメーターの説明

    • your_external_schema_name:作成する外部スキーマの名前。例:ex_hms_hdfs

    • your_external_datasource_name:前のステップで MaxCompute に作成した外部データソースの名前。外部スキーマが属するプロジェクトは、外部データソースと同じリージョンにある必要があります。例:hive_hdfs_mc

    • myhive:Hive データを準備する際に作成した Hive データベースの名前。

ステップ 5:SQL を使用した Hadoop Hive データへのアクセス

  1. 外部スキーマ内のテーブルをクエリします。

    SET odps.namespace.schema=true;
    SHOW tables IN <YOUR_EXTERNAL_SCHEMA_NAME>;
    
    -- 次の結果が返されます。
    ALIYUN$xxx:employees
    ALIYUN$xxx:employees_pt
    
    OK
    重要

    クエリが失敗した場合は、RDS コンソールにログインして、MaxCompute の VPC とセキュリティグループが RDS のホワイトリストに追加されているかを確認してください。セキュリティグループを追加した後、ホワイトリストが有効になるまで少なくとも 5 分かかります。

  2. 外部スキーマテーブルの詳細をクエリします。

    -- 非パーティションテーブルをクエリします。
    SELECT * FROM <YOUR_EXTERNAL_SCHEMA_NAME>.employees;
    
    -- 結果
    +------------+------------+------------+------------+
    | id         | name       | age        | department | 
    +------------+------------+------------+------------+
    | 1          | John       | 25         | Sales      | 
    | 2          | Jane       | 30         | Marketing  | 
    | 3          | Mike       | 35         | Engineering | 
    | 4          | Sarah      | 28         | HR         | 
    | 5          | David      | 32         | Finance    | 
    | 6          | Linda      | 29         | IT         | 
    | 7          | Robert     | 31         | Operations | 
    | 8          | Emily      | 27         | Research   | 
    | 9          | Michael    | 33         | Development | 
    | 10         | Chris      | 26         | Support    | 
    +------------+------------+------------+------------+
    
    -- パーティションテーブルをクエリします。
    SELECT * FROM <YOUR_EXTERNAL_SCHEMA_NAME>.employees_pt WHERE department='HR';
    
    -- 結果
    +------------+------------+------------+------------+
    | id         | name       | age        | department | 
    +------------+------------+------------+------------+
    | 8          | Emily      | 27         | HR         | 
    | 9          | Michael    | 33         | HR         | 
    | 10         | Chris      | 26         | HR         | 
    +------------+------------+------------+------------+

ステップ 6:Hadoop データソースへの新しいデータの追加

  1. EMR で作成したクラスターのマスターノードにログインし、Hive のパーティションテーブルに新しいパーティションデータを挿入します:

    INSERT INTO employees_pt PARTITION (department='Computer') 
      VALUES(11, 'Cily', 29),(12, 'Miky', 35);
     
     -- Hive 側でパーティションテーブルをクエリします。
     hive> SELECT * FROM employees_pt;
     
     -- クエリ結果
     OK
    11      Cily    29      Computer
    12      Miky    35      Computer
    6       Linda   29      Engineering
    7       Robert  31      Engineering
    8       Emily   27      HR
    9       Michael 33      HR
    10      Chris   26      HR
    4       Sarah   28      Marketing
    5       David   32      Marketing
    1       John    25      Sales
    2       Jane    30      Sales
    3       Mike    35      Sales
  2. MaxCompute クライアントにログインし、MaxCompute 側で新しいパーティションデータをクエリします:

    SELECT * FROM <YOUR_EXTERNAL_SCHEMA_NAME>.employees_pt WHERE department='Computer';
    
    -- 結果
    +------------+------------+------------+------------+
    | id         | name       | age        | department | 
    +------------+------------+------------+------------+
    | 11         | Cily       | 29         | Computer   | 
    | 12         | Miky       | 35         | Computer   | 
    +------------+------------+------------+------------+

ステップ 7:フェデレーション外部テーブルからデータウェアハウスへのデータコピー

-- フェデレーション外部テーブルからデータウェアハウスにデータをコピーします。
CREATE TABLE employees_copy AS SELECT * FROM <YOUR_EXTERNAL_SCHEMA_NAME>.employees;

-- データウェアハウスにコピーされたテーブルデータをクエリします。
SELECT * FROM employees_copy;

-- 次の結果が返されます。
+------------+------------+------------+-------------+
| id         | name       | age        | department  | 
+------------+------------+------------+-------------+
| 1          | John       | 25         | Sales       | 
| 2          | Jane       | 30         | Marketing   | 
| 3          | Mike       | 35         | Engineering | 
| 4          | Sarah      | 28         | HR          | 
| 5          | David      | 32         | Finance     | 
| 6          | Linda      | 29         | IT          | 
| 7          | Robert     | 31         | Operations  | 
| 8          | Emily      | 27         | Research    | 
| 9          | Michael    | 33         | Development | 
| 10         | Chris      | 26         | Support     | 
+------------+------------+------------+-------------+