Hadopp伪分布式,即在单机模式下运行Hadoop。我们需要运行5个守护进程,其中3个负责HDFS存储,2个负责MapReduce计算。
负责HDFS存储的3个进程如下(见图2-1):
● NameNode进程:作为主节点,主要负责分配数据存储的位置。
● SecondaryNameNode进程:作为NameNode日志备份和恢复进程,避免数据丢失。
● DataNode进程:作为数据的存储节点,接收客户端的数据读写请求。
图2-1
负责MapReduce计算的2个进程如下:
● ResourceManager进程:负责分配计算任务由哪一台主机执行。
● NodeManager进程:负责执行计算任务。
在真实集群环境下,部署的一般规则是:
● 由于NodeManger需要读取DataNode上的数据,用于执行计算,所以一般DataNode与NodeManger并存。
● 由于NameNode在运行时,需要在内存中大量缓存文件块的数据,所以NameNode节点都应该部署到内存比较大的主机上。
● 在真实的集群环境下,一般部署多个NameNode节点,互为备份和切换关系。且不再部署SecondaryNameNode进程。
伪分布式可以让读者快速学习HDFS的命令及开发MapReduce应用,对于学习Hadoop有很大的帮助。在安装之前,笔者有以下建议:
● 配置静态IP地址。虽然是单机模式,但也建议配置静态的IP地址,这有助于以后配置集群环境时固定IP,养成良好的习惯。
● 修改主机名称为一个便于记忆的名称,如server201,修改规则一般为本机的IP地址最后一段作为服务器的后缀,如:192.168.56.201,则可以修改本主机的名称为server201。
● 由于启动Hadoop的各个进程使用的是SSH。所以,必须配置本机免密码登录。本章后面的步骤会介绍如何配置SSH免密码登录。配置SSH免密码登录的规则是在启动的集群的主机上,向其他主机配置SSH免密码登录,以便于操作机可以在不登录其他主机的情况下,启动所需要的进程。
● 关闭防火墙。如果你的CentOS7没有安装防火墙,可以不用关闭,如果已经安装了,请检查防火墙的状态,如果是运行状态,请关闭防火墙并禁用防火墙。注意,在生产环境下,不要直接禁用防火墙,可以指定Hadoop的某些端口开放。
● 使用非root用户,前面章节我们创建了一个名为hadoop用户,此用户同时属于wheel组(拥有此组的用户可以使用sudo命令,执行一些root用户的操作)。我们就以此用户作为执行命令的用户。
步骤01 配置静态IP地址。
前面的章节已经讲过静态IP的设置,此处再做详细讲解。使用SSH登录CentOS7。然后使用ifconfig查看IP地址,如果没有ifconfig命令,可以使用sudo yum -y install net-tools安装ifconfig命令。其实在CentOS7中,已经使用ip addr命令显示当前主机的IP地址。所以,也可以不安装net-tools。
$ ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.201 netmask 255.255.255.0
上例显示为两块网卡,其中enp0s3的IP地址为10.0.2.15,此网卡为NAT网络,用于上外网。enp0s8的IP地址为192.168.56.201,此网卡为Host Only网络,用于与宿主机进行通信。我们要修改的就是enp0s8这个网卡,将它的IP地址设置为固定IP。
IP设置保存在文件中,这个文件为/etc/sysconfig/network-scripts/ifcfg-enp0s8。使用cd命令,切换到这个目录下。使用ls命令显示这个目录下的所有文件,你可能只会发现ifcfg-enp0s3这个文件,现在使用cp命令将ifcfg-enp0s3复制一份为ifcfg-enp0s8。由于etc目录不属于hadoop用户,所以操作时,需要添加sudo前缀。
$ sudo cp ifcfg-enp0s3 ifcfg-enp0s8
使用vim命令修改为静态IP地址:
$ sudo vim ifcfg-enp0s8
将原来的dhcp修改成static即静态的地址,并设置具体的IP地址。其中,每一个网卡,都应该具有唯一的UUID,所以建议修改其中任意一个值,以便于与之前的enp0s3的UUID不同。部分修改内容如下:
BOOTPROTO="static" NAME="enp0s8" UUID="d2a8bd92-cf0d-4471-8967-3c8aee78d101" DEVICE="enp0s8" IPADDR="192.168.56.201"
现在重新启动网络:
$ sudo systemctl restart network.service
重新启动网络后,再次查看IP,地址已经发生变化:
[hadoop@server201 ~]$ ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.201 netmask 255.255.255.0 broadcast 0x20<link> lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0
步骤02 修改主机名称。
使用hostname命令,检查当前主机的名称:
$ hostname localhost
使用hostnamectl命令,修改主机的名称:
$ sudo hostnamectl set-hostname server201
步骤03 配置hosts文件。
hosts文件是本地DNS解析文件。配置此文件,可以根据主机名找到对应的IP地址。
使用vi命令,打开这个文件,并在文件中追加以下配置:
$ sudo vim /etc/hosts 192.168.56.201 server201
步骤04 关闭防火墙。
CentOS7默认情况下没有安装防火墙。可以通过命令sudo firewall-cmd --state检查防火墙的状态,如果显示“command not found”一般为没有安装防火墙,此步可以忽略。以下命令检查防火墙的状态:
$ sudo firewall-cmd --state running
running表示防火墙正在运行。以下命令用于停止和禁用防火墙:
$ sudo systemctl stop firewalld.service $ sudo systemctl disable firewalld.service
步骤05 配置免密码登录。
配置免密码登录的主要目的,就是在使用Hadoop脚本启动Hadoop的守护进程时,不需要再提示用户输入密码。SSH免密码登录的主要实现机制,就是在本地生成一个公钥,然后将公钥配置到需要被免密码登录的主机上,登录时自己持有私钥与公钥进行匹配,如果匹配成功,则登录成功,否则登录失败。
可以使用ssh-keygen命令生成公钥和私钥文件,并将公钥文件复制到被SSH登录的主机上。以下是ssh-keygen命令,输入后直接按两次回车即可生成公钥和私钥文件:
如上面所说,生成的公钥和私钥文件将被放到~/.ssh/目录下。其中id_rsa文件为私钥文件,rd_rsa.pub为公钥文件。现在我们再使用ssh-copy-id将公钥文件发送到目标主机。由于登录的是本机,所以直接输入本机名即可:
[hadoop@server201 ~]$ ssh-copy-id server201 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/hadoop/. ssh/id_rsa.pub" The authenticity of host 'server201 (192.168.56.201)' can't be established. ECDSA key fingerprint is SHA256:KqSRs/H1WxHrBF/tfM67PeiqqcRZuK4ooAr+xT5Z4OI. ECDSA key fingerprint is MD5:05:04:dc:d4:ed:ed:68:1c:49:62:7f:1b:19:63:5d:8 e. Are you sure you want to continue connecting (yes/no)? yes 输入yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filt er out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are pro mpted now it is to install the new keys
输入密码然后按回车键,将会提示成功信息:
hadoop@server201's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'server201'" and check to make sure that only the key(s) you wanted were added.
此命令执行以后,会在~/.ssh目录下多出一个用于认证的文件,其中保存了某个主机可以登录的公钥信息,这个文件为~/.ssh/authorized_keys。如果读者感兴趣,可以使用cat命令查看这个文件中的内容。此文件中的内容,就是id_rsa.pub文件中的内容。
现在再使用ssh server201命令登录本机,将会发现不用再输入密码,即可以直接登录成功。
[hadoop@server201 ~]$ ssh server201 Last login: Tue Mar 9 20:52:56 2021 from 192.168.56.1