Hadoop完整搭建过程(四):完全分布模式(服务器)

1 概述

上一篇文章介绍了如何使用虚拟机搭建集群,到了这篇文章就是实战了,使用真实的三台不同服务器进行Hadoop集群的搭建。具体步骤其实与虚拟机的差不多,但是由于安全组以及端口等等一些列的问题,会与虚拟机有所不同,废话不多说,下面正式开始。

2 约定

  • Master节点的ipMasterIP表示,主机名用master表示
  • 两个Worker节点的ipWorker1IP/Worker2IP表示,主机名用worker1/worker2表示
  • 这里为了演示方便统一使用root用户登录,当然生产环境不会这样

3 (可选)本地Host

修改本地Host,方便使用主机名来进行操作:

1sudo vim /etc/hosts 2# 添加 3MaterIP master 4Worker1IP worker1 5Worker2IP worker2

4 ssh

本机生成密钥对后复制公钥到三台服务器上:

1ssh-keygen -t ed25519 -a 100 # 使用更快更安全的ed25519算法而不是传统的RSA-3072/4096 2ssh-copy-id root@master 3ssh-copy-id root@worker1 4ssh-copy-id root@worker2

这时可以直接使用root@host进行连接了:

1ssh root@master 2ssh root@worker1 3ssh root@worker2

不需要输入密码,如果不能连接或者需要输入密码请检查/etc/ssh/sshd_config或系统日志。

5 主机名

修改Master节点的主机名为master,两个Worker节点的主机名为worker1worker2

1# Master节点 2vim /etc/hostname 3master 4# Worker1节点 5# worker1 6# Worker2节点 7# worker2

同时修改Host

1# Master节点 2vim /etc/hosts 3Worker1IP worker1 4Worker2IP worker2 5 6# Worker1节点 7vim /etc/hosts 8MasterIP master 9Worker2IP worker2 10 11# Worker1节点 12vim /etc/hosts 13MasterIP master 14Worker1IP worker1

修改完成之后需要互ping测试:

1ping master 2ping worker1 3ping worker2

ping不通的话应该是安全组的问题,开放ICMP协议即可:

在这里插入图片描述

6 配置基本环境

6.1 JDK

scp上传OpenJDK 11,解压并放置于/usr/local/java下,同时修改PATH

export PATH=$PATH:/usr/local/java/bin

如果原来的服务器装有了其他版本的JDK可以先卸载:

yum remove java

注意设置环境变量后需要测试以下java,因为不同服务器的架构可能不一样:

在这里插入图片描述

在这里插入图片描述

比如笔者的Master节点为aarch64架构,而两个Worker都是x86_64架构,因此Master节点执行java时报错如下:

在这里插入图片描述

解决办法是通过yum install安装OpenJDK11

yum install java-11-openjdk

6.2 Hadoop

scp上传Hadoop 3.3.0,解压并放置于/usr/local/hadoop下,注意选择对应的架构:

在这里插入图片描述

解压后修改以下四个配置文件:

  • etc/hadoop/hadoop-env.sh
  • etc/hadoop/core-site.xml
  • etc/hadoop/hdfs-site.xml
  • etc/hadoop/workers

6.2.1 hadoop-env.sh

修改JAVA_HOME环境变量即可:

export JAVA_HOME=/usr/local/java # 修改为您的Java目录

6.2.2 core-site.xml

1<configuration> 2 <property> 3 <name>fs.defaultFS</name> 4 <value>hdfs://master:9000</value> 5 </property> 6 <property> 7 <name>hadoop.tmp.dir</name> 8 <value>/usr/local/hadoop/data/tmp</value> 9 </property> 10</configuration>

具体选项与虚拟机方式的设置相同,这里不再重复叙述。

6.2.3 hdfs-site.xml

1<configuration> 2 <property> 3 <name>dfs.namenode.name.dir</name> 4 <value>/usr/local/hadoop/data/namenode</value> 5 </property> 6 <property> 7 <name>dfs.datanode.data.dir</name> 8 <value>/usr/local/hadoop/data/datanode</value> 9 </property> 10 <property> 11 <name>dfs.replication</name> 12 <value>2</value> 13 </property> 14</configuration>

6.2.4 workers

1worker1 2worker2

6.2.5 复制配置文件

1# 如果设置了端口以及私钥 2# 加上 -P 端口 -i 私钥 3scp /usr/local/hadoop/etc/hadoop/* worker1:/usr/local/hadoop/etc/hadoop/ 4scp /usr/local/hadoop/etc/hadoop/* worker2:/usr/local/hadoop/etc/hadoop/

7 启动

7.1 格式化HDFS

Master中,首先格式化HDFS

1cd /usr/local/hadoop 2bin/hdfs namenode -format

如果配置文件没错的话就格式化成功了。

7.2 hadoop-env.sh

还是在Master中,修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh,末尾添加:

1HDFS_DATANODE_USER=root 2HDFS_NAMENODE_USER=root 3HDFS_SECONDARYNAMENODE_USER=root

7.3 启动

首先Master开放9000以及9870端口(一般安全组开放即可,如果开启了防火墙firewalld/iptables则添加相应规则),并在Master节点中启动:

sbin/start-dfs.sh

浏览器输入:

MasterIP:9870

即可看到如下页面:

在这里插入图片描述

如果看到Live Nodes数量为0请查看Worker的日志,这里发现是端口的问题:

在这里插入图片描述

并且在配置了安全组,关闭了防火墙的情况下还是如此,则有可能是Host的问题,可以把Master节点中的:

1# /etc/hosts 2127.0.0.1 master

删去,同样道理删去两个Worker中的:

1# /etc/hosts 2127.0.0.1 worker1 3127.0.0.1 worker2

8 YARN

8.1 环境变量

修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh,添加:

1export YARN_RESOURCEMANAGER_USER=root 2export YARN_NODEMANAGER_USER=root

8.2 YARN配置

在两个Worker节点中修改/usr/local/hadoop/etc/hadoop/yarn-site.xml

1<property> 2 <name>yarn.resourcemanager.hostname</name> 3 <value>master</value> 4</property>

8.3 开启YARN

Master节点中开启YARN

1cd /usr/local/hadoop 2sbin/start-yarn.sh

同时Master的安全组开放8088以及8031端口。

8.4 测试

浏览器输入:

MasterIP:8088

应该就可以访问如下页面了:

在这里插入图片描述

至此集群正式搭建完成。

9 参考

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )