一.部署規劃
1.
假設有3臺虛擬機,主機名分別是spark-master,spark-worker1,spark-worker2,安裝操作系統(雲服務商已安裝中標麒麟7.4),分配IP
172.16.200.23 spark-master
172.16.200.24 spark-worker1
172.16.200.25 spark-worker2
2.
假設spark、java、scala的安裝目錄均爲/opt,將對應文件壓縮包放入文件夾,然後解壓。
則:
spark家目錄: /opt/spark/spark-2.4.3-bin-hadoop2.7
java家目錄: /opt/jdk/jdk1.8.0_121
scala家目錄: /opt/scala/scala-2.12.9
(目錄不同需修改配置文件地址,java、scala解壓即可,不需要安裝,以下步驟配置spark)
二.配置spark集羣,用戶爲root
1.
在3臺機器上關閉防火牆
systemctl stop firewalld.service
systemctl disable firewalld.service
2.
修改3臺機器設置主機名hostname
(1)spark-master機器
hostnamectl set-hostname spark-master
(2)spark-worker1機器
hostnamectl set-hostname spark-worker1
(3)spark-worker2機器
hostnamectl set-hostname spark-worker2
3.
在3臺機器的/etc/hosts文件中 添入以下主機名與IP對應關係
(不修改主機名則不需要添加)
172.16.200.23 spark-master
172.16.200.24 spark-worker1
172.16.200.25 spark-worker2
4.
測試集羣內機器是否可相互ping通
ping spark-master
ping spark-worker1
ping spark-worker2
5.
3臺機器互相配置免密登錄
下面以root用戶免密登錄爲例,共3臺機器node1,node2,node3
node1
進入root家目錄下,執行
ssh-keygen -t rsa
點擊多次回車會產生 .ssh目錄。查看 .ssh 目錄,會發現它下面生成了兩個 id_rsa , id_rsa.pub文件,在節點1上將公鑰(id_rsa.pub)拷貝到其它節點,包括本機
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
6.
複製conf下的slaves-template 到當前,複製爲slaves。同樣spark-evn.sh.template,spark-defaults.conf.template 也複製爲spark-evn.sh,spark-defaults.conf
配置spark-env.sh,在文件中加入以下配置:
export JAVA_HOME=/opt/jdk/jdk1.8.0_121
export SCALA_HOME=/opt/scala/scala-2.12.9
export SPARK_HOME=/opt/spark/spark-2.4.3-bin-hadoop2.7
export SPARK_MASTER_IP=spark-master
(如不修改主機名爲spark-master,則將最後一行中的sprk-master修改爲對應IP)
配置spark-defaults.conf,在文件中添加
spark.driver.memory 3g
spark.driver.maxResultSize 1g
spark.executor.extraJavaOptions -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
#spark.driver.extraClassPath=/opt/packages/jars/uxdbjdbc-4.2.jar
#spark.executor.extraClassPath=/opt/packages/jars/uxdbjdbc-4.2.jar
#一般4-8g
spark.executor.memory 3g
#一般2-4個
spark.executor.cores 2
spark.executor.instances 15
spark.logConf false
spark.task.cpus 1
#一般爲總cpu核數的2~3 倍
spark.default.parallelism 70
配置slaves,在文件中加入master和worker的IP地址
spark-worker1
spark-worker2
(如果master不做worker,則需要把master對應ip註釋掉)
配置/etc/profile,在文件中添加
export JAVA_HOME=/opt/jdk/jdk1.8.0_121
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export SCALA_HOME=/opt/scala/scala-2.12.9
export SPARK_HOME=/opt/spark/spark-2.4.3-bin-hadoop2.7
export PATH=$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$PATH
並通過
source /etc/profile
使文件生效
7.
在spark-master通過scp命令拷貝jdk,scala,spark,/etc/profile到spark-worker1,spark-worker2機器上
(scp命令:scp -rf /etc/profiles worker ip地址:/etc)
8.
在spark-master機器上運行命令:進入spark的bin目錄,start-all.sh,啓動Spark,(stopt-all.sh,關閉Spark,)可在瀏覽器通過spark-master:8080訪問,如果master也作爲worker,則網頁上對應顯示有三臺worker.