Spark集群環境搭建——服務器環境初始化


Spark也是屬於Hadoop生態圈的一部分,需要用到Hadoop框架里的HDFS存儲和YARN調度,可以用Spark來替換MR做分布式計算引擎。

接下來,講解一下spark集群環境的搭建部署。

一、集群規划

我們這里使用三台Linux服務器來搭建一個Spark集群。各個組件的分布規划如下:

image

二、服務器環境初始化

系統初始化:

1、設置系統IP (三台機器都要設置)

每個人的環境都不一樣,根據自己的網絡環境,設置自己三台機器的ip,最好設置為靜態ip,不要每次都從DHCP獲取,避免ip發生變動。

我們這里三台機器的ip如下:

dev-spark-master-206:192.168.90.206
dev-spark-slave-171:192.168.90.171
dev-spark-slave-172:192.168.90.172
三台機器都各自設置好靜態ip
# dev-spark-master-206
# vi /etc/sysconfig/network-scripts/ifcfg-enp2s0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static  # 改為靜態ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp2s0
UUID=d7af5ebf-4755-4a35-bcd6-267ab7adbba6
DEVICE=enp2s0
ONBOOT=yes              # 開啟網卡
IPADDR=192.168.90.206   # 設置屬於自己網絡的靜態ip
NETMASK=255.255.255.0   # 設置掩碼
GATEWAY=192.168.90.1    # 設置網關
DNS1=202.96.128.166     # 設置DNS地址
DNS2=8.8.8.8            # 設置副DNS地址

重啟網絡

systemctl restart network

三台機器都要配置好ip,並確保可以上外網。

2、關閉系統防火牆 (三台機器都要設置)

# 先查看selinux狀態
[root@localhost ~]# getenforce
permissive
[root@localhost ~]# setenforce 0
# 修改selinux狀態為disabled
[root@localhost ~]# vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled  # 修改為disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
 

[root@localhost ~]#  關閉firewalld
# 查看當前狀態
[root@localhost ~]# systemctl status firewalld
# 關閉
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
# 清除iptables規則
[root@localhost ~]# iptables -F

3、更換yum源,可選 (三台機器一起設置)

# 這里使用aliyun的yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除yum緩存
yum clean all
yum makecache

4、安裝基礎軟件包 (三台機器一起設置)

yum install -y net-tools vim lrzsz wget tree lsof tcpdump bash-completion.noarch ntp zip unzip git lvm2
yum install -y gcc gcc-c++ libstdc++ make cmake curl bind-utils

5、設置hostname (三台機器一起設置)

我們三台機器的規划是:(可以根據自己的習慣,單獨命名)

dev-spark-master-206:192.168.90.206
dev-spark-slave-171:192.168.90.171
dev-spark-slave-172:192.168.90.172

所以依次設置主機名:

在第一台機器上,修改主機名

hostnamectl set-hostname dev-spark-master-206

第二台機器上,修改主機名

hostnamectl set-hostname dev-spark-slave-171

第三台機器上,修改主機名:

hostnamectl set-hostname dev-spark-slave-172

編輯hosts配置(三台機器都要配置)

三台機器都配置好IP之后,為了方便互相訪問,可以配置hosts配置,使用主機名來訪問。

# 編輯hosts文件,增加以下配置,根據自己的環境,修改為自己的ip和主機名。

# vim /etc/hosts
192.168.90.206  dev-spark-master-206
192.168.90.171  dev-spark-slave-171
192.168.90.172  dev-spark-slave-172

6、設置ssh免密登錄 (三台機器)

1) 在第一台機器上生成一對鑰匙,公鑰和私鑰

# 輸入命令,生成秘鑰
ssh-keygen -t rsa

image

當前用戶的宿主目錄下的.ssh目錄多了兩個文件,一個是私鑰,一個是公鑰

ll /root/.ssh/

image

2) 將公鑰拷貝給要免密碼登錄的機器

將本機生成的公鑰id_rsa.pub文件拷貝到另外兩台機器,就可以從另外兩台機器免密登錄本機了。

拷貝到dev-spark-slave-171上:

# ssh-copy-id root@dev-spark-slave-171

image

拷貝到dev-spark-slave-172上:

# ssh-copy-id root@dev-spark-slave-172
 
        

image

注意:

注意:
1.主機名和ip都可以(確保配置了主機名 ip的映射)
2.如果出現-bash: ssh-copy-id: command not found,說明ssh-copy-id這個指令沒有找到,自己安裝下即可
安裝命令:yum -y install openssh-clients

如果感覺ssh-copy-id這個命令不好使,你也可以自己新建authorized_keys文件,把公鑰貼進去

# 在另外兩台機器上
# 查看.ssh目錄是否存在
ll /root/.ssh
# 不存在則創建
mkdir /root/.ssh
# 編輯authorized_keys,將第一台機器上生成的id_rsa.pub文件里的內容復制,粘貼在這里。
vim /root/.ssh/authorized_keys
# 因為是自己創建的文件,需要修改權限,文件目錄權限不能錯
chown -R root.root /root/.ssh
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

3)拷貝完成之后,會在要免密登錄的機器(另外兩台機器)上生成授權密碼文件

image

image

在dev-spark-slave-171上,嘗試免密登錄dev-spark-master-206

ssh root@dev-spark-master-206

image

在dev-spark-slave-172上,嘗試免密登錄dev-spark-master-206

ssh root@dev-spark-master-206

image

4)、在另外兩台機器上,重復上述1-3步驟。

注意:免密碼登錄是單向的,必須要在另外兩台機器也生成一對公鑰私鑰,並把公鑰發送到其他服務器上。

最后的結果是:三台機器上,每台機器都有其他兩台機器的公鑰。才能實現三台機器互相免密登錄。

7、設置時間 (三台機器)

# ll /etc/localtime 
lrwxrwxrwx. 1 root root 35 Aug  1  2020 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
# 如果不正確,則修改
mv /etc/localtime /etc/localtime_bak
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 時鍾同步:
# 這里使用aliyun的時鍾服務器
crontab -e
*/30 * * * * ntpdate ntp1.aliyun.com

8、時鍾同步:

時間同步的方式:在集群中找一台機器,作為時間服務器。(以master為主)

通過網絡連接外網進行時鍾同步,必須保證虛擬機連上外網
ntpdate us.pool.ntp.org;
阿里雲時鍾同步服務器
ntpdate ntp4.aliyun.com

集群中其他機器與這台機器定時的同步時間,比如,每 隔十分鍾,同步一次時間。

8.1、時間服務器配置(必須root用戶)(在master上設置)

第一步:確定是否安裝了ntpd的服務

如果沒有安裝,可以進行在線安裝
yum -y install ntp
啟動ntpd的服務
systemctl start ntpd
設置ntpd的服務開機啟動
systemctl enable ntpd
確定是否安裝了ntpd的服務
rpm -qa | grep ntpd

第二步:編輯/etc/ntp.conf

編輯第一台機器器的/etc/ntp.conf
vim /etc/ntp.conf
在文件中添加如下內容
restrict 192.168.90.0 mask 255.255.255.0 nomodify notrap
注釋一下四⾏行行內容
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
#server 3.centos.pool.ntp.org
去掉以下內容的注釋,如果沒有這兩行注釋,那就自己添加上
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10

clipboard

配置以下內容,保證BIOS與系統時間同步 vim /etc/sysconfig/ntpd

添加一行內容

SYNC_HWLOCK=yes

第三步:

重新啟動ntpd

systemctl restart ntpd
systemctl status ntpd

8.2、其他機器配置(必須root用戶)

第一步:在其他機器配置10分鍾與時間服務器同步一次

# 另外兩台機器與192.168.90.206進行時鍾同步
# crontab -e
*/10 * * * * /usr/sbin/ntpdate 192.168.90.206

9、安裝jdk (三台機器都要配置)

jdk下載地址:https://www.oracle.com/java/technologies/downloads/#java8

查看自帶的openjdk

rpm -qa | grep java

如果有自帶的,卸載系統自帶的openjdk

# 將上面找出來的包復制到下面命令中,使用rpm -e卸載
rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64 --nodeps

創建軟件包目錄:

mkdir -p /data/apps/shell/software
mkdir /usr/java

軟件安裝目錄:/data/apps

自己去oracle官網下載指定版本的jdk,這里使用的是jdk1.8

上傳jdk並解壓然后配置環境變量

cd /data/apps/shell/software
tar xf jdk-8u162-linux-x64.tar.gz -C /usr/java/

配置環境變量:

vim /etc/profile
# jdk1,8
export JAVA_HOME=/usr/java/jdk1.8.0_162
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

加載profile使立即生效:

source /etc/profile

測試jdk是否生效:

# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

10、編寫rsync-script工具:

rsync 遠程同步工具

rsync主要用於備份和鏡像。具有速度快、避免復制相同內容和支持符號鏈接的優點。

rsync和scp區別:用rsync做文件的復制要比scp的速度快,rsync只對差異文件做更新。

scp是把所有文件都復制過去。

基本語法

rsync -rvl $pdir/$fname $user@$host:$pdir/$fname

命令 選項參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱

rsync案例

10.1、三台虛擬機安裝rsync (系統默認已經安裝了)

yum install rsync -y

10.2、期望腳本

腳本+要同步的文件名稱

10.3. 說明:在/usr/local/bin這個目錄下存放的腳本,root用戶可以在系統任何地方直接執行。

10.4. 腳本實現

touch rsync-script
vim rsync-script

腳本內容如下:

#!/bin/bash
#1 獲取命令輸入參數的個數,如果個數為0,直接退出命令
paramnum=$#

if((paramnum==0)); then
    echo no params;
    exit;
fi

#2 根據傳入參數獲取文件名稱
p1=$1
file_name=`basename $p1`
echo fname=$file_name

#3 獲取輸入參數的絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 獲取用戶名稱
user=`whoami`

#5 循環執行rsync
host_arr=("dev-spark-master-206" "dev-spark-slave-171" "dev-spark-slave-172")
for host in ${host_arr[@]}; do
    echo ------------------- $host --------------
    rsync -rvl $pdir/$file_name $user@$host:$pdir
done

賦予權限:

chmod 777 rsync-script
cp rsync-script /usr/local/sbin/

測試:

touch test
# rsync-script test 
fname=test
pdir=/data/apps/shell
------------------- dev-spark-master-206 --------------
sending incremental file list

sent 40 bytes  received 12 bytes  104.00 bytes/sec
total size is 0  speedup is 0.00
------------------- dev-spark-slave-171 --------------
sending incremental file list
test

sent 83 bytes  received 35 bytes  236.00 bytes/sec
total size is 0  speedup is 0.00
------------------- dev-spark-slave-172 --------------
sending incremental file list
test

sent 83 bytes  received 35 bytes  78.67 bytes/sec
total size is 0  speedup is 0.00


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM