背景:已有CDH5.13.1,集成CDS 2.3.4(Apache Spark 2.3.4)。
1. 環境:
- 操作系統:CentOS7.3
- CM:CM-5.13.1
- CDH:CDH5.13.1
- JDK:1.8.0_151
- Scala:Scala 2.11.12
2. 集成步驟:
2.1 環境準備
按照官方文檔要求安裝好所有的軟件:
- CDH版本CDH 5.9 +
- CM版本CM 5.11+
- Scala版本Scala-2.11
- Python版本:python2.7+ or Python3.4+
- JDK版本:JDK8
2.2 下載安裝包
下載CDS包個parcels包:
[root@vm CDS2.3.4]# wget http://archive.cloudera.com/spark2/csd/SPARK2_ON_YARN-2.3.0.cloudera4.jar
[root@vm CDS2.3.4]# wget http://archive.cloudera.com/spark2/parcels/2.3.0.cloudera4/manifest.json
[root@vm CDS2.3.4]# wget http://archive.cloudera.com/spark2/parcels/2.3.0.cloudera4/SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel
[root@vm CDS2.3.4]# wget http://archive.cloudera.com/spark2/parcels/2.3.0.cloudera4/SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel.sha1
2.3 拷貝CSD文件包到
拷貝CSD文件包到/opt/cloudera/csd/路徑下,修改文件的屬主爲cloudera-scm:cloudera-scm,屬性644。
[root@vm ~]# cd /opt/cloudera/csd/
[root@vm csd]# ls -ltr
-rw-r--r--. 1 root root 19037 Apr 2 16:37 SPARK2_ON_YARN-2.3.0.cloudera4.jar
[root@vm csd]#
拷貝Parcel包到/opt/cloudera/parcel-repo路徑下,修改文件的屬主爲cloudera-scm:cloudera-scm,屬性644。
[root@vm parcel-repo]# pwd
/opt/cloudera/parcel-repo
[root@vm parcel-repo]# ls -ltr
-rw-r--r--. 1 cloudera-scm cloudera-scm 191904064 Apr 2 16:37 SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel
-rw-r--r--. 1 cloudera-scm cloudera-scm 41 Apr 2 16:37 SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel.sha
-rw-r--r--. 1 cloudera-scm cloudera-scm 5171 Apr 2 16:37 manifest.json
[root@vm parcel-repo]#
2.4 重啓CM Server
[root@vm ~]# /opt/cm-5.13.1/etc/init.d/cloudera-scm-server restart
2.5 激活SPARK2
登錄CM頁面 -> 主機 -> Parcel,已經可以看到多了SPARK2選項,如果沒有,點擊右上角的檢查新Parcel,頁面會刷新出來。依次點擊SPARK2後面的分配 -> 激活,完成激活。
2.6 添加SPARK2到集羣中
2.6.1 集羣添加SPARK2服務
CM控制檯導航 -> 主機 -> 點擊Cluster名稱 -> 操作 -> 添加服務 -> 給Spark2打勾,繼續。
2.6.2 爲Spark2服務選擇一種依賴:
- HDFS,Hive,YARN,ZooKeeper:如果集羣中有裝Hive服務並且希望從Spark應用程序訪問Hive表,選這個,將Hive作爲依賴加入,同時配置Hive客戶端對Spark應用程序永久有效。後面再爲Spark2分配角色時,將gateway添加到每臺主機。
- HDFS,YARN,ZooKeeper:如果不需要hive服務,選最後一個
2.6.3 添加gateway角色
在角色分配時,爲每臺主機添加gateway角色。
點擊Finish之後,按照控制檯的提示重啓依賴關係服務。
至此,Spark2安裝完成。
3. 配置CDH集羣環境默認Spark版本爲Spark2
因爲我們的集羣安裝了CDH內置的Spark1,繼而集成了Spark2,現在集羣上有兩個版本的Spark存在。環境變量默認pyspark/spark-shell都是指向Spark1,我們可以直接使用pyspark2/spark2-shell來執行Spark2,使用時注意區分。也可以使用Cloudera官方提供的腳本來修改系統的環境配置默認指向Spark2.
4. 配置Hive on Spark
Hive默認使用MapReduce作爲執行引擎,即Hive on mr。實際上,Hive還可以使用Tez和Spark作爲其執行引擎,分別爲Hive on Tez和Hive on Spark。由於MapReduce中間計算均需要寫入磁盤,而Spark是放在內存中,所以總體來講Spark比MapReduce快很多。因此,Hive on Spark也會比Hive on mr快。我們設置Hive的執行引擎設置爲Spark。
Spark運行模式分爲三種1、Spark on YARN 2、Standalone Mode 3、Spark on Mesos。
Hive on Spark默認支持Spark on YARN模式,因此我們選擇Spark on YARN模式。Spark on YARN就是使用YARN作爲Spark的資源管理器。分爲Cluster和Client兩種模式。
4.1 配置Hive依賴
CM控制檯 -> Hive -> Configuration -> 搜索Spark On YARN Service -> 在出來的結果Spark On YARN Service上選擇Spark(CDH5.13.1默認爲Spark,不需要修改)。
4.2 修改Spark2配置
CM控制檯 -> Spark2 -> Instances -> 在HiveServer2運行的主機上添加一個Spark gateway角色。之後根據CM頁面要求重新部署服務,重啓各服務。
4.3 配置Hive執行引擎
CDH上的Hive支持兩種執行引擎:MapReduce和Spark。要配置Hive的執行引擎,有兩種方法:
① 在Hive 客戶端執行命令前設置執行引擎
Beeline - 在每個查詢前設置執行引擎:set hive.execution.engine=engine(spark/mr,默認是mr)。例如:
#設置Hive執行引擎爲spark
set hive.execution.engine=spark;
# 查看現在在run的執行引擎
set hive.execution.engine;
② 通過CM控制檯全局修改Hive的執行引擎,會全局修改Hive的執行引擎(官方不推薦)
CM控制檯 -> Hive -> Configuration -> Default Execution Engine -> Spark
配置Hive on Spark2:
https://www.cloudera.com/documentation/enterprise/5-14-x/topics/admin_hos_oview.html
2. 配置屬性
3. 配置Hive
4. 配置Executor Memory Size
爲了讓Hive工作在spark上,你必須在HiveServer2所在機器上部署spark gateway角色。另外,hive on spark不能讀取spark的配置,也不能提交spark作業。
在使用過程中,需要手動設置如下命令,以便讓之後的查詢都能使用spark引擎。
set hive.execution.engine=spark;
其他注意事項:
- CSD(Apache Spark)只支持使用parcel機制安裝,且CM不支持在同一集羣中同時使用parcels和packages。如果CDH是基於packages安裝的,則無法安裝CDS;
- CM管理的同一cluster支持內置的Spark1.0和集成的Spark2.X同時運行,但不能存在多個版本的Spark2.X(CDS);
- CDS Maven倉庫:CDS Maven Repository;
- SPARK2 History Server端口號是18089(CDH內置的Spark1端口爲18088);
- 配置spark用戶組可以訪問hive metastore:CM -> Hive -> Confguration -> 搜索hadoop.proxyuser.hive.groups -> 點擊+號,輸入sparkers組名並保存 -> 重啓Hive服務。