【转载】Spark集群环境搭建——服务器环境初始化

转自doublexi: https://www.cnblogs.com/doublexi/p/15623436.html

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
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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地址

重启网络

01
systemctl restart network

三台机器都要配置好ip,并确保可以上外网。

2、关闭系统防火墙 (三台机器都要设置)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 先查看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源,可选 (三台机器一起设置)

01
02
03
04
05
# 这里使用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、安装基础软件包 (三台机器一起设置)

01
02
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

所以依次设置主机名:

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

01
hostnamectl set-hostname dev-spark-master-206

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

01
hostnamectl set-hostname dev-spark-slave-171

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

01
hostnamectl set-hostname dev-spark-slave-172

编辑hosts配置(三台机器都要配置)

三台机器都配置好IP之后,为了方便互相访问,可以配置hosts配置,使用主机名来访问。

01
02
03
04
05
06
# 编辑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) 在第一台机器上生成一对钥匙,公钥和私钥

01
# 输入命令,生成秘钥<br>ssh-keygen -t rsa

image

当前用户的宿主目录下的.ssh目录多了两个文件,一个是私钥,一个是公钥

01
ll /root/.ssh/

image

2) 将公钥拷贝给要免密码登录的机器

将本机生成的公钥id_rsa.pub文件拷贝到另外两台机器,就可以从另外两台机器免密登录本机了。

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

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

image

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

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

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文件,把公钥贴进去

01
02
03
04
05
06
07
08
09
10
11
# 在另外两台机器上
# 查看.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

01
ssh root@dev-spark-master-206

image

在dev-spark-slave-172上,尝试免密登录dev-spark-master-206

01
ssh root@dev-spark-master-206

image

4)、在另外两台机器上,重复上述1-3步骤。

注意:免密码登录是单向的,必须要在另外两台机器也生成一对公钥私钥,并把公钥发送到其他服务器上。

最后的结果是:三台机器上,每台机器都有其他两台机器的公钥。才能实现三台机器互相免密登录。(并且需要保证/etc/ssh/sshd_config中的 PubkeyAuthentication值为Yes,不能被注释掉)

7、设置时间 (三台机器)

01
02
03
04
05
06
07
08
09
10
# 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为主)

01
02
03
04
通过网络连接外网进行时钟同步,必须保证虚拟机连上外网
ntpdate us.pool.ntp.org;
阿里云时钟同步服务器
ntpdate ntp4.aliyun.com

集群中其他机器与这台机器定时的同步时间,比如,每 隔十分钟,同步一次时间。

8.1、时间服务器配置(必须root用户)(在master上设置)

第一步:确定是否安装了ntpd的服务

01
02
03
04
05
06
07
08
如果没有安装,可以进行在线安装
yum -y install ntp
启动ntpd的服务
systemctl start ntpd
设置ntpd的服务开机启动
systemctl enable ntpd
确定是否安装了ntpd的服务
rpm -qa | grep ntpd

第二步:编辑/etc/ntp.conf

01
02
03
04
05
06
07
08
09
10
11
12
编辑第一台机器器的/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

添加一行内容

01
SYNC_HWLOCK=yes

第三步:

重新启动ntpd

01
02
systemctl restart ntpd
systemctl status ntpd

8.2、其他机器配置(必须root用户)

第一步:在其他机器配置10分钟与时间服务器同步一次

01
02
03
# 另外两台机器与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

01
rpm -qa | grep java

如果有自带的,卸载系统自带的openjdk

01
# 将上面找出来的包复制到下面命令中,使用rpm -e卸载<br>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

创建软件包目录:

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

软件安装目录:/data/apps

自己去oracle官网下载指定版本的jdk,这里使用的是jdk1.8

上传jdk并解压然后配置环境变量

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

配置环境变量:

01
02
03
04
05
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使立即生效:

01
source /etc/profile

测试jdk是否生效:

01
02
03
04
# 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是把所有文件都复制过去。

基本语法

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

命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

rsync案例

10.1、三台虚拟机安装rsync (系统默认已经安装了)

01
yum install rsync -y

10.2、期望脚本

脚本+要同步的文件名称

10.3. 说明:在/usr/local/bin这个目录下存放的脚本,root用户可以在系统任何地方直接执行。

10.4. 脚本实现

01
02
touch rsync-script
vim rsync-script

脚本内容如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/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

赋予权限:

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

测试:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
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
posted @ 2022-03-28 22:44  VeyronC  阅读(126)  评论(0编辑  收藏  举报