1. 程式人生 > >基於CDH版本5.13.3實現原生版Spark叢集及問題記錄

基於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

注意埠,需重新定義標紅部分項的預設埠,確保與已存在CDHspark所用埠不衝突。

   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配置生效。

5.     效能驗證

5.1.  測驗報告