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ノードで次の操作を実行します。
- 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シェア
説明 このトピックでは、${} で囲まれたすべてのコンテンツは環境変数です。 実際の環境に基づいて環境変数を変更します。 - こちらをクリックして、OSSと互換性のあるCDH 5.14.4パッケージをCDH 5のインストールディレクトリのjarsフォルダーにダウンロードします。 このパッケージには、HadoopバージョンのCDH 5.14.4に基づいてApache Hadoop for OSSが提供するパッチが埋め込まれています。 パッケージの他のバージョンをダウンロードするには、次のリンクにアクセスします。
- ダウンロードしたパッケージを解凍します。
[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
- ${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
- 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}
. - 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
- クラスター管理ツールCMを使用して設定を追加します。CMによって管理されているクラスターがない場合は、core-site.xmlファイルを変更します。 次の表に、例としてCMで設定できるパラメーターを示します。
パラメーター 設定方法 fs.oss.endpoint バケットが配置されているリージョンへのアクセスに使用するエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを
oss-cn-hangzhou.aliyuncs.com
に設定します。 他のリージョンのエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。fs.oss.accessKeyId OSSへのアクセスに使用するAccessKey IDを指定します。 AccessKey IDを取得する方法の詳細については、「AccessKeyペアの取得」をご参照ください。 fs.oss.accessKeySecret OSSへのアクセスに使用するAccessKeyシークレットを指定します。 AccessKeyシークレットの取得方法の詳細については、「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モジュールをご参照ください。
- プロンプトに従ってクラスターを再起動します。
- OSSとのデータの読み取りと書き込みをテストします。
- 次のコマンドを実行して、OSSからのデータの読み取りをテストします。
hadoop fs -ls oss://${your-bucket-name}/
- 次のコマンドを実行して、OSSへのデータの書き込みをテストします。
hadoop fs -mkdir oss://${your-bucket-name}/hadoop-test
テストデータをOSSから読み書きできる場合は、設定が正しいことを示します。 それ以外の場合は、設定を確認してください。
- 次のコマンドを実行して、OSSからのデータの読み取りをテストします。
手順2: ImpalaのOSSサポートの設定
Impalaは、Hadoop分散ファイルシステム (HDFS) に格納されているデータのクエリに使用できます。 OSSをサポートするようにCDH 5を設定した後、Impalaを使用してOSSに保存されているデータを照会できます。 OSS SDKには、新しいバージョンのhttpclientコンポーネントとhttpcoreコンポーネントが必要です。 したがって、Impalaがデプロイされているノードで次の手順を実行する必要があります。
- ${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
- ${CDH_HOME}/binディレクトリに移動し、impalad、statestored、catalogdファイルの最後の行の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
- すべてのノードでImpala関連のプロセスを再起動します。その後、Impalaを使用してOSSデータをクエリできます。
設定の確認
[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をサポートしているをご参照ください。