tidb1.0開始支援spark,有個元件tiSpark,不過目前隻支援spark2.1版本。是以為了啟用tiSpark,還需搭建spark叢集。
在官網下載下傳位址http://spark.apache.org/downloads.html上,我找到了with hadoop的版本。如下圖:

下載下傳位址:https://d3kbcqa49mib13.cloudfront.net/spark-2.1.1-bin-hadoop2.7.tgz
目前手中有4台資源
決定選用其中三台搭建spark叢集,一台master,兩台slave
連結如下:
域名
IP
主從關系
tidb1 192.168.122.16 Master
tidb2 192.168.122.18 Slave
tidb3 192.168.122.19 Slave
順便說一下,centos7的hostname設定和之前版本已經不一樣了。現在隻需輸入以下指令指定
hostnamectl set-hostname name
name就是你需要指定的hostname
将壓縮包下載下傳後,分别上傳至三台server的/usr/local目錄下,并解壓
cd /usr/localtar zxvf spark-2.1.1-bin-hadoop2.7.tgz
準備
在搭建叢集環境之前,首先要做的事情是讓這三台機器可以互相免密登陸
編輯/etc/hosts
編輯三台server的/etc/hosts
編輯後内容如下:
#127.0.0.1 localhost tidb1 localhost4 localhost4.localdomain4#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6#216.176.179.218 mirrorlist.centos.org192.168.122.16 tidb1192.168.122.18 tidb2192.168.122.19 tidb3
注意:第一行一定要注釋,我在安裝過程中,spark啟動後,日志檔案報錯,就是因為它沒有去找我下面指定的ip和域名,而是老是去連接配接127.0.0.1
然後讓它們生效
source /etc/hosts
安裝ssh和rsync
可以通過下面指令檢視是否已經安裝:
rpm -qa|grep openssh
rpm -qa|grep rsync
如果沒有安裝ssh和rsync,可以通過下面指令進行安裝:
yum install ssh
yum install rsync
service sshd restart
配置Master無密碼登入所有Salve
tidb1節點的配置操作
以下是在tidb1節點的配置操作。
1)在tidb1節點上生成密碼對,在tidb1節點上執行以下指令:
ssh-keygen -t rsa -P ''
生成的密鑰對:id_rsa和id_rsa.pub,預設存儲在"/root/.ssh"目錄下。
2)接着在tidb1節點上做如下配置,把id_rsa.pub追加到授權的key裡面去
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3)修改ssh配置檔案"/etc/ssh/sshd_config"的下列内容,将以下内容的注釋去掉
# 啟用 RSA 認證RSAAuthentication yes
# 啟用公鑰私鑰配對認證方式PubkeyAuthentication yes
# 公鑰檔案路徑(和上面生成的檔案同)AuthorizedKeysFile .ssh/authorized_keys
4)重新開機ssh服務,才能使剛才設定有效。
service sshd restart
5)驗證無密碼登入本機是否成功
ssh tidb1
6)接下來的就是把公鑰複制到所有的Slave機器上。使用下面的指令進行複制公鑰:
scp /root/.ssh/id_rsa.pub root@tidb2:/root/scp /root/.ssh/id_rsa.pub root@tidb3:/root/
tidb2節點的配置操作
1)在"/root/"下建立".ssh"檔案夾,如果已經存在就不需要建立了
mkdir /root/.ssh
2)将tidb1的公鑰追加到tidb2的授權檔案"authorized_keys"中去
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
4)重新開機ssh服務,才能使剛才設定有效
5)切換到tidb1使用ssh無密碼登入tidb2
ssh tidb2
6)把"/root/"目錄下的"id_rsa.pub"檔案删除掉
rm –r /root/id_rsa.pub
tidb3節點的配置操作
2)将tidb1的公鑰追加到tidb3的授權檔案"authorized_keys"中去
5)切換到tidb1使用ssh無密碼登入tidb3
ssh tidb3
配置所有Slave無密碼登入Master
1)建立tidb2自己的公鑰和私鑰,并把自己的公鑰追加到"authorized_keys"檔案中,執行下面指令
ssh-keygen -t rsa -P ''cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
2)将tidb2節點的公鑰"id_rsa.pub"複制到tidb1節點的"/root/"目錄下
scp /root/.ssh/id_rsa.pub root@tidb1:/root/
1)将tidb2的公鑰追加到tidb1的授權檔案"authorized_keys"中去
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
2)删除tidb2複制過來的"id_rsa.pub"檔案
配置完成後測試從tidb2到tidb1無密碼登入
1)建立tidb3自己的公鑰和私鑰,并把自己的公鑰追加到"authorized_keys"檔案中,執行下面指令:
2)将tidb3節點的公鑰"id_rsa.pub"複制到tidb1節點的"/root/"目錄下
tidb1節點的配置操作。
1)将tidb3的公鑰追加到tidb1的授權檔案"authorized_keys"中去
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
2)删除tidb3複制過來的"id_rsa.pub"檔案
配置完成後測試從tidb3到tidb1無密碼登入。
spark叢集搭建
進入到Spark安裝目錄
cd /usr/local/spark-2.1.1-bin-hadoop2.7
進入conf目錄并重命名并修改spark-env.sh.template檔案
cd conf/
mv spark-env.sh.template spark-env.sh
vim spark-env.sh
在該配置檔案中添加如下配置
export JAVA_HOME=/usr/local/jdk18121export SPARK_MASTER_IP=tidb1export SPARK_MASTER_PORT=7077
儲存退出
重命名并修改slaves.template檔案
mv slaves.template slaves
vi slaves
在該檔案中添加子節點所在的位置(Worker節點)
tidb2
tidb3
配置環境變量:
vim /etc/profile#set spark envexport SPARK_HOME=/usr/local/spark-2.1.1-bin-hadoop2.7export PATH=$PATH:$SPARK_HOME/binsource /etc/profile
将配置好的Spark拷貝到其他節點上
cd /usr/localscp -r spark-2.1.1-bin-hadoop2.7 root@tidb2:$PWDscp -r spark-2.1.1-bin-hadoop2.7 root@tidb3:$PWD
Spark叢集配置完畢,目前是1個Master,2個Worker,在tidb1上啟動Spark叢集
/usr/local/spark-2.1.1-bin-hadoop2.7/sbin/start-all.sh
啟動後,控制台顯示如下
圖2.png
在浏覽器中通路tidb1:8080端口,可見啟動後情況,如下圖
圖3.png
關閉叢集可用如下指令
/usr/local/spark-2.1.1-bin-hadoop2.7/sbin/stop-all.sh
總結
簡單介紹一下Spark叢集的工作模式
首先啟動一個Master(我這裡是tidb1),然後Master和各個Worker(我這裡是tidb2和tidb3)進行通信,其中真正幹活的是Worker下的Executor。
我們還需要有一個用戶端,這個用戶端叫做Driver。它首先和Master建立通信,然後Master負責資源配置設定,接着讓Worker啟動Executor,最後讓Executor和Driver進行通信。
效果圖如下: