版本准备
一定要注意各个版本的匹配
名称 | 版本 |
---|---|
JDK | 1.8.0_221 |
Scala | 2.12.15 |
Spark | 3.1.3 |
Hadoop | 2.7.7 |
HBase | 1.5.0 |
注意
一定要保证开发环境和部署的环境保持一致!否则运行时会报各种错误。
服务器环境
服务器准备至少3台
代码语言:javascript复制192.168.160.130(master)
192.168.160.131(slave1)
192.168.160.132(slave2)
虚拟机设置
固定服务器IP
进入到系统的IP地址保存文件所在目录
代码语言:javascript复制cd /etc/sysconfig/network-scripts
修改保存IP信息的文件
你机器上的名字有可能不是这个,但是是以ifcfg-e开头的文件
代码语言:javascript复制vi ifcfg-ens33
修改
代码语言:javascript复制ONBOOT=yes
重启
代码语言:javascript复制service network restart
安装
代码语言:javascript复制yum install -y net-tools
修改
代码语言:javascript复制BOOTPROTO=dhcp
为
代码语言:javascript复制BOOTPROTO=static
添加IP配置
代码语言:javascript复制IPADDR=192.168.160.130
NETMASK=255.255.255.0
GATEWAY=192.168.160.2
DNS1=223.5.5.5
保存:wq
注意网关地址怎么获取
编辑
=>虚拟网络编辑器
也可以在服务器中查看
代码语言:javascript复制route -n
可以看到
重启网络
代码语言:javascript复制service network restart
查看网络状态
代码语言:javascript复制systemctl status network
查看IP地址
代码语言:javascript复制ip addr
禁用NetworkManager
代码语言:javascript复制systemctl stop NetworkManager
systemctl disable NetworkManager
设置DNS
代码语言:javascript复制vi /etc/resolv.conf
设置
代码语言:javascript复制search localdomain
nameserver 192.168.160.2
注意
这里DNS服务器可以设置为网关的地址,也可以是公网的DNS服务器IP
关闭防火墙
查看防火墙状态
代码语言:javascript复制systemctl status firewalld
查看开机是否启动防火墙服务
代码语言:javascript复制systemctl status firewalld
关闭防火墙
代码语言:javascript复制systemctl stop firewalld
systemctl disable firewalld
再次查看防火墙状态和开机防火墙是否启动
代码语言:javascript复制systemctl status firewalld
systemctl is-enabled firewalld
关闭selinux
临时关闭selinux(立即生效,重启服务器失效)
代码语言:javascript复制setenforce 0 #临时关闭
永久生效
代码语言:javascript复制vi /etc/selinux/config
把
代码语言:javascript复制SELINUX=enforcing
改为
代码语言:javascript复制SELINUX=disabled
查看selinux状态
代码语言:javascript复制getenforce
状态
disabled为永久关闭,permissive为临时关闭,enforcing为开启
关闭THP服务
关闭每台服务器的THP服务
代码语言:javascript复制vi /etc/rc.local
添加
代码语言:javascript复制if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
exit 0
临时禁用THP服务
代码语言:javascript复制echo never > /sys/kernel/mm/transparent_hugepage/enabled
查看
代码语言:javascript复制cat /sys/kernel/mm/transparent_hugepage/enabled
同步时间
注意
分布式部署必须设置。
配置
代码语言:javascript复制yum install ntp -y
添加任务
代码语言:javascript复制crontab -e
内容
代码语言:javascript复制0 * * * * /usr/sbin/ntpdate cn.pool.ntp.org
在 slave1和 slave2上分别添加(ip为主节点的IP)
代码语言:javascript复制vi /etc/ntp.conf
配置为
代码语言:javascript复制server 192.168.160.130
修改主机名和hosts文件
1、修改主机名(注意主机的hostname修改为不包含着.
/
_
等非法字符。)
hostnamectl set-hostname master
另两台
代码语言:javascript复制hostnamectl set-hostname slave1
和
代码语言:javascript复制hostnamectl set-hostname slave2
可以通过以下命令查看
代码语言:javascript复制vi /etc/hostname
2、修改hosts文件
代码语言:javascript复制vi /etc/hosts
配置为
代码语言:javascript复制192.168.160.130 master
192.168.160.131 slave1
192.168.160.132 slave2
测试
代码语言:javascript复制ping master
3、修改/etc/sysconfig/network
代码语言:javascript复制vi /etc/sysconfig/network
内容
代码语言:javascript复制NETWORKING=yes
HOSTNAME=master
4、设置最大打开文件数
代码语言:javascript复制ulimit -n 10000
(也可以弄个永久设置)
5、重新生效网络
代码语言:javascript复制service network restart
免密登陆
生成密钥对
代码语言:javascript复制mkdir ~/.ssh
cd ~/.ssh
#生成秘钥,之后一路回车即可,不需要输入任何内容。我之前已经生成过,所以提示是否overwrite。如果是第一次生成,不会有这个提示。
ssh-keygen -t rsa
#将公钥复制到制定文件
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
#测试ssh连接,首次连接需要输入yes,但不需要输入密码,之后不需要输入yes,如果能不输入密码连接,就配置成功了
ssh master
登录 slave1,将公钥拷贝到 master的authorized_keys中
代码语言:javascript复制ssh-copy-id -i master
登录 slave2,将公钥拷贝到 master的authorized_keys中
代码语言:javascript复制ssh-copy-id -i master
在 master上修改文件权限
代码语言:javascript复制chmod 700 ~/.ssh
chmod 600 authorized_keys
在 master上将authorized_keys文件复制到其他机器
代码语言:javascript复制scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
在 master上验证免密登陆,可以看到时间信息
代码语言:javascript复制ssh master date
ssh slave1 date
ssh slave2 date
如果不配置的话,后来启动Hadoop的每个服务的时候会让输入密码。
如果Connection refused,可以执行
代码语言:javascript复制sudo systemsetup -f -setremotelogin on
# 执行
ssh master
安装JDK
官方下载JDK 网址
或者 链接:https://pan.baidu.com/s/1JdPCMMEq178hXV5V4Ild3Q 密码:03l1
比如下载的文件为jdk-8u221-linux-x64.rpm
更改文件权限
代码语言:javascript复制chmod 755 jdk-8u221-linux-x64.rpm
安装
代码语言:javascript复制rpm -ivh jdk-8u221-linux-x64.rpm
安装后的路径为/usr/java/jdk1.8.0_221-amd64
删除文件
代码语言:javascript复制rm -rf jdk-8u221-linux-x64.rpm
查询Java版本
代码语言:javascript复制java -version
查看JAVA_HOME
代码语言:javascript复制echo $JAVA_HOME
打开文件/etc/profile
vi /etc/profile
在profile
文件末尾加入:
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
配置立即生效
代码语言:javascript复制source /etc/profile
查看
代码语言:javascript复制echo $JAVA_HOME
复制到另两台服务器
代码语言:javascript复制scp -r /usr/java/jdk1.8.0_221-amd64 root@ slave1:/usr/java
scp -r /usr/java/jdk1.8.0_221-amd64 root@ slave2:/usr/java
小知识
在/etc/profile.d
目录中存放的是一些应用程序所需的启动脚本。
这些脚本文件之所以能够 被自动执行,是因为在/etc/profile
中使用一个for循环语句来调用这些脚本。
而这些脚本文件是用来设置一些变量和运行一些初始化过程的。
Linux 环境下/etc/profile
和/etc/profile.d
的区别
- 两个文件都是设置环境变量文件的,两者都是永久性的环境变量,是全局变量,对所有用户生效
/etc/profile.d/
比/etc/profile
好维护,不想要什么变量直接删除/etc/profile.d/
下对应的shell脚本即可, 不用像/etc/profile
需要改动此文件