五、伪分布模式
伪分布模式的实现方式是只使用一台机器,启动所有进程,可以进一步模拟集群运行时的任务状态,部署更加简单。【解压安装步骤同上】
配置文件路径:$HADOOP_HOME/etc/hadoop
1. hadoop-env.sh
在文件第37行打开注释【去掉开头的#】,配置JAVA_HOME:
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64
2. core-site.xml
官方文档:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml
<configuration> <!-- Hadoop临时文件存放路径,默认在/tmp目录下 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop-3.3.5/data</value> </property> <!-- NameNode结点的URI(包括协议、主机名称、端口号) --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop:8020</value> </property> <!-- 设置文件文件删除后,被完全清空的时间,默认为0,单位为分钟 --> <property> <name>fs.trash.interval</name> <value>60</value> </property> </configuration>
3. hdfs-site.xml
<configuration> <!-- 块存储份数,默认为3 --> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- 关闭权限校验,开发学习时可开启,默认为true --> <property> <name>dfs.permissions</name> <value>false</value> </property> <!-- namenode的http访问地址和端口 --> <property> <name>dfs.namenode.http-address</name> <value>hadoop:50070</value> </property> </configuration>
4. mapred-site.xml
<configuration> <!-- 设置运行MapReduce任务方式为yarn,默认为local,可选项还有classic --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
5. yarn-site.xml
官方文档:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
<configuration> <!-- resourcemanager的主机名 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop</value> </property> <!-- 分配给容器的物理内存量,单位是MB,设置为-1则自动分配,默认8192MB --> <property> <name>yarn.nodemanager.resource.memory-mb</name>vi <value>1536</value> </property> <!-- NodeManager上运行的服务列表,可以配置成mapreduce_shuffle,多个服务使用逗号隔开 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
6. workers
工作节点的主机名列表,默认为localhost,建议修改为自定义的主机名并绑定,详情见下一步骤。
hadoop
7. SSH免密登录
在使用Hadoop集群时,建议使用主机名称,这样即使ip地址发生变化,也不需要去修改相关的配置文件,只需要去修改一下主机名映射文件就可以了。上文的配置文件中都使用了hadoop作为主机名,以此为例进行演示。
- Ubuntu修改主机名
在root用户下修改主机名设置文件:
sudo hostnamectl set-hostname hadoop
此时已经修改成功,打开一个新的回话和终端时将看到变化。
- 开启SSH服务
首先确认SSH服务状态:
systemctl status ssh
如果没有安装使用以下命令:
apt-get install openssh-server
启动SSH服务:
sudo systemctl enable ssh sudo systemctl start ssh systemctl status ssh
- 生成密钥
# 切换到hadoop用户下执行 su - hadoop # 整个过程一直回车即可 ssh-keygen -t rsa
- 配置免密登录
Hadoop启动时,会逐一登录到worker节点去启动相应的进程,对于伪分布模式来说,相当于自己登录自己。配置免密登录后,不再需要密码,而是通过密钥进行认证。
ssh-copy-id hadoop@hadoop ssh hadoop
8. 集群启动
至此,所有的安装配置步骤都已完成,接下来准备启动Hadoop。
- 首次格式化
第一次启动前需要进行格式化,用以生成集群UUID等核心信息。
hdfs namenode -format
- 启动Hadoop
执行start-all.sh即可启动集群,遇到的警告忽略即可【10秒后会自动启动】,也可以按顺序启动dfs和yarn。
start-all.sh
- 进程验证
启动成功后,使用jps命令查看各java进程:
出现5个进程证明成功【不包括jps】,如果缺少某个进程请返回检查配置文件,停止所有进程后【stop-all.sh】再次重新启动。
六、全分布模式
全分布模式的配置方式和步骤其实与伪分布式没有任何差别,在一台机器上配置好所有的配置文件后,分发到其它机器即可,核心步骤如下:
1. 前置环境
- 部署安装JDK【三台机器】
- 解压安装Hadoop【主节点】
- 创建hadoop用户【三台机器】
- 配置环境变量【主节点】
2. 修改配置文件
有部分核心配置文件需要修改:
- core-site.xml
修改其中的fs.defaultFS:主机名的部分设置为主节点的主机名
- hdfs-site.xml
修改其中的dfs.replication:设置为实际的数据存储节点个数
- yarn-site.xml
修改其中的yarn.resourcemanager.hostname:设置为主节点的主机名
- workers
将所有的worker节点的主机名列在这个文件中,每行一个。
3. 配置免密登录
假设我们有3台机器:hadoop01、hadoop02、hadoop03,每一台机器都执行如下操作:
# 在hadoop用户下执行 ssh-keygen -t rsa ssh-copy-id hadoop@hadoop01 ssh-copy-id hadoop@hadoop02 ssh-copy-id hadoop@hadoop03
这样执行完成后,三台机器都可以免密互相登录,这样以后我们可以在任意一台机器上控制集群状态或者提交任务。
4. 文件分发
以上的步骤只需要在主节点做一次即可,然后我们将配置文件分发到另外两台机器。也就是说,三台机器的配置文件和环境是完全一致的,如果配置文件发生修改,也要记得手动同步覆盖。
scp -r /home/hadoop/hadoop-3.3.5 hadoop@hadoop02:/home/hadoop scp -r /home/hadoop/hadoop-3.3.5 hadoop@hadoop03:/home/hadoop scp -r /home/hadoop/.bashrc hadoop@hadoop02:/home/hadoop scp -r /home/hadoop/.bashrc hadoop@hadoop03:/home/hadoop
由于我们已经配置了免密登录,整个过程不需要密码。
5. 集群启动
剩下的启动步骤与伪分布式相同,先进行一次格式化,然后执行启动脚本。
- 格式化namenode
在主节点上执行以下命令:
hdfs namenode -format
- 启动Hadoop进程:
在主节点上执行,会根据workers文件的配置逐一去启动各个节点上的进程。
start-all.sh
如果在workers文件中填写了主节点,则在主节点中应该出现5个进程(不包括jps本身),否则为3个:NameNode、SecondaryNameNode、ResourceManager。
从节点上会出现两个进程:DataNode、NodeManager,如果以上进程都成功启动,那么你的集群配置已经完成了。