Hadoop集群(双节点)安装配置

集群安装前置条件

已掌握Hadoop单机伪分布式安装配置,否则先查看Hadoop伪分布式安装与配置

环境

Ubuntu 18.04 + JDK 1.8 + Hadoop 2.10 + SSH

本教程简单的使用两个节点作为集群环境:一个Master节点,一个Slave节点。

准备工作

Hadoop 集群的安装配置大致为如下流程:

  1. 选定一台机器作为 Master
  2. 在 Master 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
  3. 在 Master 节点上安装 Hadoop,并完成配置
  4. 在其他 Slave 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
  5. 将 Master 节点上的 /usr/local/hadoop 目录复制到其他 Slave 节点上
  6. 在 Master 节点上开启 Hadoop

如果你已按照Hadoop伪分布式安装与配置进行过单机伪分布式安装,且能正常运行,将此虚拟机实例进行克隆即可。

先关闭当前虚拟机实例。

选择创建完整克隆,此时你就创建了一个跟前者功能完全相同的虚拟机实例(SSH+Java+Hadoop已拥有),就不用再重新配置了。

网络配置

两个虚拟机实例的网络适配器选用NAT模式即可。

查看Linux的几点IP地址(命令为ifconfig),即inet地址。

Master节点IP

Slave节点IP

首先在Master节点上关闭Hadoop(/usr/local/hadoop/sbin/stop-dfs.sh),在进行后续进群配置。

为了便于区分,我们修改一下各个节点的主机名

sudo vim /etc/hostname

然后根据上述我们查到的两个节点的IP地址修改自己所用节点的IP映射

sudo vim /etc/hosts

在 Master与Slave1节点的/etc/hosts 中将该映射关系填写上去即可(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 Master” 这样的记录):

修改完成后需要重启一下,重启后在终端中才会看到机器名的变化接下来的操作中请注意区分 Master 节点与 Slave 节点的操作。

配置好后需要在各个节点上测试是否相互 ping 得通,如果ping不通,后面的步骤无法执行

ping Master -c 3       # 在Slave1节点上测试
ping Slave1 -c 3       # 在Master节点上测试

例如我在Master节点上ping Slave1,显示如下

牢记:继续下一步配置前,请先完成所有节点的网络配置,修改过的主机名需重启才能生效

SSH无密码登陆节点

此操作是要让 Master 节点可以无密码 SSH 登陆到各个 Slave 节点上。

首先生成 Master 节点的公匙,在 Master 节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):

cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*            # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa       # 一直按回车就可以

让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行

cat ./id_rsa.pub >> ./authorized_keys

完成后可执行 ssh Master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点:

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave1 上 hadoop 用户的密码(hadoop),输入完成后会提示传输完毕,如下图所示:

接着在 Slave1 节点上,将 ssh 公匙加入授权

mkdir ~/.ssh                                   # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub                                # 用完就可以删掉了

如果有其他 Slave 节点,也要执行将 Master 公匙传输到 Slave 节点、在 Slave 节点上加入授权这两步。

这样,在 Master 节点上就可以无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行如下命令进行检验

ssh Slave1

配置PATH变量,

将 Hadoop 安装目录加入 PATH 变量中,这样就可以在任意目录中直接使用 hadoo、hdfs 等命令了,需要在 Master 节点上进行配置

vim ~/.bashrc

在文件中添加下面一行

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

保存后执行 source ~/.bashrc ,使配置生效

source ~/.bashrc

配置集群/分布式环境

集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml

1, 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。

此教程让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加一行内容:Slave1。

2、文件 core-site.xml 改为下面的配置

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

3、文件 hdfs-site.xml,dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值设为 1

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

4、文件 mapred-site.xml (先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>

5、文件 yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

配置好后,将 Master 上的 /usr/local/hadoop 文件夹复制到各个节点上。

因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。

在 Master 节点上执行如下操作

cd /usr/local    
sudo rm -r ./hadoop/tmp                            # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*                         # 删除日志文件
tar -zcf hadoop.tar.gz hadoop                      # 先压缩再复制
cd ~
scp ./hadoop.tar.gz Slave1:/home/hadoop

在 Slave1 节点上执行(可不用命令解压,直接在文件系统中提取,解压或提取时间较长,耐心等待)

sudo rm -r /usr/local/hadoop                # 删掉旧的(如果存在)
tar -zxf hadoop.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

PS:压缩和解压过程可能会出现重目录现象(解压后hadoop文件夹里面套了一个hadoop文件夹,而第二个文件夹里面才是我们要用到的hadoop环境),此过程自己查看不在赘述

同样,如果有其他 Slave 节点,也要执行将 hadoop.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。

首次启动需要先在 Master 节点执行 NameNode 的格式化

hdfs namenode -format       # 首次运行需要执行初始化,之后不需要

接着可以启动 hadoop 了,在 Master 节点上进行

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNodeResourceManagerSecondrryNameNodeJobHistoryServer 进程

在 Slave 节点可以看到 DataNode 和 NodeManager 进程

缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。例如我这边一共有 1 个 Datanodes:

hdfs dfsadmin -report

也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态http://master:50070/

执行分布式实例

执行分布式实例过程与伪分布式模式一样,首先创建 HDFS 上的用户目录

hdfs dfs -mkdir -p /user/hadoop

将 /usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中

关闭 Hadoop 集群也是在 Master 节点上执行的

stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver

初学Hadoop,有什么地方不对望指正!

原文地址:https://www.cnblogs.com/itjiangpo/p/14181241.html