Hortonworks Data Platform (HDP) は、Hortonworks がリリースしたビッグデータプラットフォームであり、Hadoop、Hive、HBase などのオープンソースコンポーネントで構成されています。HDP 3.0.1 には Hadoop 3.1.1 が含まれており、Object Storage Service (OSS) をサポートしています。ただし、HDP の以前のバージョンは OSS をサポートしていません。本トピックでは、HDP 2.6.1.0 を例に、HDP 2.6 を設定して OSS データの読み取りと書き込みを行う方法について説明します。
前提条件
HDP 2.6.1.0 クラスターが作成されていること。
- Ambari を使用して HDP 2.6.1.0 クラスターを作成します。
- Ambari が利用できない場合は、手動で HDP 2.6.1.0 クラスターを作成できます。
手順
- OSS をサポートする HDP 2.6.1.0 パッケージ をダウンロードします。
- 次のコマンドを実行して、ダウンロードしたパッケージを解凍します。
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/aliyun-java-sdk-ram-3.0.0.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-sts-3.0.0.jar hadoop-oss-hdp-2.6.1.0-129/jdom-1.1.jar hadoop-oss-hdp-2.6.1.0-129/aliyun-sdk-oss-3.4.1.jar hadoop-oss-hdp-2.6.1.0-129/hadoop-aliyun-2.7.3.2.6.1.0-129.jar - JAR パッケージのディレクトリを変更します。説明 本トピックでは、${} で囲まれた内容は環境変数です。ご使用の環境に合わせて値を置き換えてください。
- 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 パッケージを ${/usr/hdp/current}/hadoop-client/lib/ ディレクトリに移動します。次のコマンドを実行して、ファイルが移動されたことを確認します。
sudo ls -ltrh /usr/hdp/current/hadoop-client/lib成功した場合の出力例:
total 27M ...... drwxr-xr-x 2 root root 4.0K Oct 28 20:10 ranger-hdfs-plugin-impl drwxr-xr-x 2 root root 4.0K Oct 28 20:10 ranger-yarn-plugin-impl drwxr-xr-x 2 root root 4.0K Oct 28 20:10 native -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.jar
- hadoop-aliyun-2.7.3.2.6.1.0-129.jar パッケージを ${/usr/hdp/current}/hadoop-client/ ディレクトリに移動します。次のコマンドを実行して、ファイルが移動されたことを確認します。
- すべての HDP ノードで上記の操作を実行します。
- Ambari を使用して必要な設定を追加します。クラスターが Ambari で管理されていない場合は、core-site.xml ファイルを変更してください。 [Custom core-site] セクションで、次のプロパティを追加して設定してください:
fs.oss.endpoint、fs.oss.accessKeyId、fs.oss.accessKeySecret、fs.oss.impl、fs.oss.buffer.dir、fs.oss.connection.secure.enabled、fs.oss.connection.maximum。パラメーター 説明 fs.oss.endpoint アクセスするバケットがあるリージョンのエンドポイントを指定します。 例: oss-cn-zhangjiakou-internal.aliyuncs.com。
fs.oss.accessKeyId OSS へのアクセスに使用する AccessKey ID を入力します。 fs.oss.accessKeySecret OSS へのアクセスに使用する AccessKey Secret を入力します。 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 module」をご参照ください。
- Ambari のプロンプトに従って、クラスターを再起動します。
- OSS からデータを読み書きできるかテストします。
- 次のコマンドを実行して、OSS からデータを読み取れるかテストします。
sudo hadoop fs -ls oss://${your-bucket-name}/ - 次のコマンドを実行して、OSS にデータを書き込めるかテストします。
sudo hadoop fs -mkdir oss://${your-bucket-name}/hadoop-testOSS からデータを読み書きできた場合、設定は成功です。そうでない場合は、設定が正しいかどうかを確認してください。
- 次のコマンドを実行して、OSS からデータを読み取れるかテストします。
- MapReduce ジョブを実行するには、次のコマンドを実行して、HDP 2.6.1.0 パッケージのファイルを hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz パッケージに追加します。
説明 この例では、MapReduce ジョブを使用しています。他のタイプのジョブの実行方法の詳細については、次の手順とコードを参照してください。たとえば、TEZ ジョブを実行するには、HDP 2.6.1.0 パッケージのファイルを hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/tez/tez.tar.gz パッケージに追加します。
sudo su - hdfs cd ~ hadoop fs -copyToLocal /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz hadoop fs -rm /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz cp mapreduce.tar.gz mapreduce.tar.gz.bak tar zxf mapreduce.tar.gz 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-* 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 -copyFromLocal mapreduce.tar.gz /hdp/apps/2.6.1.0-129/mapreduce/
設定の検証
TeraGen と TeraSort を実行して、設定が反映されているかを確認できます。
- 次のコマンドを実行して、TeraGen をテストします。
sudo hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapred.map.tasks=100 10995116 oss://${your-bucket-name}/1G-input成功した場合の出力例:
18/10/28 21:32:38 INFO client.RMProxy: Connecting to ResourceManager at cdh-master/192.168.0.161:8050 18/10/28 21:32:38 INFO client.AHSProxy: Connecting to Application History server at cdh-master/192.168.0.161:10200 18/10/28 21:32:38 INFO aliyun.oss: [Server]Unable to execute HTTP request: Not Found [ErrorCode]: NoSuchKey [RequestId]: 5BD5BA7641FCE369BC1D052C [HostId]: null 18/10/28 21:32:38 INFO aliyun.oss: [Server]Unable to execute HTTP request: Not Found [ErrorCode]: NoSuchKey [RequestId]: 5BD5BA7641FCE369BC1D052F [HostId]: null 18/10/28 21:32:39 INFO terasort.TeraSort: Generating 10995116 using 100 18/10/28 21:32:39 INFO mapreduce.JobSubmitter: number of splits:100 18/10/28 21:32:39 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1540728986531_0005 18/10/28 21:32:39 INFO impl.YarnClientImpl: Submitted application application_1540728986531_0005 18/10/28 21:32:39 INFO mapreduce.Job: The url to track the job: http://cdh-master:8088/proxy/application_1540728986531_0005/ 18/10/28 21:32:39 INFO mapreduce.Job: Running job: job_1540728986531_0005 18/10/28 21:32:49 INFO mapreduce.Job: Job job_1540728986531_0005 running in uber mode : false 18/10/28 21:32:49 INFO mapreduce.Job: map 0% reduce 0% 18/10/28 21:32:55 INFO mapreduce.Job: map 1% reduce 0% 18/10/28 21:32:57 INFO mapreduce.Job: map 2% reduce 0% 18/10/28 21:32:58 INFO mapreduce.Job: map 4% reduce 0% ... 18/10/28 21:34:40 INFO mapreduce.Job: map 99% reduce 0% 18/10/28 21:34:42 INFO mapreduce.Job: map 100% reduce 0% 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://${your-bucket-name}/1G-input oss://${your-bucket-name}/1G-output成功した場合の出力例:
18/10/28 21:39:00 INFO terasort.TeraSort: starting ... 18/10/28 21:39:02 INFO mapreduce.JobSubmitter: number of splits:100 18/10/28 21:39:02 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1540728986531_0006 18/10/28 21:39:02 INFO impl.YarnClientImpl: Submitted application application_1540728986531_0006 18/10/28 21:39:02 INFO mapreduce.Job: The url to track the job: http://cdh-master:8088/proxy/application_1540728986531_0006/ 18/10/28 21:39:02 INFO mapreduce.Job: Running job: job_1540728986531_0006 18/10/28 21:39:09 INFO mapreduce.Job: Job job_1540728986531_0006 running in uber mode : false 18/10/28 21:39:09 INFO mapreduce.Job: map 0% reduce 0% 18/10/28 21:39:17 INFO mapreduce.Job: map 1% reduce 0% 18/10/28 21:39:19 INFO mapreduce.Job: map 2% reduce 0% 18/10/28 21:39:20 INFO mapreduce.Job: map 3% reduce 0% ... 18/10/28 21:42:50 INFO mapreduce.Job: map 100% reduce 75% 18/10/28 21:42:53 INFO mapreduce.Job: map 100% reduce 80% 18/10/28 21:42:56 INFO mapreduce.Job: map 100% reduce 86% 18/10/28 21:42:59 INFO mapreduce.Job: map 100% reduce 92% 18/10/28 21:43:02 INFO mapreduce.Job: map 100% reduce 98% 18/10/28 21:43:05 INFO mapreduce.Job: map 100% reduce 100% ^@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 ...
テストが成功した場合、設定は有効です。