第一篇——大数据环境部署前置条件

一、环境

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 的新用户,这个步骤最主要是为了让大家养成一个良好的习惯,以下是创建新用户的一些作用:

  1. 访问控制和安全性:通过创建新用户,可以实现访问控制和安全性。每个用户都有独立的用户名和密码,这样可以确保只有授权的用户可以登录系统。每个用户拥有自己的用户目录(Home Directory),并且对其他用户的文件和系统文件具有有限的访问权限。这种分离和控制的机制有助于防止未经授权的访问和滥用系统资源。
  2. 多用户环境Linux 是一个多用户操作系统,支持多个用户同时使用系统。通过创建新用户,可以为每个用户提供独立的工作环境和个人配置。每个用户可以自定义自己的 Shell 环境、环境变量、别名和命令历史等。这种分离的用户环境有助于提高用户之间的隔离性和工作效率。
  3. 文件和目录权限管理Linux 系统中的文件和目录都有访问权限。通过创建新用户,可以为每个用户分配适当的文件和目录权限。这样可以确保用户只能访问他们需要的文件和目录,并限制对系统关键文件的访问。通过正确设置权限,可以保护系统的安全性和数据的机密性。
  4. 进程管理和资源限制:每个用户在 Linux 系统中运行的程序和进程都属于该用户。通过创建新用户,可以实现进程管理和资源限制。管理员可以为每个用户设置进程和资源限制,例如限制最大进程数、最大内存使用量、最大文件打开数等。这有助于防止用户滥用系统资源,并提高系统的稳定性和可靠性。
  5. 审计和日志跟踪:创建新用户还有助于审计和日志跟踪。每个用户的活动和操作都可以被跟踪并记录,包括登录时间、执行的命令、文件访问等。这些日志和审计信息对于故障排除、安全审计和合规性要求非常重要。

在生产过程中,通过为每个用户分配独立的账户,可以实现对用户活动的有效控制和跟踪,从而确保系统的稳定性、安全性和高效性。

创建用户时,我们需要使用 sudo 或者使用 root 用户进行创建,因为普通用户是没有权限创建新用户的,会显示 Permission deniedcannot 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 权限的普通用户,因为仅仅是学习用途,大家谨以此

工具下载

下面我们将会用到几个工具,有 wgetvimnet-toolsopenssh-server

wget

wget 是一个常用的命令行工具,用于从网络上下载文件。它支持通过 HTTP、HTTPS 和 FTP 协议下载文件,并且具有很多有用的功能和选项。在本篇目中我们将用其来下载许多的安装包

我们可以通过输入 wget 来判断是否有下载该该工具

wget

出现 command not found 则说明找不到该命令,也就是说没有下载该工具

如下图所示则是说明已经下载了该工具

如未下载则需要输入下面命令安装该工具。

sudo yum install -y wget

出现有 Complete 说明该工具安装成功

该工具用途广泛,各位可以通过输入 wget --help 自行进行探索

基本用法
  1. 下载文件:你可以使用 wget 命令下载文件。例如,要下载一个文件,可以运行以下命令:

    wget <URL>
    

    其中 <URL> 是要下载文件的网址。

  2. 断点续传:wget 支持断点续传,即在下载中断后可以从中断处继续下载而不是重新开始。这对于大文件或不稳定的网络连接非常有用。使用 -c--continue 选项启用断点续传。例如:

    wget -c <URL>
    
  3. 限速下载:你可以使用 --limit-rate 选项限制下载速度。这在需要控制网络带宽的情况下很有用。例如,要限制下载速度为 1MB/s,可以运行以下命令:

    wget --limit-rate=1m <URL>
    
  4. 递归下载:wget 可以递归下载一个网站的所有文件,并保持相对目录结构。这对于备份整个网站或下载某个目录的所有内容非常有用。使用 -r--recursive 选项进行递归下载。例如:

    wget -r <URL>
    
  5. 后台下载:你可以使用 -b--background 选项将下载任务放到后台运行,这样你可以继续使用终端。例如:

    wget -b <URL>
    
  6. 用户名和密码验证:如果下载需要用户名和密码进行验证,可以使用 --user--password 选项提供凭据。例如:

    wget --user=<username> --password=<password> <URL>
    

除了这些,各位还可以使用 wget --helpwget 工具一些基本选项的查看,如果大家想深入了解该工具,可以输入 man wget 查看该工具的文档

man wget

vim

Vim(Vi Improved)是一种功能强大的文本编辑器,它是 Vi 编辑器的改进版本。Vim 被广泛用于 UnixLinux 和类 Unix 系统上,也可在 WindowsMac 等其他平台上运行。Vim 的设计理念是高效、可定制和面向程序员的。下面是对Vim的详细介绍:

  1. 模式Vim 有三种基本的工作模式:命令模式(Command mode)、插入模式(Insert mode)和可视模式(Visual mode)。
    • 命令模式:启动Vim后进入的默认模式,可以执行各种命令,例如移动光标、复制粘贴、搜索替换等。
    • 插入模式:在命令模式下按下插入命令(如i、o、a等)进入插入模式,可以输入和编辑文本。
    • 可视模式:在命令模式下按下可视命令(如v、V等)进入可视模式,可以选择文本进行复制、粘贴或其他操作。
  2. 快捷键和命令Vim 提供了丰富的快捷键和命令,可以大大提高编辑效率。例如:
    • 光标移动:h(左)、j(下)、k(上)、l(右)等。
    • 复制粘贴:yy(复制一行)、dd(删除一行)、p(粘贴)等。
    • 搜索替换:/(搜索)、😒/old/new/g(替换)等。
    • 撤销和重做:u(撤销)、Ctrl + r(重做)等。
  3. 可定制性Vim 非常可定制,用户可以根据自己的需求进行配置。可以编辑Vim的配置文件(.vimrc)来设置自定义的快捷键、颜色方案、插件等。Vim还支持脚本语言,如Vim脚本(Vim script)和Python等,使得用户可以编写自己的扩展功能和插件。
  4. 插件和扩展Vim 支持各种插件和扩展,可以增加额外的功能和特性。有许多流行的插件,如语法高亮、代码补全、文件资源管理器等,可以通过插件管理工具(如Vundle、Pathogen、vim-plug等)轻松安装和管理。
  5. 强大的编辑功能Vim 提供了丰富的编辑功能,包括块操作、宏录制、折叠文本、多窗口编辑等。这些功能使得处理大文件和代码编辑更加高效和便捷。
  6. 远程编辑Vim 支持通过网络远程编辑文件。使用Vim的远程编辑功能,可以通过 SSH 连接到远程主机,并在本地使用 Vim 编辑远程文件,方便远程开发和协作。

下载指令

sudo yum install vim -y
基本用法
  1. 打开文件:在命令行中输入vim命令,后跟要编辑的文件名,例如vim filename.txt。如果文件不存在,Vim将创建一个新文件。
  2. 基本操作模式:
    • 命令模式(Command mode):打开Vim后进入的默认模式。在此模式下,可以执行各种命令。例如,使用hjkl键进行光标移动,使用yy复制一行,使用dd删除一行等。
    • 插入模式(Insert mode):在命令模式下按下ioa等键进入插入模式。在插入模式中,可以输入和编辑文本。
    • 可视模式(Visual mode):在命令模式下按下vV等键进入可视模式。在可视模式中,可以选择文本并执行操作,如复制、剪切、删除等。
  3. 保存和退出:
    • 在命令模式下,输入:w保存文件。
    • 输入:q退出Vim。
    • 输入:wq保存并退出。
    • 输入:q!强制退出并放弃对文件的修改。
  4. 光标移动:
    • h:向左移动一个字符。
    • j:向下移动一行。
    • k:向上移动一行。
    • l:向右移动一个字符。
    • gg:跳转到文件的开头。
    • G:跳转到文件的末尾。
    • 0:跳转到当前行的开头。
    • $:跳转到当前行的末尾。
  5. 文本编辑:
    • i:在光标前插入文本。
    • a:在光标后插入文本。
    • o:在当前行下方插入新行。
    • dd:删除当前行。
    • yy:复制当前行。
    • p:粘贴剪贴板中的内容。
    • u:撤销上一步操作。
    • Ctrl + r:重做撤销的操作。
  6. 搜索和替换:
    • /pattern:搜索指定模式的文本。按下n跳转到下一个匹配项。
    • :s/old/new/g:替换当前行中所有的old字符串为new字符串。
    • :%s/old/new/g:替换整个文件中所有的old字符串为new字符串。
    • :%s/old/new/gc:替换整个文件中所有的old字符串为new字符串,并在替换前请求确认。
  7. 分割窗口:
    • :split:水平分割窗口。
    • :vsplit:垂直分割窗口。
    • Ctrl + w,然后按下hjkl切换焦点。
  8. 定位行号:
    • 输入行号+G:跳转到指定行号。
    • :n:跳转到指定行号。

net-tools

net-tools 是一组用于网络配置和监控的命令行工具集合,常用于 UnixLinux 系统。它提供了许多命令,可以帮助用户查看和配置网络接口、路由表、网络连接等信息。下面是对 net-tools 的详细介绍:

  1. ifconfigifconfig 命令用于查看和配置网络接口的信息。通过 ifconfig,可以获取到网络接口的 IP 地址、子网掩码、MAC 地址等信息。此外,ifconfig 还可以启用或禁用网络接口,配置网络接口的参数,例如设置 IP 地址、子网掩码、广播地址等。
  2. routeroute 命令用于查看和配置系统的路由表。路由表是记录数据包传输的规则和路径的表格。通过 route 命令,可以查看当前系统的路由表,包括目的网络、网关、接口和跃点数等信息。同时,route 还可以添加、删除或修改路由表的条目,从而改变数据包的传输路径。
  3. netstatnetstat 命令用于查看系统的网络连接和网络统计信息。通过 netstat,可以获取到系统当前的网络连接状态,包括正在监听的端口、已建立的连接、连接的状态等。netstat 还可以显示网络接口的统计信息,如接收和发送的数据包数量、错误信息等。
  4. arparp 命令用于查看和操作系统的ARP(地址解析协议)缓存表。ARP 用于将 IP 地址解析为 MAC 地址。arp 命令可以显示当前系统的 ARP 缓存表,包括IP地址和对应的 MAC 地址。此外,arp 还可以手动添加或删除ARP缓存表的条目。
  5. iptunneliptunnel 命令用于创建和管理 IP 隧道。IP隧道是一种将 IP 数据包封装在其他协议中进行传输的技术。通过 iptunne l命令,可以创建和配置 IP 隧道,例如设置隧道的本地和远程端点、隧道的传输协议等。
  6. hostnamehostname命令用于查看和设置系统的主机名。主机名是唯一标识网络中计算机的名称。通过 hostname 命令,可以获取当前系统的主机名,也可以修改系统的主机名。

下载指令

sudo yum install net-tools -y
基本用法
  1. ifconfig:用于查看和配置网络接口的信息。
    • ifconfig:显示当前系统上所有网络接口的信息。
    • ifconfig eth0:显示指定网络接口(例如eth0)的详细信息。
    • ifconfig eth0 up:启用指定网络接口。
    • ifconfig eth0 down:禁用指定网络接口。
    • ifconfig eth0 192.168.0.100 netmask 255.255.255.0:为指定网络接口配置IP地址和子网掩码。
  2. 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:添加静态路由。
  3. netstat:用于查看系统的网络连接和网络统计信息。
    • netstat:显示当前系统的网络连接状态。
    • netstat -tuln:显示TCP和UDP监听端口。
    • netstat -r:显示路由表。
    • netstat -s:显示网络统计信息,如接收和发送的数据包数量、错误信息等。
    • netstat -p:显示与进程关联的网络连接。
  4. 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条目。
  5. 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 服务器的介绍:

  1. 安全远程登录OpenSSH 服务器允许用户通过 SSH(Secure Shell)协议安全地远程登录到服务器。SSH 通过加密和身份验证机制保护登录过程的安全性,可以有效地防止密码被窃听和中间人攻击。用户可以使用 SSH 客户端工具连接到 OpenSSH 服务器,输入用户名和密码(或使用密钥认证),并在远程服务器上执行命令。
  2. 加密通信OpenSSH 服务器提供了端到端的加密通信,保护了用户和服务器之间的数据传输。所有通过 OpenSSH 服务器进行的远程会话、文件传输和端口转发等操作都经过加密处理,使得数据在传输过程中不容易被窃听和篡改。
  3. 身份验证机制OpenSSH 服务器支持多种身份验证机制,包括密码认证、公钥认证和证书认证。密码认证是最常见的方式,用户需要提供用户名和密码来登录。公钥认证使用密钥对,用户将公钥存储在服务器上,私钥用于身份验证。证书认证使用数字证书,由可信的证书颁发机构签发。
  4. 文件传输:除了远程登录,OpenSSH 服务器还支持安全的文件传输功能。用户可以使用 SCP(Secure Copy)或 SFTP(SSH File Transfer Protocol)等工具,在客户端和服务器之间进行文件的上传和下载。这些文件传输操作都经过加密处理,保护了文件的机密性和完整性。
  5. 端口转发和隧道OpenSSH 服务器支持端口转发和隧道功能。通过端口转发,用户可以在本地和远程主机之间建立安全的通信通道,实现本地端口的映射和远程访问。这对于远程访问内部网络资源或建立安全的远程服务非常有用。
  6. 配置和安全性:OpenSSH 服务器提供了灵活的配置选项,可以根据实际需求进行定制。管理员可以通过修改配置文件(通常是sshd_config)来调整服务器的行为,包括监听端口、身份验证方法、访问控制和安全选项等。通过适当的配置和安全措施,可以增强OpenSSH服务器的安全性,例如限制用户访问、禁用密码认证、限制 SSH 协议版本等。

下载指令

sudo yum install openssh-server -y
基本用法
  1. 安装OpenSSH服务器:
    • 在Debian/Ubuntu上,使用以下命令安装OpenSSH服务器:sudo apt-get install openssh-server
    • 在Red Hat/CentOS上,使用以下命令安装OpenSSH服务器:sudo yum install openssh-server
  2. 启动和停止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
  3. 远程登录:
    • 使用SSH客户端连接到OpenSSH服务器:ssh username@hostname
    • 例如,使用用户名为"username"和主机名为"example.com"的SSH连接:ssh username@example.com
    • 如果使用默认的SSH端口(22),则可以省略端口号:ssh username@hostname
  4. 配置文件:
    • OpenSSH服务器的配置文件为/etc/ssh/sshd_config
    • 可以使用文本编辑器(如vim)编辑配置文件:sudo vim /etc/ssh/sshd_config
    • 在配置文件中,可以设置各种选项,如监听端口、身份验证方法、访问控制等。
    • 修改配置文件后,需要重新启动OpenSSH服务器使更改生效。
  5. 密钥认证:
    • OpenSSH服务器支持公钥认证,提供更安全的登录方式。
    • 生成密钥对(公钥和私钥):ssh-keygen -t rsa
    • 将公钥复制到OpenSSH服务器上的~/.ssh/authorized_keys文件中,以实现无密码登录。
  6. 文件传输:
    • 使用SCP(Secure Copy)命令从本地系统上传文件到远程系统:scp localfile username@hostname:remotefile
    • 使用SCP命令从远程系统下载文件到本地系统:scp username@hostname:remotefile localfile
  7. 端口转发:
    • OpenSSH服务器支持端口转发功能,用于建立安全的通信通道。
    • 本地端口转发:ssh -L local_port:destination:destination_port username@hostname
    • 远程端口转发:ssh -R remote_port:destination:destination_port username@hostname
  8. 登录访问控制:
    • 在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.ClientOpenSSH.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-------

再次查看,可以发现权限已经修改完成。

秘钥传输

这里我们用三台机器,分别为:masterslave1slave2 进行演示。秘钥生成完毕后,需要将秘钥传输到各台机器上,这个步骤我们需要操作多台机器,首先我们将 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 追加到 slave1authorized_keys 文件中

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

对比发现,追加之后秘钥文件中多了一个 slave1 的秘钥。

然后同样的步骤,我们将 slave1authorized_keys 传输到 slave2.ssh 目录下,然后将slave2 的密钥文件 id_rsa.pub 追加到 slave2authorized_keys 文件中

scp -r  ~/.ssh/authorized_keys slave2:~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

使用 cat 指令即可查看文件内容,进行对比,秘钥传输完成。

然后我们需要将秘钥回传,即将将slave2authorized_keys 回传到 slave1master 上,同样地,我们使用 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-------

最后再测试一下是否可以免密登录即可。

关闭防火墙

在部署环境的过程中,我们需要将防火墙进行关闭,以下是关闭防火墙的目的:

  1. 应用程序需要特定的网络连接: 某些应用程序可能需要通过特定的端口或协议进行网络通信。防火墙的默认配置可能会阻止这些连接,因此关闭防火墙可以确保应用程序能够正常建立所需的网络连接。

  2. 简化网络配置和故障排除: 在某些情况下,防火墙的配置可能会很复杂,特别是当你有多个网络规则和端口需要管理时。关闭防火墙可以简化网络配置,减少可能的故障,并简化故障排除过程。

  3. 测试和开发环境的需要: 在测试和开发环境中,通常需要频繁地安装、配置和测试各种应用程序和服务。关闭防火墙可以简化这些环境的设置,避免网络连接问题对开发和测试造成的干扰。

本篇为学习用途,所以可以放心将虚拟机的防火墙关闭,如果是在实际生产环境中,个人还是不建议关闭防火墙的。

防火墙在 CentOS 中一般有两种,一种是原生态的 firewalld,另一种是 iptables。下面我来对这两个防火墙进行一下说明

  1. firewalld

    • 用途:firewalld 是一个动态的防火墙管理工具,旨在提供简化的管理界面和配置选项。它支持在运行时动态更新防火墙规则,并提供了更高级的功能,如服务管理、区域管理和网络接口管理。
    • 不同点:firewalld 基于网络区域的概念,可以为每个区域(如公共、内部、DMZ)定义不同的安全策略。它还支持通过 D-Bus 接口进行远程管理,并具有良好的日志和审计功能。
    • 优势:firewalld 的优势在于其动态性和可管理性。它可以在运行时更改防火墙规则,无需重启服务或断开连接。它还提供了一套高级的管理工具和接口,使配置和管理更加简单和灵活。
  2. iptables

    • 用途:iptablesLinux 系统上的一个经典防火墙工具,用于配置和管理内核的网络数据包过滤规则。它通过定义不同的规则链和规则来控制网络流量,实现网络安全策略的实施。
    • 不同点:iptables 是一个底层的、静态的防火墙配置工具。它的配置是基于预定义的表、链和规则的,需要手动更新配置文件或使用命令行工具进行修改。iptables 对于高级网络过滤和路由设置提供了更大的灵活性和细粒度的控制。
    • 优势:iptables 的优势在于其灵活性和可定制性。它提供了丰富的规则选项,可以根据特定的需求定义复杂的网络过滤和转发规则。iptables 还具有广泛的社区支持和文档资源。

比较两者的优劣性是一个复杂的问题,因为它们有不同的设计目标和适用场景,所以我们只进行一些最初始的比较,这并不能作为衡量二者好坏的依据,请大家根据实际情况进行选择使用。

  1. 动态性和可管理性:firewalld 在动态性和可管理性方面具有优势,可以在运行时动态更改配置,提供更高级的管理界面和选项。而 iptables 的配置是静态的,需要手动编辑配置文件或使用命令行工具进行修改。

  2. 灵活性和定制性:iptables 在灵活性和定制性方面具有优势,可以提供更细粒度的网络过滤和路由控制。它允许用户根据具体需求定义复杂的规则和链。

  3. 社区支持和成熟度:iptables 是一个经过时间验证的工具,具有广泛的社区支持和文档资源。firewalld 是较新的工具,虽然也有一定的社区支持,但相对而言可能没有 iptables 那么成熟。

可以使用指令来查看是否有安装 firewalldiptables 防火墙

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 在大数据环境中的几个重要作用:

  1. 支持大数据工具和框架:许多大数据工具和框架,如Apache Hadoop、Apache Spark、Apache Flink、Apache Kafka等,都是用Java编写的,并且需要在Java运行时环境中进行编译和执行。安装 JDK 8 可以提供必要的Java运行时环境,以支持这些工具和框架的正常运行。
  2. 开发和调试大数据应用程序:JDK 8 包含了 Java 编译器(javac)和调试器(java debugger),使开发人员能够编写、编译和调试大数据应用程序。大数据应用程序通常涉及复杂的逻辑和算法,通过使用 JDK 8,开发人员可以利用其丰富的工具和功能来创建和调试高效的大数据应用程序。
  3. 提供标准Java类库:JDK 8 提供了广泛的标准Java类库,这些类库包括处理文件、网络通信、数据结构、多线程、加密、日期时间处理等常用功能。大数据应用程序通常需要使用这些类库中的功能来处理数据、进行计算和实现业务逻辑。
  4. 兼容性和稳定性: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 的方式并不相同。这里需要使用到一些传输工具,可以是 XftpXShellFinalShell等工具都可以,这里我们使用 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)是一个常用的工具,用于打包和解压缩文件和目录。选项 -zxvftar 命令后面可能使用的一组参数,用于执行以下操作:

-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/ 下文件和目录信息

在这里我们发现有很多个目录和文件,这里我对各个目录文件进行了详细的说明:

  1. bin
    • 类型:目录(文件夹)
    • 作用:该目录包含了 JDK 的可执行文件,如编译器(javac)、运行器(java)和其他一些工具。你可以在命令行中运行这些可执行文件来执行编译和运行 Java 程序。
  2. COPYRIGHT
    • 类型:文件
    • 作用:该文件包含 JDK 的版权信息。
  3. include
    • 类型:目录
    • 作用:该目录包含了用于开发本地代码和 JNI(Java Native Interface)的头文件。
  4. javafx-src.zip
    • 类型:文件
    • 作用:该文件是 JavaFX 源代码的压缩包。JavaFXJava 的图形用户界面框架,该文件包含了 JavaFX 的源码,可供参考和学习。
  5. jmc.txt
    • 类型:文件
    • 作用:该文件包含了 JDK 中的 Java Mission Control(JMC)的说明和文档。
  6. jre
    • 类型:目录
    • 作用:该目录包含了 Java Runtime Environment(JRE)的文件,用于运行 Java 程序。JREJDK 的子集,专注于运行 Java 应用,而不包含开发工具。
  7. legal
    • 类型:目录
    • 作用:该目录包含了 JDK 的法律文件和许可信息。
  8. lib
    • 类型:目录
    • 作用:该目录包含了 JDK 的库文件,包括用于编译和运行 Java 程序所需的类库和扩展库。
  9. LICENSE
    • 类型:文件
    • 作用:该文件包含了 JDK 的许可证信息。
  10. man
    • 类型:目录
    • 作用:该目录包含了 JDK 的手册(man)页面,用于提供命令行工具的详细说明和使用信息。
  11. README.html
    • 类型:文件
    • 作用:该文件是 JDK 的 README 文件的 HTML 版本,提供了关于 JDK 的基本信息和说明。
  12. release
    • 类型:文件
    • 作用:该文件包含了 JDK 的版本和发布信息。
  13. src.zip
    • 类型:文件
    • 作用:该文件是 JDK 的源代码的压缩包。它包含了 Java 核心库和其他 JDK 组件的源代码,可以用于学习和调试目的。
  14. THIRDPARTYLICENSEREADME-JAVAFX.txt
    • 类型:文件
    • 作用:该文件包含了 JavaFX 组件的第三方许可证信息。
  15. THIRDPARTYLICENSEREADME.txt
    • 类型:文件
    • 作用:该文件包含了 JDK 中其他组件的第三方许可证信息。

以上是对每个目录文件的作用的详细说明。这些文件和目录组成了 JDK 的基本结构,包含了运行 Java 程序所需的工具、库文件、文档和其他相关内容。有很多目录文件,但我们并不需要全部了解清楚,只要知道其中几个目录文件即可,即:binjrelib,这三个是我们需要用于此配置环境变量的。

需要配置的环境变量一共有四个,详细介绍如下:

  1. 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

  2. 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 相关命令。

  3. CLASSPATH:

    • 变量名:CLASSPATH
    • 变量值:包含 Java 类文件路径的字符串
    • 作用:CLASSPATH 变量用于指定 Java 类文件的搜索路径。当你运行 Java 程序时,Java 虚拟机(JVM)会在 CLASSPATH 定义的路径中查找所需的类文件。

    在一般情况下,不需要在环境变量中设置 CLASSPATH。这是因为大多数 Java 开发和构建工具(如 Maven 和 Gradle)会自动处理类路径的设置。如果你在开发过程中需要指定特定的类路径,可以在运行命令时使用 -classpath-cp 参数来指定。这种方式比在环境变量中设置 CLASSPATH 更加灵活和可控。

  4. JRE_HOME:

    • 变量名:JRE_HOME
    • 变量值:JRE(Java Runtime Environment)的安装路径
    • 作用:JRE_HOME 变量指定了 JRE 的安装路径,它是 JDK 中的一个子集,用于运行 Java 程序而不涉及开发。

    在大多数情况下,也不需要在环境变量中设置 JRE_HOME。当你正确配置了 JAVA_HOME 环境变量后,系统会自动根据 JAVA_HOME 推断出 JRE_HOME 的路径。JRE_HOME 变量在某些情况下可能被某些特定的应用程序或脚本使用,但它并不是常见的环境变量设置项。

  5. 注意

    需要注意的是,在配置 PATH 变量时,你可能已经有其他路径存在。在多个路径之间,使用特定操作系统的路径分隔符(例如,Windows 使用分号 ;LinuxmacOS 使用冒号 :)进行分隔。

    虽然 CLASSPATHJRE_HOME 变量存在,但在大多数情况下,它们不需要在环境变量中进行额外的配置。对于类路径的设置,可以通过开发工具或在命令行中显式指定。而关于 JRE 的路径,可以根据正确配置的 JAVA_HOME 环境变量自动推断。

在配置环境变量时,我们一般配置的是用户级别的环境变量,也就是说这个环境变量单单只对我们配置的这个用户是有效的,对于其他用户并没有效果。一下是我对配置环境变量的一些作用的说明:

  1. Shell 启动文件: ~/.bashrc~/.bash_profile 是 Bash Shell 的启动文件。Shell 启动文件在用户登录时自动加载,并设置用户的环境。这使得将环境变量配置放在这些文件中非常方便。、

  2. 持久性: 将环境变量配置在 ~/.bashrc~/.bash_profile 中可以确保它们在每次打开终端时都会自动加载。这意味着你无需手动设置环境变量,而是让系统自动读取配置文件,确保每个终端会话都具有相同的环境设置。

  3. 用户级别配置: ~/.bashrc~/.bash_profile 是每个用户的个人配置文件。它们的作用范围仅限于当前用户,这使得每个用户可以根据自己的需求自定义环境变量,而不会影响其他用户。

  4. 可扩展性: 这些配置文件允许用户执行更多的自定义操作。你可以在这些文件中添加其他命令、别名、函数等。这使得它们成为个性化用户环境的理想选择。

接下来进入实操,首先使用 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 提升权限并且需要知道 slave1root 密码。

此时到 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 目录下的安装包传输到 slave2downloads 目录下,注意必须要在 slave2 对应的用户目录下也存在有相应的 downloads 目录才可进行传输,否则会报错。

然后我们可以在 slave2 的用户目录下的 downloads 目录下能找到该安装包。

ls -lh downloads

然后通过上面的步骤即可完成 jdk 的配置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

He.ZaoCha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值