HDP(Hortonworks Data Platform)是由Hortonworks發行的巨量資料平台,包含了Hadoop、Hive、HBase等開源組件。HDP 3.0.1版本中的Hadoop 3.1.1版本已支援OSS,但是低版本的HDP不支援OSS。本文以HDP 2.6.1.0版本為例,介紹如何配置HDP 2.6版本支援讀寫OSS。
前提條件
已搭建HDP 2.6.1.0的叢集。如果未搭建HDP 2.6.1.0叢集,您可以通過以下方式搭建:
- 使用Ambari搭建HDP 2.6.1.0的叢集。
- 不使用Ambari,自行搭建HDP 2.6.1.0叢集。
配置步驟
- 下載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/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。這裡以Ambari為例,需要增加如下配置。
參數 說明 fs.oss.endpoint 填寫需要串連的OSS的Endpoint。 例如:oss-cn-zhangjiakou-internal.aliyuncs.com
fs.oss.accessKeyId 填寫OSS的AccessKeyId。 fs.oss.accessKeySecret 填寫OSS的AccessKeySecret。 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。
- 執行以下命令測試讀。
sudo hadoop fs -ls oss://${your-bucket-name}/
- 執行以下命令測試寫。
sudo hadoop fs -mkdir oss://${your-bucket-name}/hadoop-test
如果測試可以讀寫OSS,則配置成功。如果無法讀寫OSS,請檢查配置。
- 執行以下命令測試讀。
- 為了能夠運行MapReduce任務,執行以下命令將OSS支援包移動到hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz壓縮包下。說明 本文以MapReduce類型的作業為例。其他類型的作業的壓縮包可參考以下操作修改。例如,如果是TEZ類型的作業,則將OSS支援包移動到hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/tez/tez.tar.gz壓縮包下。
sudo su hdfs sudo cd sudo hadoop fs -copyToLocal /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz sudo hadoop fs -rm /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz sudo cp mapreduce.tar.gz mapreduce.tar.gz.bak sudo tar zxf mapreduce.tar.gz sudo cp /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar hadoop/share/hadoop/tools/lib/ sudo cp /usr/hdp/current/hadoop-client/lib/aliyun-* hadoop/share/hadoop/tools/lib/ sudo cp /usr/hdp/current/hadoop-client/lib/jdom-1.1.jar hadoop/share/hadoop/tools/lib/ sudo tar zcf mapreduce.tar.gz hadoop sudo 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://{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://{bucket-name}/1G-input oss://{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 ...
測試成功,配置生效。