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

Object Storage Service:CDH 5を使用したOSSデータの読み書き

最終更新日:May 07, 2024

Apache Hadoop (CDH) を含むClouderaのディストリビューションは、Hadoopディストリビューションの1つです。 OSSはCDH 6.0.1のHadoop 3.0.0でサポートされていますが、CDH 5のHadoop 2.6ではサポートされていません。 このトピックでは、OSSデータを読み書きするようにCDH 5を設定する方法について説明します。

前提条件

CDH 5クラスターがデプロイされています。 このトピックでは、CDH 5.14.4を例として使用します。 CDH 5クラスターの構築方法の詳細については、「Clouderaインストールガイド」をご参照ください。

背景情報

CDH 5は、Resource Managerの要件に基づいて、httpclientコンポーネントとhttpcoreコンポーネントの以前のバージョン (4.2.5) を使用します。 ただし、OSS SDKには2つのコンポーネントの新しいバージョンが必要です。 OSS SDKの要件を満たすには、次の手順を実行します。

手順1: OSS設定の追加

すべてのCDHノードで次の操作を実行します。

  1. CDH 5がインストールされている ${CDH_HOME} ディレクトリの構造を表示します。
    [root @ cdh-master CDH-5.14.4-1.cdh5.14.4.p0.3]# ls -lh
    ファイルの合計サイズは100 KBです。
    drwxr-xr-x 2ルートルート4.0K 6月12 21:03ビン
    drwxr-xr-x 27ルートルート4.0K 6月12日20:57など
    drwxr-xr-x 5ルートルート4.0K 6月12日20:57
    drwxr-xr-x 2ルートルート68K 6月12日21:09 jar
    drwxr-xr-x 38ルートルート4.0K 6月12 21:03 lib
    drwxr-xr-x 3ルートルート4.0K 6月12 20:57 lib64
    drwxr-xr-x 3ルートルート4.0K 6月12日20:51 libexec
    drwxr-xr-x 2ルートルート4.0K 6月12日21:02メタ
    drwxr-xr-x 4ルートルート4.0K 6月12 21:03シェア 
    説明 このトピックでは、${} で囲まれたすべてのコンテンツは環境変数です。 実際の環境に基づいて環境変数を変更します。
  2. こちらをクリックして、OSSと互換性のあるCDH 5.14.4パッケージをCDH 5のインストールディレクトリのjarsフォルダーにダウンロードします。
    このパッケージには、HadoopバージョンのCDH 5.14.4に基づいてApache Hadoop for OSSが提供するパッチが埋め込まれています。 パッケージの他のバージョンをダウンロードするには、次のリンクにアクセスします。
    • CDH 5.8.5
    • CDH 5.4.4
    • CDH 6.3.2
      説明 CDH 6.3.2の場合、パッケージのファイルをCDHのインストールディレクトリのjarsフォルダーにコピーし、次の手順を実行してaliyun-sdk-oss-3.4.1.jarを更新し、aliyun-java-sdk-*.jarファイルを対応する場所にリンクする必要があります。
  3. ダウンロードしたパッケージを解凍します。
    [root @ cdh-master CDH-5.14.4-1.cdh5.14.4.p0.3]# tar -tvf hadoop-oss-cdh-5.14.4.tar.gz
    drwxr-xr-xルート /ルート0 2018-10-08 18:16 hadoop-oss-cdh-5.14.4 /
    -rw-r -- root/root 13277 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-sts-3.0.0.jar
    -rw-r -- root/root 326724 2018-10-08 18:16 hadoop-oss-cdh-5.14.4/httpcore-4.4.4.jar
    -rw-r -- root/root 524927 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-sdk-oss-3.4.1.jar
    -rw-r -- root/root 116337 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-core-3.4.0.jar
    -rw-r -- root/root 215492 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-ram-3.0.0.jar
    -rw-r -- root/root 788137 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-ecs-4.2.0.jar
    -rw-r -- root/root 70017 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/hadoop-aliyun-2.6.0-cdh5.14.4.jar
    -rw-r -- root/root 736658 2018-10-08 18:16 hadoop-oss-cdh-5.14.4/httpclient-4.5.2.jar 
  4. ${CDH_HOME}/lib/hadoopディレクトリに移動します。 次のコマンドを実行します。
    [root @ cdh-master hadoop]# rm -f lib/httpclient-4.2.5.jar
    [root @ cdh-master hadoop]# rm -f lib/httpcore-4.2.5.jar
    [root @ cdh-master hadoop]# ln -s .. /../jars/hadoop-aliyun-2.6.0-cdh5.14.4.jar hadoop-aliyun-2.6.0-cdh5.14.4.jar
    [root @ cdh-master hadoop]# ln -s hadoop-aliyun-2.6.0-cdh5.14.4.jar hadoop-aliyun.jar
    [root @ cdh-master hadoop]# cd lib
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-core-3.4.0.jar aliyun-java-sdk-core-3.4.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-ecs-4.2.0.jar aliyun-java-sdk-ecs-4.2.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-ram-3.0.0.jar aliyun-java-sdk-ram-3.0.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-sts-3.0.0.jar aliyun-java-sdk-sts-3.0.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-sdk-oss-3.4.1.jar aliyun-sdk-oss-3.4.1.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/httpclient-4.5.2.jar httpclient-4.5.2.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/httpcore-4.4.4.jar httpcore-4.4.4.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/jdom-1.1.jar jdom-1.1.jar 
  5. Resource Managerがデプロイされているノードの ${CDH_HOME}/lib/hadoop-yarn/bin/ ディレクトリに移動します。 交換CLASSPATH =${ CLASSPATH }:$ HADOOP_YARN_HOME/${YARN_DIR}/* CLASSPATH =${ CLASSPATH }:$ HADOOP_YARN_HOME/${YARN_LIB_JARS_DIR}/*で、ヤーンファイルをCLASSPATH=$HADOOP_YARN_HOME/${YARN_DIR}/* :${ CLASSPATH}CLASSPATH=$HADOOP_YARN_HOME/${YARN_LIB_JARS_DIR}/* :${ CLASSPATH}.
  6. Resource Managerがデプロイされているノードの ${CDH_HOME}/lib/hadoop-yarn/libディレクトリに移動します。 次のコマンドを実行します。
    [root @ cdh-master lib]# ln -s .. /.. /../jars/httpclient-4.2.5.jar httpclient-4.2.5.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/httpcore-4.2.5.jar httpcore-4.2.5.jar 
  7. クラスター管理ツールCMを使用して設定を追加します。
    CMによって管理されているクラスターがない場合は、core-site.xmlファイルを変更します。 次の表に、例としてCMで設定できるパラメーターを示します。
    パラメーター設定方法
    fs.oss.endpointバケットが配置されているリージョンへのアクセスに使用するエンドポイントを指定します。

    たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをoss-cn-hangzhou.aliyuncs.comに設定します。 他のリージョンのエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

    fs.oss.accessKeyIdOSSへのアクセスに使用するAccessKey IDを指定します。 AccessKey IDを取得する方法の詳細については、「AccessKeyペアの取得」をご参照ください。
    fs.oss.accessKeySecretOSSへのアクセスに使用するAccessKeyシークレットを指定します。 AccessKeyシークレットの取得方法の詳細については、「AccessKeyペアの取得」をご参照ください。
    fs.oss.implHadoopに基づくOSSファイルシステムの実装に使用するクラスを指定します。 このパラメーターをorg.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystemに設定します。
    fs.oss.buffer.dir一时ファイルを格纳するディレクトリ名を指定します。

    このパラメーターを /tmp/ossに設定することを推奨します。

    fs.oss.connection.secure.enabledHTTPSを有効にするかどうかを指定します。 HTTPSを有効にすると、システムのパフォーマンスが低下します。

    このパラメーターをfalseに設定することを推奨します。

    fs.oss.connection.maximumOSSへの最大接続数を指定します。

    このパラメーターを2048に設定することを推奨します。

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

  8. プロンプトに従ってクラスターを再起動します。
  9. OSSとのデータの読み取りと書き込みをテストします。
    • 次のコマンドを実行して、OSSからのデータの読み取りをテストします。
      hadoop fs -ls oss://${your-bucket-name}/
    • 次のコマンドを実行して、OSSへのデータの書き込みをテストします。
      hadoop fs -mkdir oss://${your-bucket-name}/hadoop-test

      テストデータをOSSから読み書きできる場合は、設定が正しいことを示します。 それ以外の場合は、設定を確認してください。

手順2: ImpalaのOSSサポートの設定

Impalaは、Hadoop分散ファイルシステム (HDFS) に格納されているデータのクエリに使用できます。 OSSをサポートするようにCDH 5を設定した後、Impalaを使用してOSSに保存されているデータを照会できます。 OSS SDKには、新しいバージョンのhttpclientコンポーネントとhttpcoreコンポーネントが必要です。 したがって、Impalaがデプロイされているノードで次の手順を実行する必要があります。

  1. ${CDH_HOME}/lib/impala/libディレクトリに移動します。 次のコマンドを実行します。
    [root @ cdh-master lib]# rm -f httpclient-4.2.5.jar httpcore-4.2.5.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/httpclient-4.5.2.jar httpclient-4.5.2.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/httpcore-4.4.4.jar httpcore-4.4.4.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/hadoop-aliyun-2.6.0-cdh5.14.4.jar hadoop-aliyun.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-core-3.4.0.jar aliyun-java-sdk-core-3.4.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-ecs-4.2.0.jar aliyun-java-sdk-ecs-4.2.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-ram-3.0.0.jar aliyun-java-sdk-ram-3.0.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-java-sdk-sts-3.0.0.jar aliyun-java-sdk-sts-3.0.0.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/aliyun-sdk-oss-3.4.1.jar aliyun-sdk-oss-3.4.1.jar
    [root @ cdh-master lib]# ln -s .. /.. /../jars/jdom-1.1.jar jdom-1.1.jar 
  2. ${CDH_HOME}/binディレクトリに移動し、impaladstatestoredcatalogdファイルの最後の行のexecコマンドの前に次の内容を追加します。
    export CLASSPATH=$CLASSPATH :${ IMPALA_HOME}/lib/httpclient-4.5.2.jar :${ IMPALA_HOME}/lib:${IMPALA_HOME}/lib /$hadoop-aliyun.jar: {IMPALA_HOME}/lib /$aliyun-java-sdk-core-3.4.0.jar: {IMPALA_LA_HOME} aliyun-java-sdk-ecs-4.2.0.jar: IMPALA_IMP_IMP_/ HOME} {aliyun-java-sdk-sts-3.0.0.jar /ALA_ALA_IMPIMPIMPIMPALAlib /HOME} {jdom-1.1.jar /ALA_IMP_A
  3. すべてのノードでImpala関連のプロセスを再起動します。
    その後、Impalaを使用してOSSデータをクエリできます。

設定の確認

TPC-DSのベンチマークは、call_centerという名前のテーブルを使用します。 このテーブルがOSSに保存されている場合、call_centerにマップされる外部テーブルを作成し、cc_countryに基づいてテーブル内のレコード数を照会できます。
[root @ cdh-master ~]# impala-shell -i cdh-slave01:21000
Kerberos認証なしでImpalaシェルを起動する
cdh-slave01に接続: 21000
サーバーのバージョン: impalad version 2.11.0-cdh5.14.4 RELEASE (build20e635646a13347800fad36a7d0b1da25ab32404)
***********************************************************************************
インパラシェルへようこそ。
(インパラシェルv2.11.0-cdh5.14.4 (20e6356) は6月1203日に建てられました: 43:08 PDT 2018)

HISTORYコマンドは、すべてのシェルコマンドを時系列でリストします。
***********************************************************************************
[cdh-slave01:21000] > droptableifexists call_center;
クエリ: droptableifexists call_center
[cdh-slave01:21000] >
[cdh-slave01:21000] > createexternaltable 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
                    >)
                    > rowformatdelimitedfieldsterminatedby' |'
                    > location 'oss://${your-bucket-name}/call_center ';
クエリ: createexternaltable 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
)
rowformatdelimitedfieldsterminatedby' |'
location 'oss://${your-bucket-name}/call_center'
フェッチされた0row(s) in0.07s

[cdh-slave01:21000] > cc_country, count(*) from call_center groupby cc_country;
クエリ: cc_countryを選択し、call_center groupby cc_countryからカウント (*)
クエリ送信時: 2018-10-2816:21:13 (コーディネーター: http:// cdh-slave01:25000)
クエリの進行状況は、http:// cdh-slave01:25000/query_plan?query_id=fb4e09977145f367:3bdfe4d600000000で監視できます。+ -------------- ------------ +
| cc_country | count(*) |
+ -------------- ------------ +
| アメリカ合众国 | 30 |
+ -------------- ------------ +
4.71秒
で1行取得

参考資料

Hadoopの詳細については、HadoopがOSSをサポートしているをご参照ください。