大数据环境搭建-Linux基础环境配置

2022-06-04 17:21:51 浏览数 (1)

版本准备

一定要注意各个版本的匹配

名称

版本

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修改为不包含着. / _等非法字符。)

代码语言:javascript复制
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

代码语言:javascript复制
vi /etc/profile

profile文件末尾加入:

代码语言:javascript复制
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 的区别

  1. 两个文件都是设置环境变量文件的,两者都是永久性的环境变量,是全局变量,对所有用户生效
  2. /etc/profile.d//etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可, 不用像/etc/profile需要改动此文件

0 人点赞