Hortonworks Data Platform (HDP) 3.0.1 には Hadoop 3.1.1 が含まれており、Object Storage Service (OSS) をネイティブでサポートしています。しかし、それ以前の HDP バージョンではサポートされていません。このガイドでは、OSS コネクタの JAR をインストールし、Hadoop ファイルシステムの設定を行い、MapReduce ジョブで接続性を検証することで、HDP 2.6.1.0 クラスターに OSS サポートを追加する方法について説明します。
前提条件
開始する前に、以下が準備できていることを確認してください。
HDP 2.6.1.0 クラスター。お持ちでない場合は、以下のいずれかの方法で作成してください。
Ambari — 管理 UI を使用したクラスター作成
手動セットアップ — ご利用の環境で Ambari が利用できない場合
すべてのクラスターノードに対する
sudoアクセス権OSS バケットとそのエンドポイント。エンドポイントの形式については、「リージョンとエンドポイント」をご参照ください。
バケットに対する読み書き権限を持つ AccessKey ID と AccessKey Secret
OSS コネクタ JAR のインストール
HDP 2.6.1.0 用の OSS コネクタパッケージをダウンロードします。
アーカイブを展開します。
sudo tar -xvf hadoop-oss-hdp-2.6.1.0-129.tar展開されたディレクトリには、以下のファイルが含まれています。
hadoop-oss-hdp-2.6.1.0-129/ hadoop-oss-hdp-2.6.1.0-129/hadoop-aliyun-2.7.3.2.6.1.0-129.jar hadoop-oss-hdp-2.6.1.0-129/aliyun-sdk-oss-3.4.1.jar hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-core-3.4.0.jar hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-ecs-4.2.0.jar hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-ram-3.0.0.jar hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-sts-3.0.0.jar hadoop-oss-hdp-2.6.1.0-129/jdom-1.1.jarhadoop-aliyun-2.7.3.2.6.1.0-129.jarを Hadoop クライアントディレクトリに移動します。sudo mv hadoop-oss-hdp-2.6.1.0-129/hadoop-aliyun-2.7.3.2.6.1.0-129.jar \ /usr/hdp/current/hadoop-client/ファイルが正しく配置されたことを確認します。
sudo ls -lh /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar期待される出力:
-rw-r--r-- 1 root root 64K Oct 28 20:56 /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar他のすべての JAR ファイルを Hadoop クライアントの
libディレクトリに移動します。sudo mv hadoop-oss-hdp-2.6.1.0-129/aliyun-*.jar \ hadoop-oss-hdp-2.6.1.0-129/jdom-1.1.jar \ /usr/hdp/current/hadoop-client/lib/ファイルが正しく配置されたことを確認します。
sudo ls -ltrh /usr/hdp/current/hadoop-client/lib出力には、以下のようなエントリが含まれているはずです。
-rw-r--r-- 1 root root 114K Oct 28 20:56 aliyun-java-sdk-core-3.4.0.jar -rw-r--r-- 1 root root 513K Oct 28 20:56 aliyun-sdk-oss-3.4.1.jar -rw-r--r-- 1 root root 13K Oct 28 20:56 aliyun-java-sdk-sts-3.0.0.jar -rw-r--r-- 1 root root 211K Oct 28 20:56 aliyun-java-sdk-ram-3.0.0.jar -rw-r--r-- 1 root root 770K Oct 28 20:56 aliyun-java-sdk-ecs-4.2.0.jar -rw-r--r-- 1 root root 150K Oct 28 20:56 jdom-1.1.jarHDP クラスター内のすべてのノードで、ステップ 1〜4 を繰り返します。
このガイドに示されているすべてのパス (例:
/usr/hdp/current) は、標準的な HDP 2.6 のデフォルトレイアウトを反映しています。クラスターがカスタムインストールディレクトリを使用している場合は、パスを適宜調整してください。
OSS 設定の構成
Hadoop 設定に以下のプロパティを追加します。適用方法は、クラスターが Ambari を使用しているかどうかによって異なります。
オプション 1: Ambari の使用 (推奨)
Ambari の Web UI で、[HDFS] > [Configs] > [Custom core-site] に移動します。
以下の表から各プロパティを追加します。
Ambari からプロンプトが表示されたら、クラスターを再起動します。
オプション 2: core-site.xml の直接編集
クラスターが Ambari を使用していない場合は、各ノードの /etc/hadoop/conf/core-site.xml にプロパティを直接追加し、関連サービスを再起動します。
必須および推奨プロパティ
以下の XML ブロックをコピーし、ご利用の環境に合わせて変更してください。これには、すべての必須および推奨プロパティと、そのデフォルト値および説明が含まれています。
<property>
<name>fs.oss.endpoint</name>
<value>oss-cn-zhangjiakou-internal.aliyuncs.com</value>
<description>バケットが配置されている OSS リージョンのエンドポイント。
クラスターが Alibaba Cloud 内で実行されている場合は、内部エンドポイントを使用して下り料金を回避します。</description>
</property>
<property>
<name>fs.oss.accessKeyId</name>
<value>YOUR_ACCESS_KEY_ID</value>
<description>OSS との認証に使用される AccessKey ID。</description>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>YOUR_ACCESS_KEY_SECRET</value>
<description>OSS との認証に使用される AccessKey Secret。</description>
</property>
<property>
<name>fs.oss.impl</name>
<value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value>
<description>OSS ファイルシステムの実装クラス。この値は変更しないでください。</description>
</property>
<property>
<name>fs.oss.buffer.dir</name>
<value>/tmp/oss</value>
<description>OSS の読み書き操作中の一時ファイルのローカルディレクトリ。</description>
</property>
<property>
<name>fs.oss.connection.secure.enabled</name>
<value>false</value>
<description>OSS 接続に HTTPS を使用するかどうか。クラスター内部のトラフィックの場合、
TLS のパフォーマンスオーバーヘッドを避けるために false に設定します。セキュリティポリシーで転送中の暗号化が必要な場合は true に設定します。</description>
</property>
<property>
<name>fs.oss.connection.maximum</name>
<value>2048</value>
<description>OSS への同時接続の最大数。アップストリームのデフォルト値は 32 です。
高い並列処理を行うワークロードの場合は、この値を増やしてください。</description>
</property>YOUR_ACCESS_KEY_ID と YOUR_ACCESS_KEY_SECRET を実際の認証情報に置き換えてください。サポートされているプロパティの完全なリストについては、「Hadoop-Aliyun モジュールリファレンス」をご参照ください。
接続性の検証
クラスターを再起動した後、以下のコマンドを実行して、Hadoop が OSS からの読み取りと OSS への書き込みができることを確認します。<your-bucket-name> を実際のバケット名に置き換えてください。
読み取りテスト — バケットのルートをリスト表示します。
sudo hadoop fs -ls oss://<your-bucket-name>/書き込みテスト — バケット内にディレクトリを作成します。
sudo hadoop fs -mkdir oss://<your-bucket-name>/hadoop-test両方のコマンドがエラーなく成功した場合、コネクタは正常に動作しています。認証エラーが表示された場合は、fs.oss.accessKeyId と fs.oss.accessKeySecret の値を確認してください。接続エラーが表示された場合は、fs.oss.endpoint がバケットの所在地リージョンと一致していることを確認してください。
OSS に対する MapReduce ジョブの実行
MapReduce ジョブを実行する前に、クラスターの分散 MapReduce アーカイブを更新して、OSS コネクタの JAR を含めます。
以下の手順では MapReduce を例として使用しています。Tez などの他のフレームワークの場合も、同じアプローチを適用します。つまり、コネクタの JAR を同等のアーカイブ (例: hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/tez/tez.tar.gz) にコピーし、再パッケージ化します。hdfs ユーザーとして以下のコマンドを実行します。
sudo su hdfs
# HDFS から既存の MapReduce アーカイブをダウンロード
hadoop fs -copyToLocal /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz
# 元のアーカイブをバックアップ
cp mapreduce.tar.gz mapreduce.tar.gz.bak
# アーカイブを展開
tar zxf mapreduce.tar.gz
# OSS コネクタ JAR をアーカイブの tools/lib ディレクトリにコピー
cp /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar \
hadoop/share/hadoop/tools/lib/
cp /usr/hdp/current/hadoop-client/lib/aliyun-*.jar \
hadoop/share/hadoop/tools/lib/
cp /usr/hdp/current/hadoop-client/lib/jdom-1.1.jar \
hadoop/share/hadoop/tools/lib/
# 更新されたアーカイブを再パッケージ化してアップロード
tar zcf mapreduce.tar.gz hadoop
hadoop fs -rm /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz
hadoop fs -copyFromLocal mapreduce.tar.gz /hdp/apps/2.6.1.0-129/mapreduce/TeraGen と TeraSort による検証
標準の Hadoop ベンチマークスイートを実行して、MapReduce ジョブが OSS に対してエンドツーエンドで読み書きできることを確認します。<bucket-name> を実際のバケット名に置き換えてください。
TeraGen でテストデータを生成:
sudo hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar \
teragen -Dmapred.map.tasks=100 10995116 oss://<bucket-name>/1G-input正常に実行されると、以下のような出力で終了します。
18/10/28 21:35:15 INFO mapreduce.Job: Job job_1540728986531_0005 completed successfully
18/10/28 21:35:15 INFO mapreduce.Job: Counters: 36
...TeraSort でデータをソート:
sudo hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar \
terasort -Dmapred.map.tasks=100 \
oss://<bucket-name>/1G-input \
oss://<bucket-name>/1G-output正常に実行されると、以下の出力で終了します。
18/10/28 21:43:56 INFO mapreduce.Job: Job job_1540728986531_0006 completed successfully
18/10/28 21:43:56 INFO mapreduce.Job: Counters: 54
...両方のジョブが正常に完了した場合、HDP 2.6.1.0 クラスターは OSS に対する MapReduce ワークロードを実行するために完全に設定されています。
次のステップ
Hadoop-Aliyun モジュールリファレンス —
fs.oss.*設定プロパティの完全なリストOSS リージョン別エンドポイント — お使いのバケットのリージョンに対応する適切な内部エンドポイントまたはパブリックエンドポイントを検索します。