本文介绍在Linux上搭建安装Hadoop 分布式环境。前面我们介绍了伪分布式模式和单机模式。分布式模式也运行在多台机器上,每个Java进程独立的运行在专用的linux服务器上,是一个真的Hadoop运行环境。具备分布式的全部特征而且能容忍单台机器故障,这种模式适用于生产环境。
Hadoop分布式模式介绍
Hadoop一般有三种运行模式,分别是:
- 单机模式(Standalone Mode),默认情况下,Hadoop即处于该模式,使用本地文件系统,而不是分布式文件系统。,用于开发和调试。
- 伪分布式模式(Pseudo Distrubuted Mode),使用的是分布式文件系统,守护进程运行在本机机器,模拟一个小规模的集群,在一台主机模拟多主机,适合模拟集群学习。
- 完全分布式集群模式(Full Distributed Mode),Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。
完全分布式可以参考Hadoop Cluster Setup进行搭建。
Linux服务器准备
hostname | ip | role |
---|---|---|
192.168.50.91 | hadoop3-01 | namenode |
192.168.50.214 | hadoop3-02 | secondary namenode |
192.168.50.79 | hadoop3-03 | datanode |
192.168.50.207 | hadoop3-04 | datanode |
192.168.50.53 | hadoop3-05 | datanode |
后续的操作默认都是以root用户执行命令
网络设置
防火墙设置
在每台机器上都需要执行,关闭防火墙(不建议互联网环境这样做,不安全)
填入如下内容
bash
# 如果你的Linux安装了firewalld并默认开启了,建议新手第一次安装时关闭firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl status firewalld
hostname设置
在每台机器上都需要执行,我们可以通过vim /etc/hostname
编辑各个Linux的hostname来将服务器的设置为hadoop3-xx
hosts设置
在每台机器上都需要执行,我们可以通过vim /etc/hosts
编辑各个Linux的hosts来设置每个服务器的ip
填入如下内容
192.168.50.91 hadoop3-01
192.168.50.214 hadoop3-02
192.168.50.79 hadoop3-03
192.168.50.207 hadoop3-04
192.168.50.53 hadoop3-05
网络设置好后,这几台Linux可以自己互相ping一下,确认网络畅通
JDK和Hadoop3环境变量设置
在每台机器上都需要执行,我们需要通过命令vim /etc/profile
编辑环境变量
设置好自己的JAVA_HOME
、HADOOP_HOME
和PATH
填入如下内容
ini
# 设置haddoop相关的用户
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_ROOT=root
export YARN_NODEMANAGER_USER=root
# 指定JAVA_HOME环境变量和PATH
export JAVA_HOME=/home/thinktik/envs/jdk/aws_jdk_8
export PATH=$PATH:$JAVA_HOME/bin
# 指定HADOOP_HOME环境变量和PATH
export HADOOP_HOME=/home/thinktik/envs/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后生效环境变量source /etc/profile
,检查下java和hadoop是否配置好了
SSH免密设置
在每台机器上都需要执行,分布式集群各个节点初始化时可能需要通过SSH进行自动操作,所以我们需要在这几台机器上都进行同样的操作
bash
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 以hadoop3-01向hadoop3-02发送密钥为例(每个主机都需要向其他4个主机发送密钥)
ssh-copy-id hadoop3-02
操作完成后,我们可以在linux上互相ssh下,会发现不需要密码就可以互相ssh通
Hadoop配置
修改core-site.xml文件
在每台机器上都需要执行vim etc/hadoop/core-site.xml
修改core-site.xml文件
填入如下内容
xml
<configuration>
<property>
<name>fs.defaultFS</name>
<!--设置namenode节点,默认端口9000,这里hadoop3-01是namenode-->
<value>hdfs://hadoop3-01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<!--可以自己自定义hadoop临时文件的路径,我习惯的路径为$HADOOP_HOME/tmp-->
<value>/home/thinktik/envs/hadoop/tmp</value>
</property>
</configuration>
修改hdfs-site.xml文件
在每台机器上都需要执行vim etc/hadoop/hdfs-site.xml
修改hdfs-site.xml文件
填入如下内容
xml
<configuration>
<property>
<name>dfs.replication</name>
<!--分布式集群中我们有3个datanode节点,因此副本数量replication的值也设置为3-->
<value>3</value>
</property>
<property>
<!--设置secondary namenode节点,默认端口9868,这里hadoop3-02是secondary namenode -->
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop3-02:9868</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<!--Web UI 默认允许任意IP访问,你可以精细化设置-->
<value>0.0.0.0:9870</value>
</property>
</configuration>
修改hadoop-env.sh文件
在每台机器上都需要执行vim etc/hadoop/hadoop-env.sh
修改hadoop-env.sh文件
填入如下内容
ini
# 指定JAVA_HOME环境变量
export JAVA_HOME=/home/thinktik/envs/jdk/aws_jdk_8
# 设置haddoop相关的用户
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_ROOT=root
export YARN_NODEMANAGER_USER=root
修改workers文件
在每台机器上都需要执行vim etc/hadoop/workers
修改workers文件
填入如下内容,表示datanode的主机名
hadoop3-03
hadoop3-04
hadoop3-05
启动hadoop3 分布式集群
我们在hadoop3-01上执行hdfs的格式化
python
sudo bin/hdfs namenode -format
然后在hadoop3-01上正式启动
bash
sudo sbin/start-dfs.sh
可以看到各个linux服务器上已经正确的运行了对应的hadoop2分布式集群节点 当我们访问hadoop3-01:9870进入后台网站,也会看到datanode正在正确运行