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/local
tar 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.org
192.168.122.16 tidb1
192.168.122.18 tidb2
192.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
3)修改ssh配置文件"/etc/ssh/sshd_config"的下列內容,將以下內容的注釋去掉
# 啟用 RSA 認證
RSAAuthentication yes
# 啟用公鑰私鑰配對認證方式
PubkeyAuthentication yes
# 公鑰文件路徑(和上面生成的文件同)
AuthorizedKeysFile .ssh/authorized_keys
4)重啟ssh服務,才能使剛才設置有效
service sshd restart
5)切換到tidb1使用ssh無密碼登錄tidb2
ssh tidb2
6)把"/root/"目錄下的"id_rsa.pub"文件刪除掉
rm –r /root/id_rsa.pub
tidb3節點的配置操作
1)在"/root/"下創建".ssh"文件夾,如果已經存在就不需要創建了
mkdir /root/.ssh
2)將tidb1的公鑰追加到tidb3的授權文件"authorized_keys"中去
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
3)修改ssh配置文件"/etc/ssh/sshd_config"的下列內容,將以下內容的注釋去掉
# 啟用 RSA 認證
RSAAuthentication yes
# 啟用公鑰私鑰配對認證方式
PubkeyAuthentication yes
# 公鑰文件路徑(和上面生成的文件同)
AuthorizedKeysFile .ssh/authorized_keys
4)重啟ssh服務,才能使剛才設置有效
service sshd restart
5)切換到tidb1使用ssh無密碼登錄tidb3
ssh tidb3
6)把"/root/"目錄下的"id_rsa.pub"文件刪除掉
rm –r /root/id_rsa.pub
配置所有Slave無密碼登錄Master
tidb2節點的配置操作
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/
tidb1節點的配置操作
1)將tidb2的公鑰追加到tidb1的授權文件"authorized_keys"中去
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
2)刪除tidb2復制過來的"id_rsa.pub"文件
rm –r /root/id_rsa.pub
配置完成后測試從tidb2到tidb1無密碼登錄
ssh tidb1
tidb3節點的配置操作
1)創建tidb3自己的公鑰和私鑰,并把自己的公鑰追加到"authorized_keys"文件中,執行下面命令:
ssh-keygen -t rsa -P ''
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
2)將tidb3節點的公鑰"id_rsa.pub"復制到tidb1節點的"/root/"目錄下
scp /root/.ssh/id_rsa.pub root@tidb1:/root/
tidb1節點的配置操作。
1)將tidb3的公鑰追加到tidb1的授權文件"authorized_keys"中去
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
2)刪除tidb3復制過來的"id_rsa.pub"文件
rm –r /root/id_rsa.pub
配置完成后測試從tidb3到tidb1無密碼登錄。
ssh 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/jdk18121
export SPARK_MASTER_IP=tidb1
export SPARK_MASTER_PORT=7077
保存退出
重命名并修改slaves.template文件
mv slaves.template slaves
vi slaves
在該文件中添加子節點所在的位置(Worker節點)
tidb2
tidb3
保存退出
配置環境變量:
vim /etc/profile
#set spark env
export SPARK_HOME=/usr/local/spark-2.1.1-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
source /etc/profile
將配置好的Spark拷貝到其他節點上
cd /usr/local
scp -r spark-2.1.1-bin-hadoop2.7 root@tidb2:$PWD
scp -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
啟動后,控制臺顯示如下
在瀏覽器中訪問tidb1:8080端口,可見啟動后情況,如下圖
關閉集群可用如下命令
/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進行通信。
效果圖如下: