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

Object Storage Service:CDH 6ベースのApache Impalaを使用したOSSデータのクエリ

最終更新日:Mar 12, 2024

Apache Hadoop (CDH) を含むClouderaのディストリビューションは、Apache Hadoopディストリビューションです。 Hadoop 3.0.0はObject Storage Service (OSS) でサポートされています。 このトピックでは、Hadoop、Hive、Spark、ImpalaなどのCDH 6コンポーネントを有効にしてOSSデータをクエリする方法について説明します。

前提条件

CDH6クラスターが設定されます。 詳細については、「Clouderaインストールガイド」をご参照ください。 このトピックでは、例としてCDH 6.0.1を使用します。

手順1: OSS設定の追加

  1. クラスター管理ツールCMを使用して設定を追加します。

    CMによって管理されているクラスターがない場合は、core-site.xmlファイルを変更します。 次の表では、追加する設定を例としてCMを使用しています。

    パラメーター

    説明

    fs.oss.endpoint

    バケットが配置されているリージョンへのアクセスに使用するエンドポイントを入力します。 例: oss-cn-zhangjiakou-internal.aliyuncs.com。

    fs.oss.accessKeyId

    OSSへのアクセスに使用するAccessKey IDを入力します。

    fs.oss.accessKeySecret

    OSSへのアクセスに使用されるAccessKeyシークレットを入力します。

    fs.oss.impl

    Hadoopを使用してOSSファイルシステムを実装するために使用されるクラスを入力します。 値をorg.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystemに設定します。

    fs.oss.buffer.dir

    一時ファイルディレクトリを入力します。 このパラメーターを /tmp/ossに設定することを推奨します。

    fs.oss.connection.secure.enabled

    HTTPSを有効にするかどうかを指定します。 HTTPSを有効にすると、パフォーマンスに影響を与える可能性があります。 このパラメーターをfalseに設定することを推奨します。

    fs.oss.connection.maximum

    OSSへの最大接続数を入力します。 このパラメーターを2048に設定することを推奨します。

    パラメーターの説明の詳細については、Hadoop-Aliyunモジュールをご参照ください。

  2. プロンプトに従ってクラスターを再起動します。

  3. OSSとのデータの読み取りと書き込みをテストします。

    • OSSからのテストデータ読み取り:

      hadoop fs -ls oss://${your-bucket-name}/
    • OSSへのテストデータ書き込み:

      hadoop fs -mkdir oss://${your-bucket-name}/hadoop-test

      データをOSSから読み書きできる場合、設定は成功しています。 それ以外の場合は、設定を確認します。

      説明

      ${} のすべてのコンテンツは環境変数です。 これらの環境変数を変更します。

ステップ2: Apache Impalaの設定

デフォルトでは、CDH 6はOSSをサポートしています。 ただし、OSS関連のJARパッケージは、ImpalaノードのCLASSPATH変数に手動で追加する必要があります。 このパッケージをCLASSPATHに追加するには、すべてのImpalaノードで次の操作を実行します。

  1. ${CDH_HOME}/lib/impalaディレクトリに移動し、シンボリックリンクを作成します。

    [root @ cdh-masterインパラ]# cd lib /
    [root @ cdh-master lib]# ln -s. ./../../jars/hadoop-aliyun-3.0.0-cdh6.0.1.jar hadoop-aliyun.jar
    [root @ cdh-master lib]# ln -s. ./../../jars/aliyun-sdk-oss-2.8.3.jar aliyun-sdk-oss-2.8.3.jar
    [root @ cdh-master lib]# ln -s. ./../../jars/jdom-1.1.jar jdom-1.1.jar 
  2. ${CDH_HOME}/binディレクトリに移動します。 impaladstatestoredcatalogdファイルの最後の行で、execコマンドの前に次のコードを追加します。

    エクスポートCLASSPATH =${ CLASSPATH }:${ IMPALA_HOME}/lib/hadoop-aliyun.jar :${ IMPALA_HOME}/lib/aliyun-sdk-oss-2.8.3.jar :${ IMPALA_HOME}/lib/jdom-1.1.jar
  3. すべてのノードでImpala関連のプロセスを再起動します。

ステップ3: 設定を確認する

Impalaを使用してOSSデータを照会します。 TPC-DSから派生したクエリ文を実行します。 詳細については、Apache Impalaおよびhive-testbenchをご参照ください。

説明

TPC-DSは、HiveQLに基づく複雑なクエリ用に設計されています。 Impala SQLはHiveQLとの互換性が高いため、ほとんどのTPC-DSクエリはImpalaで直接実行できます。 ただし、Impala SQLとHiveQLにはわずかな違いがあり、特定のTPC-DSクエリをImpalaで直接実行することはできません。

このセクションでは、Impalaで実行できるTPC-DSクエリを例として使用して、強力なデータ処理におけるImpalaのパフォーマンスを示します。

  1. サンプルデータを生成し、OSSに保存します。

    [root @ cdh-master ~]# git clone https://github.com/hortonworks/hive-testbench.git
    [root @ cdh-master ~]# cd hive-testbench
    [root @ cdh-master hive-testbench]# git checkout hive14
    [root @ cdh-master hive-testbench]# 。/tpcds-build.sh
    [root @ cdh-master hive-testbench]# FORMAT=textfile。/tpcds-setup.sh 50 oss://{your-bucket-name}/ 
  2. テーブルを作成します。

    TPC-DSベンチマークを使用してテーブルを作成するために使用されるステートメントは、Impalaを使用するステートメントと互換性があります。 ddl-tpcds/text/alltables.sqlファイルのステートメントをコピーし、${LOCATION} を変更します。 例:

    [root @ cdh-master hive-testbench]# impala-shell -i cdh-slave01 -d default
    Kerberos認証なしでImpalaシェルを起動する
    cdh-slave01に接続: 21000
    サーバーのバージョン: impalad version 3.0.0-cdh6.0.1 RELEASE(build9a74a5053de5f7b8dd983802e6d75e58d31472db)
    ***********************************************************************************
    インパラシェルへようこそ。
    (Impala Shell v3.0.0-cdh6.0.1(9a74a50) は9月1911日水曜日に構築: 27:37 PDT 2018)
    
    あなたが接続しているインパラのバージョンを知りたいですか? VERSIONコマンドを実行して、見つけて!
    ***********************************************************************************
    クエリ: 「デフォルト」を使用
    [cdh-slave01:21000] default> 外部テーブルcall_centerを作成する (
                               > cc_call_center_sk bigint
                               > 、cc_call_center_id文字列
                               > 、cc_rec_start_date文字列
                               > 、cc_rec_end_date文字列
                               > , cc_closed_date_sk bigint
                               > , cc_open_date_sk bigint
                               > 、cc_name文字列
                               > 、cc_class文字列
                               > , cc_employees int
                               > , cc_sq_ft int
                               > 、cc_hours文字列
                               > 、cc_manager文字列
                               > , cc_mkt_id int
                               > 、cc_mkt_class文字列
                               > 、cc_mkt_desc文字列
                               > 、cc_market_manager文字列
                               > , cc_division int
                               > 、cc_division_name文字列
                               > , cc_company int
                               > 、cc_company_name文字列
                               > 、cc_street_number文字列
                               > 、cc_street_name文字列
                               > 、cc_street_type文字列
                               > 、cc_suite_number文字列
                               > , cc_city文字列
                               > 、cc_county文字列
                               > 、cc_state文字列
                               > 、cc_zip文字列
                               > 、cc_country文字列
                               > 、cc_gmt_offset double
                               > , cc_tax_percentage double
                               >)
                               > 行形式で区切られたフィールドは '|' で終わる
                               > location 'oss://{your-bucket-name}/50/call_center ';
    クエリ: 外部テーブルcall_centerを作成する (
          cc_call_center_sk bigint
    、cc_call_center_id文字列
    、cc_rec_start_date文字列
    、cc_rec_end_date文字列
    、cc_closed_date_sk bigint
    、cc_open_date_sk bigint
    、cc_name文字列
    、cc_class文字列
    、cc_employees int
    、cc_sq_ft int
    、cc_hours文字列
    、cc_manager文字列
    、cc_mkt_id int
    、cc_mkt_class文字列
    、cc_mkt_desc文字列
    、cc_market_manager文字列
    、cc_division int
    、cc_division_name文字列
    、cc_company int
    、cc_company_name文字列
    、cc_street_number文字列
    、cc_street_name文字列
    、cc_street_type文字列
    、cc_suite_number文字列
    、cc_city文字列
    、cc_county文字列
    、cc_state文字列
    、cc_zip文字列
    、cc_country文字列
    、cc_gmt_offset double
    、cc_tax_percentage double
    )
    行形式で区切られたフィールドは '|' で終わる
    location 'oss://{your-bucket-name}/50/call_center'
    + ------------------------- +
    | 概要 |
    + ------------------------- +
    | テーブルが作成されました。 |
    + ------------------------- +
    4.10秒
    で1行取得
  3. テーブルの内容を確認します。

    [cdh-slave01:21000] default> show tables;
    クエリ: テーブルを表示
    + ------------------------ +
    | name |
    + ------------------------ +
    | call_center |
    | catalog_page |
    | catalog_returns |
    | catalog_sales |
    | customer |
    | customer_address |
    | customer_demographics |
    | date_dim |
    | household_demographics |
    | income_band |
    | インベントリ |
    | アイテム |
    | プロモーション |
    | 理由 |
    | ship_mode |
    | ストア |
    | store_returns |
    | store_sales |
    | time_dim |
    | 倉庫 |
    | web_page |
    | web_returns |
    | web_sales |
    | web_site |
    + ------------------------ +
    0.03秒
    で24行を取得
  4. ImpalaでTPC-DSクエリを実行します。 データは期待どおりに照会できます。

    1. SQLファイルを含むsample-queries-tpcdsディレクトリに移動します。

      [root @ cdh-master hive-testbench]# ls sample-queries-tpcds
      query12.sql query20.sql query27.sql query39.sql query46.sql query54.sql query64.sql query71.l query7.sql query87.sql query93.sql README.md
      query13.sql query21.sql query28.sql query3.sql query48.sql query55.sql query65.sql query72.sq80.sql query80.sql query88.sql query94.sqlテストベンチ設定。query15.sql query22.sql query29.sql query40.sql query49.sql query56.sql query66.sql query73.l sqery82.sql query89.sql query95.sql testbench-withATS.settings
      query17.sql query24.sql query31.sql query42.sql query50.sql query58.sql query67.sql query75.sql query83.sql query90.sql query90.sql query96.sql
      query18.sql query25.sql query32.sql query43.sql query51.sql query60.sql query68.sql query76.l query84.sql query91.sql query97.sql
      query19.sql query26.sql query34.sql query45.sql query52.sql query63.sql query70.sql query79.sql query85.sql query92.sql query98.sql 
    2. query13.sqlを実行します。

      [root @ cdh-master hive-testbench]# impala-shell -i cdh-slave01 -d default -f sample-queries-tpcds/query13.sql
      Kerberos認証なしでImpalaシェルを起動する
      cdh-slave01に接続: 21000
      サーバーのバージョン: impalad version 3.0.0-cdh6.0.1 RELEASE(build9a74a5053de5f7b8dd983802e6d75e58d31472db)
      クエリ: use'default'Query: selectavg(ss_quantity)
             , avg(ss_ext_sales_price)
             , avg(ss_ext_wholesale_cost)
             sum(ss_ext_wholesale_cost)
       store_salesから
           , ストア
           、customer_demographics
           、household_demographics
           、customer_address
           , date_dim
       where store.s_store_sk = store_sales.ss_store_sk
       とstore_sales.ss_sold_date_sk = date_dim.d_date_skとdate_dim.d_year = 2001and((store_sales.ss_hdemo_sk=household_demographics.hd_demo_sk)
        とcustomer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk
        とcustomer_demographics.cd_marital_status = 'M' とcustomer_demographics.cd_education_status = '4 yr Degree' とstore_sales.ss_sales_price between100.00and150.00and household_demographics.hd_dep_count = 3
           ) または
          (store_sales.ss_hdemo_sk=household_demographics.hd_demo_sk
        とcustomer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk
        customer_demographics.cd_marital_status = 'D'and customer_demographics.cd_education_status = 'Primary' and store_sales.ss_sales_price between50.00and100.00and household_demographics.hd_dep_count = 1
           ) または
          (store_sales.ss_hdemo_sk=household_demographics.hd_demo_sk
        とcustomer_demographics.cd_demo_sk = ss_cdemo_sk
        customer_demographics.cd_marital_status = 'U' およびcustomer_demographics.cd_education_status = 'Advanced Degree' およびstore_sales.ss_sales_price between150.00and200.00and household_demographics.hd_dep_count = 1
           ))
       および ((store_sales.ss_addr_sk = customer_address.ca_address_sk)
        とcustomer_address.ca_country = 'United States' とcustomer_address.ca_state in('KY', 'GA', 'NM')
        とstore_sales.ss_net_profit between100and200
           ) または
          (store_sales.ss_addr_sk = customer_address.ca_address_sk
        とcustomer_address.ca_country = 'United States' とcustomer_address.ca_state in('MT', 'OR', 'IN')
        とstore_sales.ss_net_profit between150and300
           ) または
          (store_sales.ss_addr_sk = customer_address.ca_address_sk
        とcustomer_address.ca_country = 'United States' とcustomer_address.ca_state in('WI' 、'MO' 、'WV')
        とstore_sales.ss_net_profit between50and250
           ))
      クエリの送信場所: 2018-10-3011:44:47 (コーディネーター: http:// cdh-slave01:25000)
      クエリの進行状況は、http:// cdh-slave01:25000/query_plan?query_id=ff4b3157eddfc3c4:8a31c6500000000で監視できます。+ ------------------- + ------------------------- + ---------------------------- + ---------------------------- +
      | avg(ss_quantity) | avg(ss_ext_sales_price) | avg(ss_ext_wholesale_cost) | sum(ss_ext_wholesale_cost) |
      + ------------------- + ------------------------- + ---------------------------- + ---------------------------- +
      | 30.87106918238994 | 2352.642327044025 | 2162.600911949685 | 687707.09 |
      + ------------------- + ------------------------- + ---------------------------- + ---------------------------- +
      353.16秒
      で1行取得

    このクエリには、storestore_salescustomer_demographicshouse_demographicscustomer_addressdate_dimの6つのテーブルが含まれます。

    [cdh-slave01:21000] default> showtable STATS store;
    クエリ: 表示可能なSTATSストア
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    |# 行 |# ファイル | サイズ | バイトキャッシュ | Cached | CacheReplication | フォーマット | 増分統計 | 場所
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    | -1 | 1 | 37.56KB | キャッシュなし | キャッシュなし | テキスト | false | oss://{your-bucket-name}/50/store |
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    0.01秒で1行を取得
    [cdh-slave01:21000] default> showtable STATS store_sales;
    クエリ: 表示可能なSTATS store_sales
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    |# 行 |# ファイル | サイズ | バイトキャッシュ | Cached | CacheReplication | フォーマット | 増分統計 | 場所
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    | -1 | 50 | 18.75GB | キャッシュなし | キャッシュなし | テキスト | false | oss://{your-bucket-name}/50/store_sales |
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    0.01秒で1行を取得
    [cdh-slave01:21000] デフォルト> 表示可能なSTATS customer_demographics;
    クエリ: 表示可能なSTATS customer_demographics
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    |# 行 |# ファイル | サイズ | バイトキャッシュ | Cached | CacheReplication | フォーマット | 増分統計 | 場所
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    | -1 | 50 | 76.92MB | キャッシュなし | キャッシュなし | テキスト | false | oss://{your-bucket-name}/50/customer_demographics |
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    0.01秒で1行を取得
    [cdh-slave01:21000] default> showtable STATS household_demographics;
    クエリ: 表示可能なSTATS household_demographics
    ------- ------- ----------- ----------------------- ------------------- ------------- ------------------- +
    |# 行 |# ファイル | サイズ | バイトキャッシュ | Cached | CacheReplication | フォーマット | 増分統計 | 場所
    ------- ------- ----------- ----------------------- ------------------- ------------- ------------------- +
    | -1 | 1 | 148.10KB | キャッシュなし | キャッシュなし | テキスト | false | oss://{your-bucket-name}/50/household_demographics |
    ------- ------- ----------- ----------------------- ------------------- ------------- ------------------- +
    0.01秒で1行を取得
    [cdh-slave01:21000] default> showtable STATS customer_address;
    クエリ: showtable STATS customer_address
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    |# 行 |# ファイル | サイズ | バイトキャッシュ | Cached | CacheReplication | フォーマット | 増分統計 | 場所
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    | -1 | 1 | 40.54MB | キャッシュなし | キャッシュなし | テキスト | false | oss://{your-bucket-name}/50/customer_address |
    ------- ------- ---------- -------------------- ------------------- --------------- ------------------- +
    0.01秒で1行を取得
    [cdh-slave01:21000] default> showtable STATS date_dim;
    クエリ: showtable STATS date_dim
    ------- ------- --------- ------------------- ------------------- ----------------- ------------------- +
    |# 行 |# ファイル | サイズ | バイトキャッシュ | Cached | CacheReplication | フォーマット | 増分統計 | 場所
    ------- ------- --------- ------------------- ------------------- ----------------- ------------------- +
    | -1 | 1 | 9.84MB | キャッシュなし | キャッシュなし | テキスト | false | oss://{your-bucket-name}/50/date_dim |
    ------- ------- --------- ------------------- ------------------- ----------------- ------------------- +
    0.01秒
    で1行取得

参考資料