HDP和Ambari
HDP(Hortonworks Data Platform)是由Hortonworks發行的大資料平台,裡面包含了Hadoop、Hive、HBase等很多開源元件,目前有不少使用者直接使用HDP版本的Hadoop。Ambari是一個分布式工具,可以安裝、管理,監控HDP平台。HDP與Ambari的關系,可以類比CDH與CM的關系。
目前,HDP的最新版本是3.0.1,裡面的Hadoop版本是3.1.1,天然支援了OSS。本文主要介紹如何使低版本的HDP(以HDP2.6.1.0為例)支援讀寫OSS。
HDP2.6.1.0支援讀寫OSS
HDP2.6.1.0中,Hadoop的版本是2.7.3,還不支援OSS(目前Apache Hadoop支援OSS的最低版本是2.9.1)。
搭建HDP叢集
通過官方文檔,利用Ambari搭建HDP2.6.1.0的叢集(也可以不用Ambari,自行搭建)。

下面的步驟需要在所有的HDP節點執行
下載下傳支援包
http://gosspublic.alicdn.com/hadoop-spark/hadoop-oss-hdp-2.6.1.0-129.tar.gz下載下傳這個版本的HDP支援OSS的支援包并解壓,裡面的檔案是:
[root@hdp-master ~]# ls -lh hadoop-oss-hdp-2.6.1.0-129
total 1.9M
-rw-r--r-- 1 501 games 114K Sep 26 15:31 aliyun-java-sdk-core-3.4.0.jar
-rw-r--r-- 1 501 games 770K Sep 26 15:31 aliyun-java-sdk-ecs-4.2.0.jar
-rw-r--r-- 1 501 games 211K Sep 26 15:31 aliyun-java-sdk-ram-3.0.0.jar
-rw-r--r-- 1 501 games 13K Sep 26 15:31 aliyun-java-sdk-sts-3.0.0.jar
-rw-r--r-- 1 501 games 550K Sep 26 15:31 aliyun-sdk-oss-3.4.1.jar
-rw-r--r-- 1 501 games 67K Sep 26 15:30 hadoop-aliyun-2.7.3.2.6.1.0-129.jar
-rw-r--r-- 1 501 games 150K Sep 26 15:31 jdom-1.1.jar
這個支援包是根據
HDP2.6.1.0中Hadoop的版本,并打了Apache Hadoop對OSS支援的patch後編譯得到,其他HDP2的小版本對OSS的支援後續也将陸續提供。
部署
解壓縮後,将hadoop-aliyun-2.7.3.2.6.1.0-129.jar放到/usr/hdp/current/hadoop-client/目錄裡面;其餘的jar檔案放到/usr/hdp/current/hadoop-client/lib/裡面。
其中/usr/hdp/current是目前HDP的安裝路徑,根據部署環境的不同而不同,使用者自己可以做調整
放好之後,目錄結構如下所示
[root@hdp-master ~]# ls -lh /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar
-rw-r--r-- 1 root root 67K Oct 28 20:56 /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar
[root@hdp-master ~]# 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 550K 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
增加OSS配置
通過Ambari來增加配置(對于沒有用Ambari管理的叢集,可以通過修改core-site.xml來達到)
這裡以Ambari為例,需要增加如下配置:
配置項 | 值 | 說明 |
---|---|---|
fs.oss.endpoint | 如 oss-cn-zhangjiakou-internal.aliyuncs.com | 要連接配接的endpoint |
fs.oss.accessKeyId | access key id | |
fs.oss.accessKeySecret | access key secret | |
fs.oss.impl | org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem | hadoop oss檔案系統實作類,目前固定為這個 |
fs.oss.buffer.dir | /tmp/oss | 臨時檔案目錄 |
fs.oss.connection.secure.enabled | false | 是否enable https, 根據需要來設定,enable https會影響性能 |
fs.oss.connection.maximum | 2048 | 與oss的連接配接數,根據需要設定 |
相關參數的解釋可以在
這裡找到
重新開機叢集,驗證讀寫OSS
增加配置後,根據Ambari提示重新開機叢集,重新開機後,可以測試
# 測試寫
hadoop fs -mkdir oss://{your-bucket-name}/hadoop-test
# 測試讀
hadoop fs -ls oss://{your-bucket-name}/
為了能夠運作MAPREDUCE任務,還需要更改hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz包的内容(如果是TEZ類型的作業,則修改hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/tez/tez.tar.gz即可,其他類型的作業以此類推),将OSS的支援放進去,執行如下指令
[root@hdp-master ~]# sudo su hdfs
[hdfs@hdp-master root]$ cd
[hdfs@hdp-master ~]$ hadoop fs -copyToLocal /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz .
[hdfs@hdp-master ~]$ hadoop fs -rm /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz
[hdfs@hdp-master ~]$ cp mapreduce.tar.gz mapreduce.tar.gz.bak
[hdfs@hdp-master ~]$ tar zxf mapreduce.tar.gz
[hdfs@hdp-master ~]$ cp /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar hadoop/share/hadoop/tools/lib/
[hdfs@hdp-master ~]$ cp /usr/hdp/current/hadoop-client/lib/aliyun-* hadoop/share/hadoop/tools/lib/
[hdfs@hdp-master ~]$ cp /usr/hdp/current/hadoop-client/lib/jdom-1.1.jar hadoop/share/hadoop/tools/lib/
[hdfs@hdp-master ~]$ tar zcf mapreduce.tar.gz hadoop
[hdfs@hdp-master ~]$ hadoop fs -copyFromLocal mapreduce.tar.gz /hdp/apps/2.6.1.0-129/mapreduce/
測試teragen和terasort
[hdfs@hdp-master ~]$ 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
...
[hdfs@hdp-master ~]$ 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
...