1:CDH介绍
CDH是Cloudera的100%开源平台发行版,包括Apache Hadoop,专为满足企业需求而构建。CDH提供开箱即用的企业使用所需的一切。通过将Hadoop与十几个其他关键的开源项目集成,Cloudera创建了一个功能先进的系统,可帮助您执行端到端的大数据工作流程。
简单来说:CDH 是一个拥有集群自动化安装、中心化管理、集群监控、报警功能的一个工具(软件),使得集群的安装可以从几天的时间缩短为几个小时,运维人数也会从数十人降低到几个人,极大的提高了集群管理的效率。
2:CDH现状分析
Cloudera公司合并Hortonworks公司之后(2018年10月份合并的),会将CDH和HDP这两个产品进行合并,推出一款统一旗舰产品CDP(Cloudera Data Platform),它也是Cloudera新兴的“企业数据云”战略的核心。
Cloudera宣布他们将继续支持现有的CDH和HDP平台一直到2022年1月,同时在这3年对现有的产品还会进行交叉组合。
目前CDP还不是特别成熟,所以目前在企业中使用的时候还是优先使用CDH或者HDP。
3:CDH集群规划(3台机器)
在实际工作中搭建CDH集群的话,理论上来说,集群机器数量肯定是越多越好的,如果资源有限的话,前期建议至少4台机器。
我在这里使用了3台,是因为我本地的物理服务器是24core、64g的,按照单机8core 16 g最多只能虚拟出来3台。
4台机器的话,针对Hadoop集群而言,可以设置为1主3从。
如果考虑到主节点HA的话,那就至少需要5台机器了。
注意:如果是在测试环境搭建的话,单机内存至少分配8G内存,否则CDH集群可能无法启动,因为CDH集群本身是会占用一部分内存资源的。
4:下载需要用到的离线软件安装包
需要用到的软件安装包如图所示:
下载地址:
链接:https://pan.baidu.com/s/1Ww3HkvCcGyhgm4vwtuWpNQ
提取码:w4oz
5:正式开始安装部署
5.1:3台机器静态IP配置,具体操作步骤不再赘述
https://blog.csdn.net/weixin_40612128/article/details/119007776?spm=1001.2014.3001.5501
192.168.1.101
192.168.1.102
192.168.1.103
5.2:3台机器主机名配置,临时配置+永久配置
https://blog.csdn.net/weixin_40612128/article/details/119008039?spm=1001.2014.3001.5501
在192.168.1.101机器上配置主机名为:cdh01
[root@localhost ~]# hostname cdh01
[root@localhost ~]# vi /etc/hostname
cdh01
在192.168.1.102机器上配置主机名为:cdh02
[root@localhost ~]# hostname cdh02
[root@localhost ~]# vi /etc/hostname
cdh02
在192.168.1.103机器上配置主机名为:cdh03
[root@localhost ~]# hostname cdh03
[root@localhost ~]# vi /etc/hostname
cdh03
5.3:绑定集群内所有机器的主机名和ip的映射关系
在cdh01节点上操作
[root@cdh01 ~]# vi /etc/hosts
192.168.1.101 cdh01
192.168.1.102 cdh02
192.168.1.103 cdh03
在cdh02节点上操作
[root@cdh02 ~]# vi /etc/hosts
192.168.1.101 cdh01
192.168.1.102 cdh02
192.168.1.103 cdh03
在cdh03节点上操作
[root@cdh03 ~]# vi /etc/hosts
192.168.1.101 cdh01
192.168.1.102 cdh02
192.168.1.103 cdh03
注意:做到这一步的时候最好是验证一下前面的配置是否正确。
可以随便选择一台机器使用主机名ping一下集群内的所有机器
在这我选择第一台机器cdh01,在里面执行下面命令进行验证
如果都可以ping通,并且显示的对应主机名的ip信息也是正确的,那就说明前面的配置是没问题的。
当然,100%稳妥的方案是在每一台机器上都执行一遍下面的操作,可以确保万无一失。
在cdh01节点上操作
[root@cdh01 ~]# ping cdh01
PING cdh01 (192.168.1.101) 56(84) bytes of data.
64 bytes from cdh01 (192.168.1.101): icmp_seq=1 ttl=64 time=0.107 ms
64 bytes from cdh01 (192.168.1.101): icmp_seq=2 ttl=64 time=0.095 ms
64 bytes from cdh01 (192.168.1.101): icmp_seq=3 ttl=64 time=0.063 ms
[root@cdh01 ~]# ping cdh02
PING cdh02 (192.168.1.102) 56(84) bytes of data.
64 bytes from cdh02 (192.168.1.102): icmp_seq=1 ttl=64 time=0.812 ms
64 bytes from cdh02 (192.168.1.102): icmp_seq=2 ttl=64 time=0.513 ms
64 bytes from cdh02 (192.168.1.102): icmp_seq=3 ttl=64 time=0.486 ms
[root@cdh01 ~]# ping cdh03
PING cdh03 (192.168.1.103) 56(84) bytes of data.
64 bytes from cdh03 (192.168.1.103): icmp_seq=1 ttl=64 time=0.432 ms
64 bytes from cdh03 (192.168.1.103): icmp_seq=2 ttl=64 time=0.423 ms
64 bytes from cdh03 (192.168.1.103): icmp_seq=3 ttl=64 time=0.453 ms
5.4:关闭集群内所有机器的防火墙,临时关闭+永久关闭
提示:如果集群内的所有机器都是内网环境,关闭防火墙是没有问题的,如果集群内的所有机器都是外网环境,那么就不能直接关闭防火墙了,需要按需对外开放端口了。
在cdh01节点上操作
[root@cdh01 ~]# systemctl stop firewalld
[root@cdh01 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
在cdh02节点上操作
[root@cdh02 ~]# systemctl stop firewalld
[root@cdh02 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
在cdh03节点上操作
[root@cdh03 ~]# systemctl stop firewalld
[root@cdh03 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
5.5:实现集群内所有节点之间的互相免密码登录
先实现每一个节点自己免密码登录自己
在cdh01节点上操作
[root@cdh01 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:evlMv6LwPX8VqXkM9TlfKYL/u/vT0jbnjGmTuWG0i5w root@cdh01
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| . . =|
| . . o *o|
| S . . B =|
| . . . + +o|
| o o . . ==.|
| + =oo =BO=|
| o.++EBXB*|
+----[SHA256]-----+
[root@cdh01 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@cdh01 ~]# ssh cdh01
The authenticity of host 'cdh01 (192.168.1.101)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh01,192.168.1.101' (ECDSA) to the list of known hosts.
Last login: Wed Oct 28 14:15:17 2020 from 192.168.1.6
[root@cdh01 ~]# exit
logout
Connection to cdh01 closed.
在cdh02节点上操作
[root@cdh02 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hWzkqlt8sxCOfBJqa1XSszEGACg6eYtHgL/s/qEiVtY root@cdh02
The key's randomart image is:
+---[RSA 2048]----+
|+... . |
|= . + . |
|o+ o = . |
|+ + . Bo . |
| * oo+o=S |
|. ==.E.. |
| o=.* * o |
|oooo * o o |
|o++.o . |
+----[SHA256]-----+
[root@cdh02 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@cdh02 ~]# ssh cdh02
The authenticity of host 'cdh02 (192.168.1.102)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh02,192.168.1.102' (ECDSA) to the list of known hosts.
Last login: Wed Oct 28 14:15:19 2020 from 192.168.1.6
[root@cdh02 ~]# exit
logout
Connection to cdh02 closed.
在cdh03节点上操作
[root@cdh03 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:BZ3+Mebi+P7dSfMFQBau9TkhAH1X/u+d1LRZyjmmfXw root@cdh03
The key's randomart image is:
+---[RSA 2048]----+
| o+..+. ..|
| .+=. .. |
| ...=.. .|
| ..o++ o.|
| S .+ o= +|
| . o. **|
| o . *B+|
| . . =o+E|
| oo.o o+*|
+----[SHA256]-----+
[root@cdh03 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@cdh03 ~]# ssh cdh03
The authenticity of host 'cdh03 (192.168.1.103)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh03,192.168.1.103' (ECDSA) to the list of known hosts.
Last login: Wed Oct 28 14:15:20 2020 from 192.168.1.6
[root@cdh03 ~]# exit
logout
Connection to cdh03 closed.
接着实现cdh01免密码登录cdh02和cdh03
在cdh01节点上操作
[root@cdh01 ~]# scp ~/.ssh/authorized_keys cdh02:~/
The authenticity of host 'cdh02 (192.168.1.102)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh02,192.168.1.102' (ECDSA) to the list of known hosts.
root@cdh02's password:
authorized_keys 100% 392 87.3KB/s 00:00
[root@cdh01 ~]# scp ~/.ssh/authorized_keys cdh03:~/
The authenticity of host 'cdh03 (192.168.1.103)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh03,192.168.1.103' (ECDSA) to the list of known hosts.
root@cdh03's password:
authorized_keys 100% 392 80.9KB/s 00:00
在cdh02和cdh03节点上操作
[root@cdh02 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
[root@cdh03 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
此时cdh01节点就可以免密码登录cdh02和cdh03了
验证一下
[root@cdh01 ~]# ssh cdh02
Last login: Wed Oct 28 14:31:26 2020 from cdh02
[root@cdh02 ~]# exit
logout
Connection to cdh02 closed.
[root@cdh01 ~]# ssh cdh03
Last login: Wed Oct 28 14:32:14 2020 from cdh03
[root@cdh03 ~]# exit
logout
Connection to cdh03 closed.
接着实现cdh02免密码登录cdh01和cdh03
在cdh02节点上操作
[root@cdh02 ~]# scp ~/.ssh/authorized_keys cdh01:~/
The authenticity of host 'cdh01 (192.168.1.101)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh01,192.168.1.101' (ECDSA) to the list of known hosts.
root@cdh01's password:
authorized_keys 100% 784 184.0KB/s 00:00
[root@cdh02 ~]# scp ~/.ssh/authorized_keys cdh03:~/
The authenticity of host 'cdh03 (192.168.1.103)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh03,192.168.1.103' (ECDSA) to the list of known hosts.
root@cdh03's password:
authorized_keys 100% 784 287.5KB/s 00:00
在cdh01和cdh03节点上操作
[root@cdh01 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
[root@cdh03 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
此时cdh02节点就可以免密码登录cdh01和cdh03了
验证一下
[root@cdh02 ~]# ssh cdh01
Last login: Wed Oct 28 14:30:12 2020 from cdh01
[root@cdh01 ~]# exit
logout
Connection to cdh01 closed.
[root@cdh02 ~]# ssh cdh03
Last login: Wed Oct 28 14:46:18 2020 from cdh01
[root@cdh03 ~]# exit
logout
Connection to cdh03 closed.
最后实现cdh03免密码登录cdh01和cdh02
在cdh03节点上操作
[root@cdh03 ~]# scp ~/.ssh/authorized_keys cdh01:~/
The authenticity of host 'cdh01 (192.168.1.101)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh01,192.168.1.101' (ECDSA) to the list of known hosts.
root@cdh01's password:
authorized_keys 100% 1568 524.1KB/s 00:00
[root@cdh03 ~]# scp ~/.ssh/authorized_keys cdh02:~/
The authenticity of host 'cdh02 (192.168.1.102)' can't be established.
ECDSA key fingerprint is SHA256:nvjZTkHTx5lnNrXNqS4ORCP3QSiEKJIcmAY/9FSqlUo.
ECDSA key fingerprint is MD5:d5:da:8e:71:9a:b5:45:0b:ca:36:85:61:07:1d:53:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cdh02,192.168.1.102' (ECDSA) to the list of known hosts.
root@cdh02's password:
authorized_keys 100% 1568 707.5KB/s 00:00
在cdh01和cdh02节点上操作
[root@cdh01 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
[root@cdh02 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
此时cdh03节点就可以免密码登录cdh01和cdh02了
验证一下
[root@cdh03 ~]# ssh cdh01
Last login: Wed Oct 28 14:52:50 2020 from cdh02
[root@cdh01 ~]# exit
logout
Connection to cdh01 closed.
[root@cdh03 ~]# ssh cdh02
Last login: Wed Oct 28 14:46:11 2020 from cdh01
[root@cdh02 ~]# exit
logout
Connection to cdh02 closed.
到此为止,集群内的所有节点都可以互相免密码登录了。
5.6:在集群内搭建ntp时间服务器
因为要保证集群内所有节点的时间是一致的,否则集群会不稳定。
在集群内的所有节点上安装ntp服务,同步同一个ntp时间服务器(阿里云ntp时间服务器)。
这样就可以实现集群内所有节点的时间保持一致。
效果如果所示。
首先在cdh01节点上操作
安装ntp服务,同步阿里云ntp服务器时间
[root@cdh01 ~]# yum -y install ntp
[root@cdh01 ~]# vi /etc/ntp.conf
.....
# 将下面这四行内容注释掉
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 然后增加一行内容
server ntp.aliyun.com
然后在cdh02节点上操作
[root@cdh02 ~]# yum -y install ntp
[root@cdh02 ~]# vi /etc/ntp.conf
.....
# 将下面这四行内容注释掉
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 然后增加一行内容
server ntp.aliyun.com
然后在cdh03节点上操作
[root@cdh03 ~]# yum -y install ntp
[root@cdh03 ~]# vi /etc/ntp.conf
.....
# 将下面这四行内容注释掉
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 然后增加一行内容
server ntp.aliyun.com
前面把ntp服务的配置都搞定了,接下来需要启动ntp服务,并且把ntp服务添加到开机启动项里面。
分别在cdh01、cdh02、cdh03上操作
启动ntp服务
[root@cdh01 ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
[root@cdh02 ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
[root@cdh03 ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
添加到开机启动项里面
[root@cdh01 ~]# systemctl enable ntpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@cdh02 ~]# systemctl enable ntpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@cdh03 ~]# systemctl enable ntpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
配置好了以后查看验证一下当前同步的时间服务器
随便找一台机查看一下。
注意:需要等5~10分钟才能看到类似下面的结果,显示出来下面这种结果的时候才说明是真正成功了,如果看不到这样的效果,需要等一会再来查看。
在cdh01节点上操作【在其它节点上操作,最终也可以看到类似这样的结果】
[root@cdh01 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*203.107.6.88 100.107.25.114 2 u 40 128 377 36.058 -7.906 1.142
[root@cdh01 ~]# ntpstat
synchronised to NTP server (203.107.6.88) at stratum 3
time correct to within 42 ms
polling server every 128 s
5.7:在集群内的所有节点上安装jdk
建议使用cdh提供的jdk
官方下载地址:
https://archive.cloudera.com/cm6/6.2.1/redhat7/yum/RPMS/x86_64/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
本文提供的百度网盘下载链接中也有这个文件,前面已经下载过了。
首先在cdh01节点上操作
使用文件上传工具将jdk的rpm安装包上传到cdh01的/opt目录下
[root@cdh01 opt]# ll
-rw-r--r--. 1 root root 184988341 Oct 27 15:38 oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
安装jdk
[root@cdh01 opt]# rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
注意:jdk默认会被安装到/usr/java目录中。
配置jdk环境变量,在/etc/profile文件末尾增加下面内容
[root@cdh01 opt]# vi /etc/profile
#.....
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=.:$PATH:$JAVA_HOME/bin
重新加载环境变量
[root@cdh01 opt]# source /etc/profile
验证jdk是否安装成功
[root@cdh01 opt]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
通过scp远程拷贝将cdh01上的jdk安装包拷贝到cdh02和cdh03的/opt目录中,方便后续的安装配置
[root@cdh01 opt]# scp -rq oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm cdh02:/opt/
[root@cdh01 opt]# scp -rq oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm cdh03:/opt/
然后在cdh02节点上操作
安装jdk
[root@cdh02 opt]# rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
配置jdk环境变量,在/etc/profile文件末尾增加下面内容
[root@cdh02 opt]# vi /etc/profile
#.....
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=.:$PATH:$JAVA_HOME/bin
重新加载环境变量
[root@cdh02 opt]# source /etc/profile
验证jdk是否安装成功
[root@cdh02 opt]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
然后在cdh03节点上操作
安装jdk
[root@cdh03 opt]# rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
配置jdk环境变量,在/etc/profile文件末尾增加下面内容
[root@cdh03 opt]# vi /etc/profile
#.....
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=.:$PATH:$JAVA_HOME/bin
重新加载环境变量
[root@cdh03 opt]# source /etc/profile
验证jdk是否安装成功
[root@cdh03 opt]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
5.8:在cdh01节点上安装MySQL
卸载原生的mariadb
[root@cdh01 opt]# rpm -qa|grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64
[root@cdh01 opt]# rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
将MySQL安装包上传到cdh01的/opt目录中
本文提供的百度网盘下载链接中也有这个文件,前面已经下载过了。
[root@cdh01 opt]# ll
-rw-r--r--. 1 root root 541163520 Oct 27 16:04 mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar
解压MySQL安装包
[root@cdh01 opt]# tar -xvf mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar
安装MySQL
[root@cdh01 opt]# rpm -ivh mysql-community-common-5.7.31-1.el7.x86_64.rpm --force --nodeps
[root@cdh01 opt]# rpm -ivh mysql-community-libs-5.7.31-1.el7.x86_64.rpm --force --nodeps
[root@cdh01 opt]# rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm --force --nodeps
[root@cdh01 opt]# rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm --force --nodeps
[root@cdh01 opt]# rpm -ivh mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm --force --nodeps
下面开始配置MySQL
先初始化MySQL
[root@cdh01 opt]# mysqld --initialize --user=mysql
获取MySQL生成的随机密码,在文件/var/log/mysqld.log的最后一行
[root@cdh01 opt]# cat /var/log/mysqld.log | tail -1
2020-10-28T11:51:25.902353Z 1 [Note] A temporary password is generated for root@localhost: Z+W(z1V%cii=
如图:【在使用的时候注意密码中字幕的大小写】
设置MySQL服务开机启动
[root@cdh01 opt]# systemctl start mysqld.service
重启一下MySQL服务,否则连不上去
[root@cdh01 opt]# systemctl restart mysqld
连接MySQL,修改密码【不修改密码无法使用】
注意:alter user user() identified by “admin”;表示将root用户的密码设置为admin。
[root@cdh01 opt]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.31
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> alter user user() identified by "admin";
Query OK, 0 rows affected (0.01 sec)
在MySQL中创建数据库,后面会用到这些库。
mysql> create database cmserver default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on cmserver.* to 'root'@'%' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database metastore default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.01 sec)
mysql> grant all on metastore.* to 'root'@'%' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database rman default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on rman.* to 'root'@'%' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database oozie default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on oozie.* to 'root'@'%' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database hue default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on hue.* to 'root'@'%' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)
创建/usr/share/java目录,将mysql的connector驱动jar包上传到里面
注意:需要在集群内的所有节点操作
先在cdh01、cdh02、cdh03上创建目录
[root@cdh01 ~]# mkdir -p /usr/share/java
[root@cdh02 ~]# mkdir -p /usr/share/java
[root@cdh03 ~]# mkdir -p /usr/share/java
将mysql的connector驱动jar包上传到集群内所有节点的/usr/share/java目录中
本文提供的百度网盘下载链接中也有这个jar包,前面已经下载过了。
[root@cdh01 java]# ll
total 4348
-rw-r--r--. 1 root root 1007502 Aug 7 2018 mysql-connector-java-5.1.47.jar
[root@cdh02 java]# ll
-rw-r--r--. 1 root root 1007502 Aug 7 2018 mysql-connector-java-5.1.47.jar
[root@cdh03 java]# ll
-rw-r--r--. 1 root root 1007502 Aug 7 2018 mysql-connector-java-5.1.47.jar
注意:上传成功之后,一定要记得对这个jar包重命名
分别在cdh01、cdh02、cdh03上执行
[root@cdh01 java]# mv mysql-connector-java-5.1.47.jar mysql-connector-java.jar
[root@cdh02 java]# mv mysql-connector-java-5.1.47.jar mysql-connector-java.jar
[root@cdh03 java]# mv mysql-connector-java-5.1.47.jar mysql-connector-java.jar
5.9:在cdh01节点上安装Httpd服务
使用yum在线安装httpd
[root@cdh01 opt]# yum -y install httpd
启动httpd服务
[root@cdh01 opt]# systemctl start httpd
添加到开启启动项中
[root@cdh01 opt]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
5.10:在cdh01节点上配置Cloudera Manager包
创建目录
[root@cdh01 opt]# mkdir -p /var/www/html/cloudera-repos/cm6
将Cloudera Manager的相关文件上传到/var/www/html/cloudera-repos/cm6目录中
Cloudera Manager的相关文件下载地址:
这些文件最终的整理版在本文提供的百度网盘下载链接中也有,前面已经下载过了。
上传成功之后的效果如下:
[root@cdh01 cm6]# pwd
/var/www/html/cloudera-repos/cm6
[root@cdh01 cm6]# ll
total 1181624
-rw-r--r--. 1 root root 14041 Oct 26 17:08 allkeys.asc
-rw-r--r--. 1 root root 10215608 Oct 26 17:08 cloudera-manager-agent-6.2.1-1426065.el7.x86_64.rpm
-rw-r--r--. 1 root root 1199718256 Oct 26 18:46 cloudera-manager-daemons-6.2.1-1426065.el7.x86_64.rpm
-rw-r--r--. 1 root root 9988 Oct 26 17:07 cloudera-manager-server-6.2.1-1426065.el7.x86_64.rpm
-rw-r--r--. 1 root root 10996 Oct 26 17:08 cloudera-manager-server-db-2-6.2.1-1426065.el7.x86_64.rpm
-rw-r--r--. 1 root root 1718 Oct 27 17:41 RPM-GPG-KEY-cloudera
下载createrepo
官方下载地址:
`http://www.rpmfind.net/linux/rpm2html/search.php?query=createrepo
本文提供的百度网盘下载链接中也有这个文件,前面已经下载过了。
将下载的createrepo-0.9.9-28.el7.noarch.rpm上传到/opt目录中
[root@cdh01 opt]# ll
-rw-r--r--. 1 root root 95840 Oct 27 16:55 createrepo-0.9.9-28.el7.noarch.rpm
安装createrepo
[root@cdh01 opt]# rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm --force --nodeps
官方下载地址:
http://mirror.centos.org/centos/7/os/x86_64/Packages/python-deltarpm-3.6-3.el7.x86_64.rpm
本文提供的百度网盘下载链接中也有这个文件,前面已经下载过了。
将下载好的python-deltarpm-3.6-3.el7.x86_64.rpm上传到/opt目录中
[root@cdh01 opt]# ll
-rw-r--r--. 1 root root 32084 Oct 27 17:07 python-deltarpm-3.6-3.el7.x86_64.rpm
安装deltarpm
[root@cdh01 opt]# rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm --force --nodeps
创建repodata
[root@cdh01 cm6]# createrepo .
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 1 pkgs
Spawning worker 2 with 1 pkgs
Spawning worker 3 with 1 pkgs
Spawning worker 4 with 0 pkgs
Spawning worker 5 with 0 pkgs
Spawning worker 6 with 0 pkgs
Spawning worker 7 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
注意:repodata创建成功之后,会在cm6目录下看到一个新创建的repodata目录
此时cm6目录中的内容如下:
[root@cdh01 cm6]# ll
total 1181628
-rw-r--r--. 1 root root 14041 Oct 26 17:08 allkeys.asc
-rw-r--r--. 1 root root 10215608 Oct 26 17:08 cloudera-manager-agent-6.2.1-1426065.el7.x86_64.rpm
-rw-r--r--. 1 root root 1199718256 Oct 26 18:46 cloudera-manager-daemons-6.2.1-1426065.el7.x86_64.rpm
-rw-r--r--. 1 root root 9988 Oct 26 17:07 cloudera-manager-server-6.2.1-1426065.el7.x86_64.rpm
-rw-r--r--. 1 root root 10996 Oct 26 17:08 cloudera-manager-server-db-2-6.2.1-1426065.el7.x86_64.rpm
drwxr-xr-x. 2 root root 4096 Oct 28 21:02 repodata
-rw-r--r--. 1 root root 1718 Oct 27 17:41 RPM-GPG-KEY-cloudera
5.11:在集群内所有节点添加新配置的yum源
首先在cdh01节点上操作
添加yum源
[root@cdh01 ~]# vi /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager,Version
baseurl = http://cdh01/cloudera-repos/cm6
gpgcheck = 1
清除yum缓存
[root@cdh01 ~]# yum clean all
[root@cdh01 ~]# yum makecache
然后在cdh02节点上操作
添加yum源
[root@cdh02 ~]# vi /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager,Version
baseurl = http://cdh01/cloudera-repos/cm6
gpgcheck = 1
清除yum缓存
[root@cdh02 ~]# yum clean all
[root@cdh02 ~]# yum makecache
然后在cdh03节点上操作
添加yum源
[root@cdh03 ~]# vi /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager,Version
baseurl = http://cdh01/cloudera-repos/cm6
gpgcheck = 1
清除yum缓存
[root@cdh03 ~]# yum clean all
[root@cdh03 ~]# yum makecache
注意:要确保配置中baseurl 对应的url是可以访问的
由于我在windows中没有配置主机名和ip的映射关系,所以在windows中的浏览器里面访问的时候需要使用ip
5.12:安装 Cloudera Manager相关服务
Cloudera Manager简称为cm
想要安装CDH集群,需要先安装cm,然后在cm提供的web界面上安装CDH集群,比较方便。
首先在cdh01节点上操作
注意:在安装之前,先执行这个命令,否则在安装cm相关服务的时候会报错
[root@cdh01 ~]# rpm --import http://cdh01/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安装 cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server这3个服务
这个节点作为cm的server节点,所以需要多安装一个cloudera-manager-server服务
[root@cdh01 ~]# yum -y install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
然后在cdh02节点上操作
注意:在安装之前,先执行这个命令,否则在安装cm相关服务的时候会报错
[root@cdh02 ~]# rpm --import http://cdh01/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安装 cloudera-manager-daemons cloudera-manager-agent 这2个服务
[root@cdh02 ~]# yum -y install cloudera-manager-daemons cloudera-manager-agent
然后在cdh03节点上操作
注意:在安装之前,先执行这个命令,否则在安装cm相关服务的时候会报错
[root@cdh03 ~]# rpm --import http://cdh01/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安装cloudera-manager-daemons cloudera-manager-agent这2个服务
[root@cdh03 ~]# yum -y install cloudera-manager-daemons cloudera-manager-agent
5.13:上传cdh安装包到集群所有节点上
安装完cm之后,在/opt/目录下会出现cloudera目录
将cdh的安装包CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel上传到/opt/cloudera/parcel-repo目录中。
cdh安装包官方下载地址:
https://archive.cloudera.com/cdh6/6.2.1/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel
本文提供的百度网盘下载链接中也有这个文件,前面已经下载过了。
首先将CDH安装包上传到cdh01节点的/opt/cloudera/parcel-repo目录中
在cdh01节点上操作
[root@cdh01 parcel-repo]# ll
-rw-r--r--. 1 root root 54279162 Oct 28 21:48 CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel
生成sha文件
[root@cdh01 parcel-repo]# sha1sum CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel | awk '{print $1}' > CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha
然后通过scp将CDH安装包和sha文件拷贝到cdh02和cdh03节点的/opt/cloudera/parcel-repo目录中
注意:cdh02和cdh03节点上只有/opt/cloudera/目录,没有parcel-repo目录,需要我们手工创建
在cdh02节点上操作
[root@cdh02 ~]# mkdir -p /opt/cloudera/parcel-repo
在cdh03节点上操作
[root@cdh03 ~]# mkdir -p /opt/cloudera/parcel-repo
在cdh01节点上使用scp远程拷贝
[root@cdh01 parcel-repo]# scp -rq CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel cdh02:/opt/cloudera/parcel-repo
[root@cdh01 parcel-repo]# scp -rq CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha cdh02:/opt/cloudera/parcel-repo
[root@cdh01 parcel-repo]# scp -rq CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel cdh03:/opt/cloudera/parcel-repo
[root@cdh01 parcel-repo]# scp -rq CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha cdh03:/opt/cloudera/parcel-repo
5.14:在cdh01节点上启动cm+安装cdh集群
5.14.1:初始化cm
初始化cm
[root@cdh01 ~]# /opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver root admin
5.14.2:启动cm
启动cm
[root@cdh01 ~]# service cloudera-scm-server start
稍后几分钟(5~10分钟),就可以打开cm的管理界面了,端口是7180。
http://cdh01:7180
5.14.3:安装cdh集群
注意:在windows中没有配置cdh01主机名和ip映射关系的话,就需要使用ip访问了
我在这里就使用ip访问了
http://192.168.1.101:7180
用户名和密码都是admin
登录进来之后是这样的,点击继续
选中按钮,点击继续
使用默认的试用版即可,点击继续
需要稍等一会,会进入到下面界面,直接点击继续
可以选择修改集群名称,也可以使用默认的,然后点击继续
输入集群中的所有节点主机名
点击搜索按钮
选中所有主机,点击继续
输入自定义存储库,确认CDH版本为6.2.1
点击继续
直接点击继续即可,不用选中,因为jdk我们前面已经安装好了
输入集群中节点的密码,然后点击继续
然后会进入到cm Agent安装界面,需要稍等一会,5~10分钟。
cm Agent安装成功之后是这样的,点击继续按钮
此时会进入到CDH安装界面,需要稍等一会,10~20分钟
全部安装成功之后是这样的,点击继续按钮
点击这两个高级选项,开始检测
检查第一个结果
检查第二个结果
首先在cdh01节点上操作
[root@cdh01 ~]# sysctl vm.swappiness=10
[root@cdh01~]# echo 'vm.swappiness=10'>> /etc/sysctl.conf
[root@cdh01 ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@cdh01 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@cdh01 parcel-repo]# vi /etc/rc.local
# 将下面这两行配置添加到文件末尾即可
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
然后在cdh02节点上操作
[root@cdh02 ~]# sysctl vm.swappiness=10
[root@cdh02~]# echo 'vm.swappiness=10'>> /etc/sysctl.conf
[root@cdh02 ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@cdh02 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@cdh02 parcel-repo]# vi /etc/rc.local
# 将下面这两行配置添加到文件末尾即可
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
然后在cdh03节点上操作
[root@cdh03 ~]# sysctl vm.swappiness=10
[root@cdh03~]# echo 'vm.swappiness=10'>> /etc/sysctl.conf
[root@cdh03 ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@cdh03 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@cdh03 parcel-repo]# vi /etc/rc.local
# 将下面这两行配置添加到文件末尾即可
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
修改完毕以后,点击重新运行,重新检测
重新检测之后第二个就没有问题了,然后选中第三个选项,点击继续按钮
选择适合自己的方案
点击继续按钮
cdh会自动进行角色分配,将刚才选择的大数据组件安装到集群的不同节点上。
注意:前期不是很熟悉的情况下,建议使用自动分配的方式即可,这里什么都不要修改。
点击继续按钮
在这里输入数据库名称,用户名、密码,然后点击 测试连接 按钮,测试成功的话,在每一行的最后面都会显示Successful,如果有问题,会显示具体的错误信息。
这些数据库我们在前面安装mysql的时候已经提前创建好了。
点击继续按钮
默认在这里不需要改什么东西
直接点击继续按钮即可
等待启动集群内大数据组件的服务,大致需要10~20分钟
服务启动成功之后是这样的,如果有红色的报错提示,可以点进去查看详细报错信息。
点击继续按钮
点击完成按钮,到此为止,CDH集群安装成功。
5.14.4:管理cdh集群
此时再访问cm的7180端口就会看到这个界面了。
界面中会显示黄色的警告信息和红色的安全隐患
关于黄色的警告信息可以动态观察,暂时不处理也是没问题的。
但是红色的安全隐患建议解决一下。
此时集群中有一条红色的重要问题信息
可以直接点击红色的感叹号查看问题详细信息。
这里面其实还有一个黄色的警告信息,这个是针对hdfs的纠删码机制的警告。
首先解决这个问题:
Erasure Coding Policy Verification Test
这个是hadoop3.0中的新特性(hdfs的存储策略),纠删码机制,可以节省HDFS的存储空间,不过至少需要有9个datanode才可以,目前我们这个集群只有2个datanode,所以不能使用这种策略。
修改hdfs的存储策略
选择No Default Erasure Coding Policy.这种策略,表示不使用纠删码机制,点击保存更改。
然后,去掉针对纠删码的检测
取消选中状态,点击保存更改。
此时,这个页面就不显示隐患信息了。
点击首页链接,回到首页
接着继续来解决这个安全隐患,点击这个红色感叹号
进入这个界面,点击查看详细解释
这里提示的是hdfs中block块的副本数不足,其实是因为现在hdfs中的数据默认需要存储3份,但是我们这个集群之后2个datanode,如果再多一个datanode节点就不会有这个问题,不过也不影响使用,如果大家在搭建的时候集群内的机器足够多的话是不会出现这个安全隐患的提示的。
针对CDH集群,如果我们想修改某一个组件的参数该如何修改了?
以hdfs组件为例,由于目前集群内只有2个datanode,那么我希望将副本的数量修改为2
如何修改了?先回到首页
进入hdfs的配置界面
输入关键词进行搜索
将副本因子改为2,点击保存更改按钮
改完配置之后,想要生效需要重新启动,此时页面也提示了,需要重启
可以选择只重启某一个组件(点击组件后面的按钮,在弹出框中选择重启),
或者全部重启(点击cluster1 右边的按钮,在弹出框中选择重启)
在这里我们选择全部重启,因为大部分组件都提示需要重启读取最新的配置。
确认重启
等待集群重启
重启成功之后发现,这里还有一些提示,需要我们重新部署客户端配置
先点击HDFS后面的按钮
点击右下角的 部署客户端配置按钮
接着进入部署页面
部署成功之后点击完成按钮即可
然后可以跳转到首页,此时会发现就不显示那个蓝色的按钮了。
如果感觉这个红色的感叹号比较别扭,可以选择忽略这个问题,因为我们知道是什么原因造成的。
点击红色感叹号,然后点击suppress
在弹出的界面中点击确认即可
此时再回到首页,刷新几次页面,这个红色的感叹号就会消失了。
目前首页还显示的有一些黄色的警告信息,都是一些关于jvm内存配置的警告信息,根据提示去修改即可。
5.14.5:使用cdh集群中的hdfs
不管是使用apache官方的hadoop安装的hdfs,还是使用cdh集群安装的hdfs,操作都是一样的。
此时我们进入到cdh01节点中,操作一下hdfs
[root@cdh01 ~]# hdfs dfs -ls /
Found 2 items
drwxrwxrwt - hdfs supergroup 0 2020-10-28 23:13 /tmp
drwxr-xr-x - hdfs supergroup 0 2020-10-28 23:13 /user
创建文件夹
[root@cdh01 ~]# hdfs dfs -mkdir /data
mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
提示权限问题,创建失败。
CDH环境下Hadoop平台最高权限用户是hdfs,属于supergroup组。
默认HDFS会开启权限认证,所以操作时,需要将root用户切换到hdfs用户,否则会报错。
这样操作就可以了
[root@cdh01 ~]# sudo -uhdfs hdfs dfs -mkdir /data
[root@cdh01 ~]# hdfs dfs -ls /
Found 3 items
drwxr-xr-x - hdfs supergroup 0 2020-10-29 00:10 /data
drwxrwxrwt - hdfs supergroup 0 2020-10-28 23:13 /tmp
drwxr-xr-x - hdfs supergroup 0 2020-10-28 23:13 /user
这样每次操作都需要切换不太方便,如yarn在调度时,通常会生成一些临时文件,执行完毕会删除,如果权限不够会导致出错。Hive和HBase读写hdfs,也很容易因为权限问题导致出错。但是关闭权限检查,任何用户都可以操作HDFS数据,数据安全性又没有保障,所以使用将用户添加到supergroup组的方式。
通常会把 root 或者需要的用户添加到 supergroup组,但Linux下默认是没有supergroup组。所以,先在Linux添加supergroup组,把root用户添加到supergroup里,再同步权限到HDFS。
5.14.6:停止cm和cdh集群
想要停止整个集群的话,可以分为两步
1:先停止cdh集群
2:再停止cm
分别点击对应按钮中的停止链接即可。
5.14.7:启动cm和cdh集群
想要启动整个集群的话,可以分为两步
1:先启动cm
2:再启动cdh集群
分别点击对应按钮中的启动链接即可。