购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2
Hadoop伪分布式环境准备

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命令登录本机,将会发现不用再输入密码,即可以直接登录成功。 m4XoiT6/Uuhvl2VbOWrptR/sjbqxigJiMoy3OCqnEcfLf8HW+tNf1GjVUpsGRm3O

 
    [hadoop@server201 ~]$ ssh server201
    Last login: Tue Mar  9 20:52:56 2021 from 192.168.56.1
点击中间区域
呼出菜单
上一章
目录
下一章
×