基於CDH版本5.13.3實現原生版Spark叢集及問題記錄
基於CDH版本5.13.3實現Spark叢集
1. 安裝背景
由於部門及已上專案使用的是CDH版本大資料平臺,為了充分更好使用Spark叢集Spark引擎運算,解決基於CDH版本下可支援3種大資料運算分析方式Hive on MR、Hive on Spark和Spark Sql。
2. 安裝環境
2.1. 硬體規劃
CPU | 實體記憶體 | 磁碟儲存 | 節點 |
1核X2顆 Intel Core Processor 2295MHZ (Haswell, no TSX) | 8GB | 80G | 192.17.10.136 |
1核X2顆 Intel Core Processor 2295MHZ (Haswell, no TSX) | 8GB | 80G | 192.17.10.138 |
1核X2顆 Intel Core Processor 2295MHZ (Haswell, no TSX) | 8GB | 80G | 192.17.10.139 |
2.2. 軟體規劃
類別 | 軟體清單 | 備註 |
作業系統 | CentOS Linux release 77.2.1511 | |
大資料平臺 | CDH5.13.1 Hadoop2.6.0 Spark1.6.0 Java1.7.0.9 MySql 5.7.21 Hive:1.1.0 Scala2.10.5 HBase HDFS … |
2.3. 目錄規劃
l 原生Spark安裝目錄:/opt/cdh5/spark-1.6.0
l CDH相關安裝目錄:/opt/cloudera/parcels/CDH
l MySql安裝目錄:
/usr/bin/mysql
/usr/lib64/mysql
/usr/share/mysql
/usr/share/man/man1/mysql.1.gz
3. 安裝步驟
3.1. 環境配置
由於本次是基於已有CDH環境下,增加安裝原生版本Spark安裝,所以操作所需要的:
免密配置、防火牆、主機名配置、主機與IP靜態繫結、修改vm.swappiness引數、Oracle JDK1.7和Mysql安裝配置等都已完成了,所以本次安裝只需安裝配置原生Spark即可。
3.2. 介質準備
l Spark1.6.0介質提供有原始碼和預編譯好的兩種,本次我選擇的是用後者。
下載地址連結:
l 如果選擇是原始碼編譯方式,則需要下載Maven3.3.3以上版本以及需要保證編譯節點伺服器可聯公網。
下載Maven連結:
注:統一下載在/opt目錄
3.3. Spark安裝
1、 建立目錄
mkdir -p /opt/cdh5
mkdir –p /opt/service/maven3.3.3
2、 解壓介質
sudo tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz
mv spark-1.6.0-bin-hadoop2.6 /opt/cdh5/spark-1.6.0
sudo chown -R root:root spark-1.6.0
sudo tar -zxvf apache-maven-3.3.3-bin.tar.gz
mv apache-maven-3.3.3 /opt/service/maven3.3.3/
sudo chown -R root:root apache-maven-3.3.3
sudo tar -zxvf scala-2.10.7.tgz
mv scala-2.10.7 /opt/
sudo chown -R root:root scala-2.10.7
3、 配置環境變數
1)、vi /etc/profile新增如下內容
#MAVEN
exportMAVEN_HOME=/opt/service/maven-3.3.3/apache-maven-3.3.3
exportPATH=$MAVEN_HOME/bin:$PATH
#scala
exportSCALA_HOME=/opt/scala-2.10.7
exportPATH=$SCALA_HOME/bin:$PATH
2)、vi /opt/cdh5/spark-1.6.0/conf/spark-env.sh檔案
因原生版本spark下配置檔案安裝後沒有spark-env.sh檔案,需要從模板檔案複製一個出來,即:cp spark-env.sh.template spark-env.sh
新增如下內容:
export JAVA_HOME=/usr/java/jdk1.7.0_79
export SCALA_HOME=/opt/scala-2.10.7
export HADOOP_CONF_DIR=/etc/hadoop/conf
exportHADOOP_HOME=/opt/cloudera/parcels/CDH-5.13.3-1.cdh5.13.3.p0.2/lib/hadoop
export SPARK_HOME=/opt/cdh5/spark-1.6.0
exportHIVE_HOME=/opt/cloudera/parcels/CDH-5.13.3-1.cdh5.13.3.p0.2/lib/hive
exportHBASE_HOME=/opt/cloudera/parcels/CDH-5.13.3-1.cdh5.13.3.p0.2/lib/hbase
exportZOOKEEPER_HOME=/opt/cloudera/parcels/CDH-5.13.3-1.cdh5.13.3.p0.2/lib/zookeeper
export SPARK_MASTER_IP=192.17.10.136
exportSPARK_MASTER_PORT=7099
export SPARK_MASTER_WEBUI_PORT=8099
export SPARK_WORKER_CORES=2
export SPARK_WORKER_MEMORY=2g
#export SPARK_EXECUTOR_MEMORY=128M
#export SPARK_DRIVER_MEMORY=4096M
export SPARK_WORKER_PORT=7098
export SPARK_WORKER_WEBUI_PORT=8091
export SPARK_WORKER_INSTANCES=2
exportSPARK_WORKER_DIR=/opt/cdh5/spark-1.6.0/data/tmp
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export JRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_LIBRARY_PATH/lib:$HADOOP_HOME/lib:$HBASE_HOME/lib:$HIVE_HOME/lib:$SCALA_HOME/lib:$SPARK_HOME/lib:$ZOOKEEPER_HOME/lib:$SCALA_HOME/lib:$SPARK_HOME/lib:$JRE_HOME/lib
注意埠,需重新定義標紅部分項的預設埠,確保與已存在CDH的spark所用埠不衝突。
3)、配置spark-defaults.conf檔案:不配置此選項執行spark服務還是在local模式下執行。
因原生版本spark下配置檔案安裝後沒有spark-defaults.conf檔案,需要從模板檔案複製一個出來,即:cp spark-defaults.conf.template spark-defaults.conf
新增spark.master spark://192.17.10.136:7099
注意:此埠需要和spark-env.sh中引數項SPARK_MASTER_PORT=7099一致。
4)、編輯slaves檔案,新增slaves節點
cct-bigdata-2
cct-bigdata-3
此處可用主機名或IP地址都可。
4、 相關檔案配置
因需要訪問hive,所以需要把hive-site.xml檔案複製到spark安裝目錄下使用。即:
scp -r /opt/cloudera/parcels/CDH/lib/hive/conf/[email protected] cct-bigdata-1:/opt/cdh5/spark-1.6.0/conf
此處還需新增,如配置為空或不新增會導致hive的程式使用了NULL而非空字串做密碼,但我們的登入hive元資料庫設定了密碼。
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>[email protected]#</value>
<description>password to use againstmetastore database</description>
</property>
同理還需複製訪問Mysql的驅動jar包,否則訪問時會異常。即找到已下載好的jar包:
5、 同步到其它節點
scp -r /opt/cdh5/spark-1.6.0/ [email protected] cct-bigdata-2:/opt/cdh5/
scp -r /opt/cdh5/spark-1.6.0/ [email protected] cct-bigdata-3:/opt/cdh5/
6、 啟動&關閉Spark叢集
啟動服務
sbin/start-master.sh
sbin/start-slaves.sh
或sbin/start-all.sh
啟動正常日誌會顯示為:
登入到web頁面檢視:
關閉服務
sbin/stop-all.sh
7、 重啟Hive
登入到CM下,找到hive服務,點選重啟即可。
如hive未重啟,則會在執行spark-shell或spark-sql報
3.4. 啟動驗證
l 啟動./bin/Spark-shell,正常情況下應該是類似如下截圖:
在scala語言驗證可否正常連線hive倉庫:
scala>sqlContext.sql("use default")
scala>sqlContext.sql("show tables").take(10)
scala>sqlContext.sql("show tables").collect().foreach(println)
scala> sqlContext.sql("select * fromword").collect().foreach(println)
18/06/2816:58:29 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 0.0, whose taskshave all completed, from pool
[1,word100]
[2,word200]
[9,word900]
[10,word1000]
[11,word1100]
[11,word1100]
[11,word1100-mr]
[11,word1100-2]
[11,word1100-spa1]
[11,word1100-sp3]
[3,word300]
[3,word300]
[3,word300]
[4,word400]
[5,word500]
[6,word600]
[7,word700]
[8,word800]
l 啟動./bin/Spark-sql,正常情況下應該是類似如下截圖:
在spark-sql CL可否正常連線hive倉庫:
spark-sql>select * from word;
18/06/2817:03:57 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 0.0, whose taskshave all completed, from pool
1 word100
2 word200
9 word900
10 word1000
11 word1100
11 word1100
11 word1100-mr
11 word1100-2
11 word1100-spa1
11 word1100-sp3
3 word300
3 word300
3 word300
4 word400
5 word500
6 word600
7 word700
8 word800
18/06/2817:03:57 INFO CliDriver: Time taken: 5.527 seconds, Fetched 18 row(s)
spark-sql> select count(*) from word;
4. 處理問題
安裝過程中需注意下面幾個問題:
1)、記憶體配置
原因是:
上述三項記憶體配置不對所致,後來經過多次嘗試修正,最終改正為:
2)、不能訪問hive metastore
此類問題後來經過分析排查,發現由於下面服務、配置有異常、hive-site.xml和訪問mysql驅動包cp到spark下的lib目錄,就會導致spark-shell或spark-sql啟動失敗。
注意檢查:
spark裡面hive-site.xml配置hive.metastore.uris有沒有,如截圖:
hive的metastore服務開啟沒有;
hive的thrift服務;
在CDH版本下,spark全部配置部署完成後,務必需要重啟hive服務。這樣確保spark下相關hive配置生效。