前置条件
一、环境
VMware Workstation Pro:VMware 16.0 及以上版本
虚拟机镜像:CentOS-7-x86_64-Minimal-2009
JDK版本:jdk1.8.0_371
Hadoop版本:
HBase版本:
Hive版本:
Sqoop版本:
二、前置准备
在用户目录下我们需要创建一个目录文件夹 downloads
来存储我们下载的安装包
mkdir downloads
在 /usr/local
目录下创建一个目录 jvm
用作 jdk
的安装目录
sudo mkdir /usr/local/jvm
新建用户
我们需要新建一个用户名为 hadoop
的新用户,这个步骤最主要是为了让大家养成一个良好的习惯,以下是创建新用户的一些作用:
- 访问控制和安全性:通过创建新用户,可以实现访问控制和安全性。每个用户都有独立的用户名和密码,这样可以确保只有授权的用户可以登录系统。每个用户拥有自己的用户目录(Home Directory),并且对其他用户的文件和系统文件具有有限的访问权限。这种分离和控制的机制有助于防止未经授权的访问和滥用系统资源。
- 多用户环境:
Linux
是一个多用户操作系统,支持多个用户同时使用系统。通过创建新用户,可以为每个用户提供独立的工作环境和个人配置。每个用户可以自定义自己的Shell
环境、环境变量、别名和命令历史等。这种分离的用户环境有助于提高用户之间的隔离性和工作效率。- 文件和目录权限管理:
Linux
系统中的文件和目录都有访问权限。通过创建新用户,可以为每个用户分配适当的文件和目录权限。这样可以确保用户只能访问他们需要的文件和目录,并限制对系统关键文件的访问。通过正确设置权限,可以保护系统的安全性和数据的机密性。- 进程管理和资源限制:每个用户在
Linux
系统中运行的程序和进程都属于该用户。通过创建新用户,可以实现进程管理和资源限制。管理员可以为每个用户设置进程和资源限制,例如限制最大进程数、最大内存使用量、最大文件打开数等。这有助于防止用户滥用系统资源,并提高系统的稳定性和可靠性。- 审计和日志跟踪:创建新用户还有助于审计和日志跟踪。每个用户的活动和操作都可以被跟踪并记录,包括登录时间、执行的命令、文件访问等。这些日志和审计信息对于故障排除、安全审计和合规性要求非常重要。
在生产过程中,通过为每个用户分配独立的账户,可以实现对用户活动的有效控制和跟踪,从而确保系统的稳定性、安全性和高效性。
创建用户时,我们需要使用 sudo
或者使用 root
用户进行创建,因为普通用户是没有权限创建新用户的,会显示 Permission denied
和 cannot lock /etc/passwd; try again later
这样的标识。这里我们以普通用户使用 sudo
命令进行新用户的创建。
sudo useradd hadoop # 创建一个新用户,用户名为 hadoop
sudo passwd hadoop # 设置 hadoop 用户的密码
但是此时新建的用户是无法使用 sudo
命令的,我们还必须将其配置到 sudoers
文件中去
拓展:
在使用 hadoop
集群过程中我们是不需要使用到 root
权限的,所以我们可以在部署完成后使用该用户进行使用。如果需要为其添加管理员权限,是需要在 /etc/sudoers
,这个文件中进行配置的,需要将用户名加入到 root
用户的下面。
sudo vim /etc/sudoers
这里需要注意的就是缩进和空格,我是严格按照上面 root
用户的缩进和空格进行输入的,所以希望大家输入的时候也参照一下自己文件里面的输入,因为不知道会发生什么别的错误。
用户名 ALL=(ALL) ALL
输入完成,然后就可以保存并退出了,然后我们在新用户下尝试一下编辑 /etc
目录下的文档,就可以查看自己是否有 root
权限了
sudo vim /etc/sudoers
如需新用户使用 sudo
时不用输密码,把最后一个 ALL
改为 NOPASSWD:ALL
即可。
之后的部署我还是采用带有 root
权限的普通用户,因为仅仅是学习用途,大家谨以此
工具下载
下面我们将会用到几个工具,有 wget
、vim
、net-tools
、openssh-server
wget
wget
是一个常用的命令行工具,用于从网络上下载文件。它支持通过 HTTP、HTTPS 和 FTP 协议下载文件,并且具有很多有用的功能和选项。在本篇目中我们将用其来下载许多的安装包
我们可以通过输入 wget
来判断是否有下载该该工具
wget
出现 command not found
则说明找不到该命令,也就是说没有下载该工具
如下图所示则是说明已经下载了该工具
如未下载则需要输入下面命令安装该工具。
sudo yum install -y wget
出现有 Complete
说明该工具安装成功
该工具用途广泛,各位可以通过输入 wget --help
自行进行探索
基本用法
-
下载文件:你可以使用 wget 命令下载文件。例如,要下载一个文件,可以运行以下命令:
wget <URL>
其中
<URL>
是要下载文件的网址。 -
断点续传:wget 支持断点续传,即在下载中断后可以从中断处继续下载而不是重新开始。这对于大文件或不稳定的网络连接非常有用。使用
-c
或--continue
选项启用断点续传。例如:wget -c <URL>
-
限速下载:你可以使用
--limit-rate
选项限制下载速度。这在需要控制网络带宽的情况下很有用。例如,要限制下载速度为1MB/s
,可以运行以下命令:wget --limit-rate=1m <URL>
-
递归下载:wget 可以递归下载一个网站的所有文件,并保持相对目录结构。这对于备份整个网站或下载某个目录的所有内容非常有用。使用
-r
或--recursive
选项进行递归下载。例如:wget -r <URL>
-
后台下载:你可以使用
-b
或--background
选项将下载任务放到后台运行,这样你可以继续使用终端。例如:wget -b <URL>
-
用户名和密码验证:如果下载需要用户名和密码进行验证,可以使用
--user
和--password
选项提供凭据。例如:wget --user=<username> --password=<password> <URL>
除了这些,各位还可以使用 wget --help
对 wget
工具一些基本选项的查看,如果大家想深入了解该工具,可以输入 man wget
查看该工具的文档
man wget
vim
Vim
(Vi Improved)是一种功能强大的文本编辑器,它是 Vi
编辑器的改进版本。Vim
被广泛用于 Unix
、Linux
和类 Unix
系统上,也可在 Windows
和 Mac
等其他平台上运行。Vim
的设计理念是高效、可定制和面向程序员的。下面是对Vim的详细介绍:
- 模式:
Vim
有三种基本的工作模式:命令模式(Command mode)、插入模式(Insert mode)和可视模式(Visual mode)。
- 命令模式:启动Vim后进入的默认模式,可以执行各种命令,例如移动光标、复制粘贴、搜索替换等。
- 插入模式:在命令模式下按下插入命令(如i、o、a等)进入插入模式,可以输入和编辑文本。
- 可视模式:在命令模式下按下可视命令(如v、V等)进入可视模式,可以选择文本进行复制、粘贴或其他操作。
- 快捷键和命令:
Vim
提供了丰富的快捷键和命令,可以大大提高编辑效率。例如:
- 光标移动:h(左)、j(下)、k(上)、l(右)等。
- 复制粘贴:yy(复制一行)、dd(删除一行)、p(粘贴)等。
- 搜索替换:/(搜索)、😒/old/new/g(替换)等。
- 撤销和重做:u(撤销)、Ctrl + r(重做)等。
- 可定制性:
Vim
非常可定制,用户可以根据自己的需求进行配置。可以编辑Vim的配置文件(.vimrc)来设置自定义的快捷键、颜色方案、插件等。Vim还支持脚本语言,如Vim脚本(Vim script)和Python等,使得用户可以编写自己的扩展功能和插件。- 插件和扩展:
Vim
支持各种插件和扩展,可以增加额外的功能和特性。有许多流行的插件,如语法高亮、代码补全、文件资源管理器等,可以通过插件管理工具(如Vundle、Pathogen、vim-plug等)轻松安装和管理。- 强大的编辑功能:
Vim
提供了丰富的编辑功能,包括块操作、宏录制、折叠文本、多窗口编辑等。这些功能使得处理大文件和代码编辑更加高效和便捷。- 远程编辑:
Vim
支持通过网络远程编辑文件。使用Vim的远程编辑功能,可以通过SSH
连接到远程主机,并在本地使用Vim
编辑远程文件,方便远程开发和协作。
下载指令
sudo yum install vim -y
基本用法
- 打开文件:在命令行中输入
vim
命令,后跟要编辑的文件名,例如vim filename.txt
。如果文件不存在,Vim将创建一个新文件。 - 基本操作模式:
- 命令模式(Command mode):打开Vim后进入的默认模式。在此模式下,可以执行各种命令。例如,使用
h
、j
、k
、l
键进行光标移动,使用yy
复制一行,使用dd
删除一行等。 - 插入模式(Insert mode):在命令模式下按下
i
、o
、a
等键进入插入模式。在插入模式中,可以输入和编辑文本。 - 可视模式(Visual mode):在命令模式下按下
v
、V
等键进入可视模式。在可视模式中,可以选择文本并执行操作,如复制、剪切、删除等。
- 命令模式(Command mode):打开Vim后进入的默认模式。在此模式下,可以执行各种命令。例如,使用
- 保存和退出:
- 在命令模式下,输入
:w
保存文件。 - 输入
:q
退出Vim。 - 输入
:wq
保存并退出。 - 输入
:q!
强制退出并放弃对文件的修改。
- 在命令模式下,输入
- 光标移动:
h
:向左移动一个字符。j
:向下移动一行。k
:向上移动一行。l
:向右移动一个字符。gg
:跳转到文件的开头。G
:跳转到文件的末尾。0
:跳转到当前行的开头。$
:跳转到当前行的末尾。
- 文本编辑:
i
:在光标前插入文本。a
:在光标后插入文本。o
:在当前行下方插入新行。dd
:删除当前行。yy
:复制当前行。p
:粘贴剪贴板中的内容。u
:撤销上一步操作。Ctrl + r
:重做撤销的操作。
- 搜索和替换:
/pattern
:搜索指定模式的文本。按下n
跳转到下一个匹配项。:s/old/new/g
:替换当前行中所有的old
字符串为new
字符串。:%s/old/new/g
:替换整个文件中所有的old
字符串为new
字符串。:%s/old/new/gc
:替换整个文件中所有的old
字符串为new
字符串,并在替换前请求确认。
- 分割窗口:
:split
:水平分割窗口。:vsplit
:垂直分割窗口。Ctrl + w
,然后按下h
、j
、k
、l
切换焦点。
- 定位行号:
- 输入行号+
G
:跳转到指定行号。 :n
:跳转到指定行号。
- 输入行号+
net-tools
net-tools
是一组用于网络配置和监控的命令行工具集合,常用于 Unix
、Linux
系统。它提供了许多命令,可以帮助用户查看和配置网络接口、路由表、网络连接等信息。下面是对 net-tools
的详细介绍:
ifconfig
:ifconfig
命令用于查看和配置网络接口的信息。通过ifconfig
,可以获取到网络接口的IP
地址、子网掩码、MAC
地址等信息。此外,ifconfig
还可以启用或禁用网络接口,配置网络接口的参数,例如设置IP
地址、子网掩码、广播地址等。route
:route
命令用于查看和配置系统的路由表。路由表是记录数据包传输的规则和路径的表格。通过route
命令,可以查看当前系统的路由表,包括目的网络、网关、接口和跃点数等信息。同时,route
还可以添加、删除或修改路由表的条目,从而改变数据包的传输路径。netstat
:netstat
命令用于查看系统的网络连接和网络统计信息。通过netstat
,可以获取到系统当前的网络连接状态,包括正在监听的端口、已建立的连接、连接的状态等。netstat
还可以显示网络接口的统计信息,如接收和发送的数据包数量、错误信息等。arp
:arp
命令用于查看和操作系统的ARP
(地址解析协议)缓存表。ARP
用于将IP
地址解析为MAC
地址。arp
命令可以显示当前系统的ARP
缓存表,包括IP地址和对应的MAC
地址。此外,arp
还可以手动添加或删除ARP缓存表的条目。iptunnel
:iptunnel
命令用于创建和管理IP
隧道。IP隧道是一种将IP
数据包封装在其他协议中进行传输的技术。通过iptunne
l命令,可以创建和配置IP
隧道,例如设置隧道的本地和远程端点、隧道的传输协议等。hostname
:hostname
命令用于查看和设置系统的主机名。主机名是唯一标识网络中计算机的名称。通过hostname
命令,可以获取当前系统的主机名,也可以修改系统的主机名。
下载指令
sudo yum install net-tools -y
基本用法
ifconfig
:用于查看和配置网络接口的信息。ifconfig
:显示当前系统上所有网络接口的信息。ifconfig eth0
:显示指定网络接口(例如eth0)的详细信息。ifconfig eth0 up
:启用指定网络接口。ifconfig eth0 down
:禁用指定网络接口。ifconfig eth0 192.168.0.100 netmask 255.255.255.0
:为指定网络接口配置IP地址和子网掩码。
route
:用于查看和配置系统的路由表。route
:显示当前系统的路由表。route -n
:以数字格式显示路由表,而不解析IP地址和主机名。route add default gw 192.168.0.1
:添加默认网关。route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
:添加静态路由。
netstat
:用于查看系统的网络连接和网络统计信息。netstat
:显示当前系统的网络连接状态。netstat -tuln
:显示TCP和UDP监听端口。netstat -r
:显示路由表。netstat -s
:显示网络统计信息,如接收和发送的数据包数量、错误信息等。netstat -p
:显示与进程关联的网络连接。
arp
:用于查看和操作系统的ARP(地址解析协议)缓存表。arp
:显示当前系统的ARP缓存表。arp -a
:以IP地址的格式显示ARP缓存表。arp -d 192.168.0.1
:从ARP缓存表中删除指定IP地址的条目。arp -s 192.168.0.1 00:11:22:33:44:55
:手动添加指定IP地址和MAC地址的ARP条目。
iptunnel
:用于创建和管理IP隧道。iptunnel add mytunnel mode ipip remote 192.168.1.2 local 192.168.1.1
:创建一个IP隧道。iptunnel del mytunnel
:删除指定的IP隧道。iptunnel list
:显示当前系统上的IP隧道列表。
Openssh-server
OpenSSH
是一个用于安全远程登录和文件传输的开源工具套件,而 OpenSSH
服务器(OpenSSH Server)则是 OpenSSH
的服务器端组件。OpenSSH
服务器提供了安全的远程访问和管理机制,使得用户可以通过 SSH
协议远程连接到服务器,并进行安全的命令行操作和文件传输。下面是对 OpenSSH
服务器的介绍:
- 安全远程登录:
OpenSSH
服务器允许用户通过SSH
(Secure Shell)协议安全地远程登录到服务器。SSH
通过加密和身份验证机制保护登录过程的安全性,可以有效地防止密码被窃听和中间人攻击。用户可以使用SSH
客户端工具连接到OpenSSH
服务器,输入用户名和密码(或使用密钥认证),并在远程服务器上执行命令。- 加密通信:
OpenSSH
服务器提供了端到端的加密通信,保护了用户和服务器之间的数据传输。所有通过OpenSSH
服务器进行的远程会话、文件传输和端口转发等操作都经过加密处理,使得数据在传输过程中不容易被窃听和篡改。- 身份验证机制:
OpenSSH
服务器支持多种身份验证机制,包括密码认证、公钥认证和证书认证。密码认证是最常见的方式,用户需要提供用户名和密码来登录。公钥认证使用密钥对,用户将公钥存储在服务器上,私钥用于身份验证。证书认证使用数字证书,由可信的证书颁发机构签发。- 文件传输:除了远程登录,
OpenSSH
服务器还支持安全的文件传输功能。用户可以使用SCP
(Secure Copy)或SFTP
(SSH File Transfer Protocol)等工具,在客户端和服务器之间进行文件的上传和下载。这些文件传输操作都经过加密处理,保护了文件的机密性和完整性。- 端口转发和隧道:
OpenSSH
服务器支持端口转发和隧道功能。通过端口转发,用户可以在本地和远程主机之间建立安全的通信通道,实现本地端口的映射和远程访问。这对于远程访问内部网络资源或建立安全的远程服务非常有用。- 配置和安全性:
OpenSSH
服务器提供了灵活的配置选项,可以根据实际需求进行定制。管理员可以通过修改配置文件(通常是sshd_config
)来调整服务器的行为,包括监听端口、身份验证方法、访问控制和安全选项等。通过适当的配置和安全措施,可以增强OpenSSH服务器的安全性,例如限制用户访问、禁用密码认证、限制SSH
协议版本等。
下载指令
sudo yum install openssh-server -y
基本用法
- 安装OpenSSH服务器:
- 在Debian/Ubuntu上,使用以下命令安装OpenSSH服务器:
sudo apt-get install openssh-server
- 在Red Hat/CentOS上,使用以下命令安装OpenSSH服务器:
sudo yum install openssh-server
- 在Debian/Ubuntu上,使用以下命令安装OpenSSH服务器:
- 启动和停止OpenSSH服务器:
- 在Systemd系统上,使用以下命令启动OpenSSH服务器:
sudo systemctl start sshd
- 在Systemd系统上,使用以下命令停止OpenSSH服务器:
sudo systemctl stop sshd
- 在SysV Init系统上,使用以下命令启动OpenSSH服务器:
sudo service sshd start
- 在SysV Init系统上,使用以下命令停止OpenSSH服务器:
sudo service sshd stop
- 在Systemd系统上,使用以下命令启动OpenSSH服务器:
- 远程登录:
- 使用SSH客户端连接到OpenSSH服务器:
ssh username@hostname
- 例如,使用用户名为"username"和主机名为"example.com"的SSH连接:
ssh username@example.com
- 如果使用默认的SSH端口(22),则可以省略端口号:
ssh username@hostname
- 使用SSH客户端连接到OpenSSH服务器:
- 配置文件:
- OpenSSH服务器的配置文件为
/etc/ssh/sshd_config
。 - 可以使用文本编辑器(如vim)编辑配置文件:
sudo vim /etc/ssh/sshd_config
。 - 在配置文件中,可以设置各种选项,如监听端口、身份验证方法、访问控制等。
- 修改配置文件后,需要重新启动OpenSSH服务器使更改生效。
- OpenSSH服务器的配置文件为
- 密钥认证:
- OpenSSH服务器支持公钥认证,提供更安全的登录方式。
- 生成密钥对(公钥和私钥):
ssh-keygen -t rsa
- 将公钥复制到OpenSSH服务器上的
~/.ssh/authorized_keys
文件中,以实现无密码登录。
- 文件传输:
- 使用SCP(Secure Copy)命令从本地系统上传文件到远程系统:
scp localfile username@hostname:remotefile
- 使用SCP命令从远程系统下载文件到本地系统:
scp username@hostname:remotefile localfile
- 使用SCP(Secure Copy)命令从本地系统上传文件到远程系统:
- 端口转发:
- OpenSSH服务器支持端口转发功能,用于建立安全的通信通道。
- 本地端口转发:
ssh -L local_port:destination:destination_port username@hostname
- 远程端口转发:
ssh -R remote_port:destination:destination_port username@hostname
- 登录访问控制:
- 在OpenSSH服务器的配置文件中,可以设置允许或拒绝登录的用户或IP地址。
- 可以使用
AllowUsers
选项限制允许登录的用户列表。 - 可以使用
AllowGroups
选项限制允许登录的用户组列表。 - 可以使用
DenyUsers
选项限制禁止登录的用户列表。 - 可以使用
DenyGroups
选项限制禁止登录的用户组列表。
网络配置
配置静态 IP
下载 vim
编辑器,这个不是刚需,使用 vi
也是可以的。
sudo yum install -y vim
下载 net-tools
工具,这个是查看网络信息的,比如使用 ifconfig
指令就需要先安装这个
sudo yum install -y net-tools
使用 ifconfig
指令来查看基本的网络配置信息
ifconfig
192.168.48.146
为当前分配的 IP
地址,255.255.255.0
为当前的子网掩码。
编辑网卡文件,这里路径差不多的,但要注意最后一个网卡文件的文件名 ifcfg-en32
,这里可能会有所不同,有的是 ifcfg-en33
或者一些别的什么,根据自己情况进行修改。
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens32
修改 BOOTPROTO
属性为 static
,添加 IPADDR 和 NETMASK
。
IPADDR
设置为与虚拟网卡同一网段即可,可以在虚拟网络编辑器中找到子网,我这里可以设置为 192.168.48.0 ~ 192.168.48.255
,具体设置为多少根据情况而定,也可以在修改为之前使用 ifconfig
指令查看到的 IP
地址。
NETMASK
设置为 255.255.255.0
即可,如果集群很大,可以根据具体情况进行调整。
GATEWAY
设置为虚拟网络编辑器中 NAT设置
的网关,我这里是 192.168.48.2
,视具体情况进行调整。
各位还可以自行配置 DNS
地址,请视具体情况而定。
如下图所示:
后面还可以配置 DNS
等其他属性,这些留给各位读者进一步深入的时候进行探索。
重启网络
systemctl restart network
输入密码即可进行重启。
免密配置
Windows Openssh 服务安装
方法一:
搜索栏搜索可选功能,并打开
点击查看功能
搜索 ssh
,可以看见有两个 ssh
服务,都要下载
等待安装完成即可,安装完成后,可以在已安装功能处找到 OpenSSH 客户端
和 OpenSSH 服务器
两个功能。
方法二:
使用管理员启动 Windows PowerShell
我们需要下载的功能为:OpenSSH.Client
和 OpenSSH.Server
两个功能,首先输入下面指令来查看是否有安装这两个功能。
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
如果没有安装这两个功能,则状态 State
会显示 NotPresent
,如果下载了,则会显示 Installed
。
Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name : OpenSSH.Server~~~~0.0.1.0
State : Installed
如果没有安装 OpenSSH.Client
,则输入下面指令
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
如果没有安装 OpenSSH.Server
,则输入下面指令
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装成功后,则会返回下列结果
Path :
Online : True
RestartNeeded : False
安装完成后服务会自动启动。
虚拟网络编辑器
打开 VMware Workstation
,选择 编辑 --> 虚拟网络编辑器
选择右下方的 更改设置
选择 VMnet8(注意是NAT模式的那个) --> DHCP 设置
选择 添加
设置主机端口,一般为 22,如果需要分出多台不同的虚拟机可以按需选择端口。输入需要转接的虚拟机的IP地址,虚拟机的端口设置为 22,添加描述,然后点击确定。
点击确定。
点击 应用 --> 确定
即可完成配置。
SSH 配置
openssh 服务
首先输入 ssh
指令来判断是否有安装 ssh
服务。
ssh
出现情况如下图则是已经有此功能
如果没有该功能,可以使用 yum
指令进行下载。
sudo yum install -y openssh-server
下载完成后,即可进入下一步
修改主机名称
修改 /etc/hostname
文件
sudo hostnamectl set-hostname master
# 或者
hostnamectl set-hostname master
输入密码,即可进行修改,再次重启即可发现修改。
对于剩下的机器也是如上的配置,例如
sudo hostnamectl set-hostname slave1 # 修改主机名
sudo reboot # 重启机器
sudo hostnamectl set-hostname slave2 # 修改主机名
reboot # 重启机器
建立映射关系
修改 /etc/hosts
文件内容,将主机名称与IP地址之间的映射关系追加到文件中。如果是伪分布的集群,则是虚拟机的 IP地址
,如果是分布式的集群,则是主机的 IP地址
,而主机映射到虚拟机的部分,则在前面虚拟网络编辑器的映射关系可以找到。
sudo vim /etc/hosts
这里我使用三台进行演示
剩下的机器也是如此配置即可,主机名称没有特定的限制。
秘钥生成
使用 ls
指令,可以查看当前目录的使用情况,首先我们要查看用户目录下是否存在有 .ssh
这个目录,输入下面指令即可查看,请确保查看的是用户目录,所以可以先使用 cd
命令进入当前用户目录
cd # 进入当前用户目录
ls -al # 查看当前目录的使用情况
根据下图,可以发现并没有 .ssh
目录存在。
如果没有 .ssh
目录存在,我们需要先使用 ssh
指令连接本机,来生成 .ssh
目录,具体操作可以是 ssh + 主机名称
或 ssh + IP地址
,这里我们使用主机名称进行演示。
ssh lcoalhost # local为当前的主机名称
如下图所示:
如果目录已存在可以直接进行下述操作。
修改 .ssh
目录权限为 rwx------
,可以通过 ls
指令去查看文件的目录权限
ls -la ~ | grep .ssh
如下图所示:
如果文件权限不正确,则使用 chmod
指令进行修改
chmod 700 ~/.ssh/
修改完成后,进入 .ssh
目录,如果秘钥不存在,则使用 ssh-keygen
生成秘钥文件;可以使用 ls
指令查看秘钥文件是否存在
输入 ssh-keygen
指令,之后只需要按回车(Enter)键即可完成秘钥生成。
cd ~/.ssh
ssh-keygen -t rsa # 生成秘钥
再次使用 ls
指令查看,即可发现已经多了两个密钥文件。
然后我们将秘钥文件进行拷贝
cat id_rsa.pub >> authorized_keys # 拷贝秘钥
再次进行查看,可以看见拷贝的文件 authorized_keys
观察发现文件的权限为 rw-rw-r--
,但是在 CentOS -7 下该文件的权限需要是 -rw-------
,所以我们使用 chmod
对其权限进行修改
chmod 600 ~/.ssh/authorized_keys # 修改文件权限,在CentOS-7下authorized_keys文件需要设置其权限为rw-------
再次查看,可以发现权限已经修改完成。
秘钥传输
这里我们用三台机器,分别为:master
、slave1
、slave2
进行演示。秘钥生成完毕后,需要将秘钥传输到各台机器上,这个步骤我们需要操作多台机器,首先我们将 master
的秘钥文件 id_rsa.pub
传输到 slave1(或slave2)
上,此时不需要对 slave2(或slave1)
进行操作。
我们使用 scp
指令进行文件的传输,具体格式为 scp -r <需要传输文件的路径> [用户名]@[IP地址或主机名称] <传输的目的地址>
,使用主机名称必须已经建立了主机名称与IP地址的映射才可;其中用户名为可省略项。
scp -r ~/.ssh/authorized_keys slave1:~/.ssh/authorized_keys
然后我们将slave1
的密钥文件 id_rsa.pub
追加到 slave1
的 authorized_keys
文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
对比发现,追加之后秘钥文件中多了一个 slave1
的秘钥。
然后同样的步骤,我们将 slave1
的 authorized_keys
传输到 slave2
的 .ssh
目录下,然后将slave2
的密钥文件 id_rsa.pub
追加到 slave2
的 authorized_keys
文件中
scp -r ~/.ssh/authorized_keys slave2:~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
使用 cat
指令即可查看文件内容,进行对比,秘钥传输完成。
然后我们需要将秘钥回传,即将将slave2
的 authorized_keys
回传到 slave1
和 master
上,同样地,我们使用 scp
指令即可完成该操作。
scp -r ~/.ssh/authorized_keys slave1:~/.ssh/authorized_keys # 回传秘钥到 slave1
scp -r ~/.ssh/authorized_keys master:~/.ssh/authorized_keys # 回传秘钥到 master
记得再次查看文件的权限,将 authorized_keys
的权限改为 rw-------
chmod 600 ~/.ssh/authorized_keys # 修改文件权限,在CentOS-7下authorized_keys文件需要设置其权限为rw-------
最后再测试一下是否可以免密登录即可。
关闭防火墙
在部署环境的过程中,我们需要将防火墙进行关闭,以下是关闭防火墙的目的:
应用程序需要特定的网络连接: 某些应用程序可能需要通过特定的端口或协议进行网络通信。防火墙的默认配置可能会阻止这些连接,因此关闭防火墙可以确保应用程序能够正常建立所需的网络连接。
简化网络配置和故障排除: 在某些情况下,防火墙的配置可能会很复杂,特别是当你有多个网络规则和端口需要管理时。关闭防火墙可以简化网络配置,减少可能的故障,并简化故障排除过程。
测试和开发环境的需要: 在测试和开发环境中,通常需要频繁地安装、配置和测试各种应用程序和服务。关闭防火墙可以简化这些环境的设置,避免网络连接问题对开发和测试造成的干扰。
本篇为学习用途,所以可以放心将虚拟机的防火墙关闭,如果是在实际生产环境中,个人还是不建议关闭防火墙的。
防火墙在 CentOS
中一般有两种,一种是原生态的 firewalld
,另一种是 iptables
。下面我来对这两个防火墙进行一下说明
firewalld:
- 用途:
firewalld
是一个动态的防火墙管理工具,旨在提供简化的管理界面和配置选项。它支持在运行时动态更新防火墙规则,并提供了更高级的功能,如服务管理、区域管理和网络接口管理。- 不同点:
firewalld
基于网络区域的概念,可以为每个区域(如公共、内部、DMZ)定义不同的安全策略。它还支持通过 D-Bus 接口进行远程管理,并具有良好的日志和审计功能。- 优势:
firewalld
的优势在于其动态性和可管理性。它可以在运行时更改防火墙规则,无需重启服务或断开连接。它还提供了一套高级的管理工具和接口,使配置和管理更加简单和灵活。iptables:
- 用途:
iptables
是Linux
系统上的一个经典防火墙工具,用于配置和管理内核的网络数据包过滤规则。它通过定义不同的规则链和规则来控制网络流量,实现网络安全策略的实施。- 不同点:
iptables
是一个底层的、静态的防火墙配置工具。它的配置是基于预定义的表、链和规则的,需要手动更新配置文件或使用命令行工具进行修改。iptables
对于高级网络过滤和路由设置提供了更大的灵活性和细粒度的控制。- 优势:
iptables
的优势在于其灵活性和可定制性。它提供了丰富的规则选项,可以根据特定的需求定义复杂的网络过滤和转发规则。iptables
还具有广泛的社区支持和文档资源。
比较两者的优劣性是一个复杂的问题,因为它们有不同的设计目标和适用场景,所以我们只进行一些最初始的比较,这并不能作为衡量二者好坏的依据,请大家根据实际情况进行选择使用。
动态性和可管理性:firewalld 在动态性和可管理性方面具有优势,可以在运行时动态更改配置,提供更高级的管理界面和选项。而 iptables 的配置是静态的,需要手动编辑配置文件或使用命令行工具进行修改。
灵活性和定制性:iptables 在灵活性和定制性方面具有优势,可以提供更细粒度的网络过滤和路由控制。它允许用户根据具体需求定义复杂的规则和链。
社区支持和成熟度:iptables 是一个经过时间验证的工具,具有广泛的社区支持和文档资源。firewalld 是较新的工具,虽然也有一定的社区支持,但相对而言可能没有 iptables 那么成熟。
可以使用指令来查看是否有安装 firewalld
和 iptables
防火墙
systemctl status firewalld # 查看 firewalld 服务运行状态
systemctl status iptables # 查看 iptables 服务运行状态
根据图中情况,我这里只有 firewalld
防火墙。
输入下面指令进行防火墙的关闭并且对其进行禁用。
systemctl stop firewalld # 关闭 firewalld
systemctl disable firewalld # 禁用 firewalld
关闭的时候需要输入两次密码,如果遇到 Permission denied
则是因为权限不足,此时请在开头加上 sudo
提升权限再进行关闭禁用。请注意,禁用的意思是指不会随着系统启动而自动启动,但是手动启动并不受影响。
最后我们在查看一下防火墙的运行情况
systemctl status firewalld
以下两个标识即为我们需要的状态了。
JDK 下载安装
JDK
(Java Development Kit)是 Java
开发环境的软件包,它提供了编译、运行和调试 Java
程序所需的工具和库。在大数据环境中的作用是支持和运行Java
应用程序,包括大数据相关的工具和框架。以下是 jdk
在大数据环境中的几个重要作用:
- 支持大数据工具和框架:许多大数据工具和框架,如Apache Hadoop、Apache Spark、Apache Flink、Apache Kafka等,都是用Java编写的,并且需要在Java运行时环境中进行编译和执行。安装 JDK 8 可以提供必要的Java运行时环境,以支持这些工具和框架的正常运行。
- 开发和调试大数据应用程序:JDK 8 包含了 Java 编译器(javac)和调试器(java debugger),使开发人员能够编写、编译和调试大数据应用程序。大数据应用程序通常涉及复杂的逻辑和算法,通过使用 JDK 8,开发人员可以利用其丰富的工具和功能来创建和调试高效的大数据应用程序。
- 提供标准Java类库:JDK 8 提供了广泛的标准Java类库,这些类库包括处理文件、网络通信、数据结构、多线程、加密、日期时间处理等常用功能。大数据应用程序通常需要使用这些类库中的功能来处理数据、进行计算和实现业务逻辑。
- 兼容性和稳定性:JDK 8 是一个被广泛使用和测试的Java开发工具包版本,具有良好的兼容性和稳定性。大多数大数据工具和框架都经过了充分的测试,并在 JDK 8 上进行了验证和优化。使用 JDK 8 可以确保大数据环境的稳定性和可靠性。
下载
下载我们可以通过两种方式,一种是使用 wget
工具进行下载,一种是下载到本地,然后在上传到 CentOS
系统中。
方法一
第一种方法我们采用 wget
的方法进行下载,但是由于 Oracle
官网用 Cookie
限制下载方式,所以依旧需要借助图形化界面。
首先第一步,先点击这里打开官方下载地址,然后找到具体的下载选项,这里我们选择下载 tar.gz
形式的安装包,如果喜欢使用 rpm
形式的也可以自行根据自己情况进行调整。
点击后会弹出一个征询同意的窗口,打√表示同意。
点击 Download
进行下载
输入用户名和免密进行登录,即可下载
找到下载内容,右键单击链接,选择复制链接地址,这个即为下载的 url
地址
在命令行中用 wget
命令即可进行下载,但此步骤比较繁琐,并且 url
有时效限制 ,所以该种办法并不推荐。
下面命令中的 -P <src>
是选择保存的路径
wget <url> -P ~/downloads # 下载并保存到指定路径
下载完成后即可在保存路径中找到该安装包,输入下面命令即可查看该安装包大小以及所拥有的权限等信息
ls -lh downloads # 查看 downloads 目录下文件的信息
这里的安装包带有一些连接符等东西,我们需要给它重命名,使用 mv
命令,将其修正为原来的样子,也就是 tar.gz
mv ~/downloads/jdk-8u371-linux-x64.tar.gz\?AuthParam\=1689052084_4544431d793304cf0d206b99ddce7b7e ~/downloads/jdk-8u371-linux-x64.tar.gz # 修改文件名称
ls -lh downloads # 查看 downloads 目录下文件的信息
再次查看就发现文件已经变成红色了,也就是说已经是一个正确的 tar.gz
安装包的形式了。
方法二
方法二和方法一区别并不是特别多,只是传入 CentOS
的方式并不相同。这里需要使用到一些传输工具,可以是 Xftp
、XShell
、FinalShell
等工具都可以,这里我们使用 Xftp
进行传输。
首先第一步,先点击这里打开官方下载地址,然后找到具体的下载选项,这里我们选择下载 tar.gz
形式的安装包,如果喜欢使用 rpm
形式的也可以自行根据自己情况进行调整。
点击后会弹出一个征询同意的窗口,打√表示同意。
点击 Download
进行下载
输入用户名和免密进行登录,即可下载
等待下载完成即可。
下载完成后,我们打开 Xftp
,连接上虚拟机,打开相应的目录,双击文件进行传输即可
传输完成后,即可发现在对应目录下,已经有该文件存在。
安装
安装这个步骤,不论是使用的方法一还是方法二,这两个步骤也都是一样的操作。
首先创建一个安装目录,这个目录所在位置可以自行决定,在这里我将其存放到 /usr/local
目录下,所以我在该目录创建一个新的目录文件夹并命名为 jvm
。首先先查看一下 /usr/local
目录下是否会有同名文件夹,输入如下命令
ls /usr/local # 查看 /usr/local 下的文件和目录
确保没有后,我们可以使用 mkdir
指令进行目录文件夹的创建,如果使用的是普通用户,则需要加上 sudo
,否则会提示 Permission denied
权限不足。
sudo mkdir /usr/local/jvm # 在 /usr/local 下创建 jvm 目录
使用 tar
指令解压 jdk-8
的安装包到 usr/local/jvm
目录下,其中 -C <src>
选项为解压到指定目录下。
tar
使用拓展:在进行大数据部署时,
tar
(tape archive)是一个常用的工具,用于打包和解压缩文件和目录。选项-zxvf
是tar
命令后面可能使用的一组参数,用于执行以下操作:
-z
:这个选项告诉tar
使用gzip
压缩算法对归档文件进行压缩或解压缩。当我们使用-z
选项时,tar
将使用gzip
压缩算法进行压缩或解压缩操作。
-x
:这个选项告诉tar
执行解压缩操作,即从归档文件中提取文件和目录。它是解压缩的意思(extract)。通过使用 -x 选项,tar 将解压缩归档文件中的内容。
-v
:这个选项是可选的,用于在tar
的操作过程中显示详细信息。它代表 verbose(冗长模式),可以在命令执行期间显示正在处理的文件和目录列表。
-f
:这个选项指定要操作的归档文件的名称。它必须是tar
命令的最后一个选项,后面应紧跟归档文件的名称。在-f
选项后面,你可以提供一个文件名或设备名称。
sudo tar -zxf downloads/jdk-8u371-linux-x64.tar.gz -C /usr/local/jvm/ 解压 jdk 的安装包到指定目录
ls -lh /usr/local/jvm/ 查看 /usr/local/jvm/ 下文件和目录信息
解压成功后
配置环境变量
给 JDK 配置环境变量的目的是为了让操作系统和其他应用程序能够正确地找到和使用 JDK。作用如下:
全局可访问 JDK: 配置环境变量后,JDK 的路径将成为系统范围内的变量,可以在任何位置访问。这意味着你可以从终端或命令提示符中直接调用 JDK 工具,而无需在每个命令中指定完整的路径。
方便的命令行开发: 配置环境变量后,你可以在命令行界面中轻松地编译和运行 Java 程序,而无需手动指定 JDK 的完整路径。这使得开发和测试过程更加高效。
依赖管理: 在开发和构建 Java 应用程序时,许多构建工具和开发环境依赖于正确配置的 JDK 环境变量。例如,Maven、Gradle 和 Eclipse 等工具会自动使用配置的环境变量来定位 JDK,并确保项目在正确的 JDK 版本下构建和运行。
支持多个 JDK 版本: 在某些情况下,你可能需要同时安装和使用多个 JDK 版本。通过配置环境变量,你可以轻松地切换不同的 JDK 版本,而无需手动更改应用程序或工具的设置。
总之,配置 JDK 的环境变量可以提高开发效率、简化命令行操作,并确保应用程序在正确的 JDK 版本下运行。这对于开发人员和系统管理员来说都非常重要,特别是在使用 Java 开发和部署大型应用程序时,所以请大家认真对待。
使用 ls
指令先看一下 jdk
安装目录下有些什么,
ll /usr/local/jvm/jdk1.8.0_371/ # 查看 /usr/local/jvm/ 下文件和目录信息
在这里我们发现有很多个目录和文件,这里我对各个目录文件进行了详细的说明:
- bin:
- 类型:目录(文件夹)
- 作用:该目录包含了
JDK
的可执行文件,如编译器(javac)、运行器(java)和其他一些工具。你可以在命令行中运行这些可执行文件来执行编译和运行 Java 程序。- COPYRIGHT:
- 类型:文件
- 作用:该文件包含
JDK
的版权信息。- include:
- 类型:目录
- 作用:该目录包含了用于开发本地代码和
JNI
(Java Native Interface)的头文件。- javafx-src.zip:
- 类型:文件
- 作用:该文件是 JavaFX 源代码的压缩包。
JavaFX
是Java
的图形用户界面框架,该文件包含了JavaFX
的源码,可供参考和学习。- jmc.txt:
- 类型:文件
- 作用:该文件包含了
JDK
中的 Java Mission Control(JMC)的说明和文档。- jre:
- 类型:目录
- 作用:该目录包含了 Java Runtime Environment(JRE)的文件,用于运行
Java
程序。JRE
是JDK
的子集,专注于运行Java
应用,而不包含开发工具。- legal:
- 类型:目录
- 作用:该目录包含了
JDK
的法律文件和许可信息。- lib:
- 类型:目录
- 作用:该目录包含了
JDK
的库文件,包括用于编译和运行 Java 程序所需的类库和扩展库。- LICENSE:
- 类型:文件
- 作用:该文件包含了
JDK
的许可证信息。- man:
- 类型:目录
- 作用:该目录包含了
JDK
的手册(man)页面,用于提供命令行工具的详细说明和使用信息。- README.html:
- 类型:文件
- 作用:该文件是
JDK
的 README 文件的 HTML 版本,提供了关于 JDK 的基本信息和说明。- release:
- 类型:文件
- 作用:该文件包含了
JDK
的版本和发布信息。- src.zip:
- 类型:文件
- 作用:该文件是
JDK
的源代码的压缩包。它包含了Java
核心库和其他JDK
组件的源代码,可以用于学习和调试目的。- THIRDPARTYLICENSEREADME-JAVAFX.txt:
- 类型:文件
- 作用:该文件包含了
JavaFX
组件的第三方许可证信息。- THIRDPARTYLICENSEREADME.txt:
- 类型:文件
- 作用:该文件包含了
JDK
中其他组件的第三方许可证信息。
以上是对每个目录文件的作用的详细说明。这些文件和目录组成了 JDK 的基本结构,包含了运行 Java 程序所需的工具、库文件、文档和其他相关内容。有很多目录文件,但我们并不需要全部了解清楚,只要知道其中几个目录文件即可,即:bin
、jre
、lib
,这三个是我们需要用于此配置环境变量的。
需要配置的环境变量一共有四个,详细介绍如下:
JAVA_HOME:
- 变量名:JAVA_HOME
- 变量值:JDK 的安装路径
- 作用:
JAVA_HOME
变量指定了 JDK 的安装路径,告诉系统和其他应用程序 JDK 的位置。这对于各种 Java 开发工具和构建工具非常重要,因为它们需要知道 JDK 的位置来编译、运行和调试 Java 程序。在配置时,你需要将
JAVA_HOME
设置为 JDK 的实际安装路径。例如,如果你的 JDK 安装在/usr/local/jdk1.8.0_XXX
,那么你的JAVA_HOME
变量应该设置为/usr/local/jdk1.8.0_XXX
。PATH:
- 变量名:PATH
- 变量值:
$PATH:$JAVA_HOME/bin
- 作用:
PATH
变量是一个包含多个路径的变量,系统会根据其中的路径来查找可执行文件。通过将 JDK 的bin
目录添加到PATH
变量中,你可以在终端或命令提示符中直接运行 Java 相关命令,而不必指定完整的路径。在配置时,你需要将 JDK 的
bin
目录添加到PATH
变量中。例如,如果你的JAVA_HOME
是/usr/local/jdk1.8.0_XXX
,那么你的PATH
变量应该包含$JAVA_HOME/bin
。这样,系统就能在PATH
中的路径中查找到 Java 相关命令。CLASSPATH:
- 变量名:CLASSPATH
- 变量值:包含 Java 类文件路径的字符串
- 作用:
CLASSPATH
变量用于指定 Java 类文件的搜索路径。当你运行 Java 程序时,Java 虚拟机(JVM)会在CLASSPATH
定义的路径中查找所需的类文件。在一般情况下,不需要在环境变量中设置
CLASSPATH
。这是因为大多数 Java 开发和构建工具(如 Maven 和 Gradle)会自动处理类路径的设置。如果你在开发过程中需要指定特定的类路径,可以在运行命令时使用-classpath
或-cp
参数来指定。这种方式比在环境变量中设置CLASSPATH
更加灵活和可控。JRE_HOME:
- 变量名:JRE_HOME
- 变量值:JRE(Java Runtime Environment)的安装路径
- 作用:
JRE_HOME
变量指定了 JRE 的安装路径,它是 JDK 中的一个子集,用于运行 Java 程序而不涉及开发。在大多数情况下,也不需要在环境变量中设置
JRE_HOME
。当你正确配置了JAVA_HOME
环境变量后,系统会自动根据JAVA_HOME
推断出JRE_HOME
的路径。JRE_HOME
变量在某些情况下可能被某些特定的应用程序或脚本使用,但它并不是常见的环境变量设置项。注意:
需要注意的是,在配置
PATH
变量时,你可能已经有其他路径存在。在多个路径之间,使用特定操作系统的路径分隔符(例如,Windows
使用分号;
,Linux
和macOS
使用冒号:
)进行分隔。虽然
CLASSPATH
和JRE_HOME
变量存在,但在大多数情况下,它们不需要在环境变量中进行额外的配置。对于类路径的设置,可以通过开发工具或在命令行中显式指定。而关于JRE
的路径,可以根据正确配置的JAVA_HOME
环境变量自动推断。
在配置环境变量时,我们一般配置的是用户级别的环境变量,也就是说这个环境变量单单只对我们配置的这个用户是有效的,对于其他用户并没有效果。一下是我对配置环境变量的一些作用的说明:
Shell 启动文件:
~/.bashrc
和~/.bash_profile
是 Bash Shell 的启动文件。Shell 启动文件在用户登录时自动加载,并设置用户的环境。这使得将环境变量配置放在这些文件中非常方便。、持久性: 将环境变量配置在
~/.bashrc
或~/.bash_profile
中可以确保它们在每次打开终端时都会自动加载。这意味着你无需手动设置环境变量,而是让系统自动读取配置文件,确保每个终端会话都具有相同的环境设置。用户级别配置:
~/.bashrc
和~/.bash_profile
是每个用户的个人配置文件。它们的作用范围仅限于当前用户,这使得每个用户可以根据自己的需求自定义环境变量,而不会影响其他用户。可扩展性: 这些配置文件允许用户执行更多的自定义操作。你可以在这些文件中添加其他命令、别名、函数等。这使得它们成为个性化用户环境的理想选择。
接下来进入实操,首先使用 vim
编辑器打开 ~/.bashrc
文件
vim ~/.bashrc
用户级别的环境变量文件内容并不多,并且在注释中已经给大家写了应该配置的地方,即 User specific aliases and functions
之后的位置。
我们只需要将下述内容
#JAVA
export JAVA_HOME=/usr/local/jvm/jdk1.8.0_371
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
配置好环境变量后就保存退出。然后使用 source
命令重新加载环境变量,最后查看一下 jdk
的版本即可验证是否成功。
source ~/.bashrc # 重新加载环境变量
java -version # 查看 java 版本
集群配置
java
单机安装到这就完成了,接下来是对集群中各个机器进行分发安装。分发我们使用 scp
命令进行分发。如果大家道 root
密码,可以直接发送到 /usr/local
目录下,如果不知道 root
密码,可以先发送到用户目录下,然后再通过 mv
命令移动到对应的目录中。
方法一
提前知道 root
密码,直接使用 scp
进行传输,一步到位
sudo scp -r /usr/local/jvm/jdk1.8.0_371/ slave1:/usr/local/jvm/ # 将整个 jdk1.8.0_371 目录发送到 slave1 的 /usr/local/jvm 下
需要使用 sudo
提升权限并且需要知道 slave1
的 root
密码。
此时到 slave1
中就可以在 /usr/local/jvm
下看到有 jdk1.8.0_371
目录存在了。
ls -l /usr/local/jvm/
方法二
直接将安装包发送到对应机器中,这样子可以不需要知道 root
密码,但需要登录到对应机器中进行解压缩的操作。
scp downloads/jdk-8u371-linux-x64.tar.gz slave2:downloads/
这里我把在 downloads
目录下的安装包传输到 slave2
的 downloads
目录下,注意必须要在 slave2
对应的用户目录下也存在有相应的 downloads
目录才可进行传输,否则会报错。
然后我们可以在 slave2
的用户目录下的 downloads
目录下能找到该安装包。
ls -lh downloads
然后通过上面的步骤即可完成 jdk
的配置。