1 概述

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

2 约定

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

3 (可选)本地Host

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

sudo vim /etc/hosts
# 添加
MaterIP master
Worker1IP worker1
Worker2IP worker2

4 ssh

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

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

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

ssh root@master
ssh root@worker1
ssh root@worker2

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

5 主机名

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

# Master节点
vim /etc/hostname
master
# Worker1节点
# worker1
# Worker2节点
# worker2

同时修改Host

# Master节点
vim /etc/hosts
Worker1IP worker1
Worker2IP worker2 # Worker1节点
vim /etc/hosts
MasterIP master
Worker2IP worker2 # Worker1节点
vim /etc/hosts
MasterIP master
Worker1IP worker1

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

ping master
ping worker1
ping 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

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/tmp</value>
</property>
</configuration>

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

6.2.3 hdfs-site.xml

<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

6.2.4 workers

worker1
worker2

6.2.5 复制配置文件

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

7 启动

7.1 格式化HDFS

Master中,首先格式化HDFS

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

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

7.2 hadoop-env.sh

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

HDFS_DATANODE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

7.3 启动

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

sbin/start-dfs.sh

浏览器输入:

MasterIP:9870

即可看到如下页面:

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

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

# /etc/hosts
127.0.0.1 master

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

# /etc/hosts
127.0.0.1 worker1
127.0.0.1 worker2

8 YARN

8.1 环境变量

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

export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

8.2 YARN配置

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

<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>

8.3 开启YARN

Master节点中开启YARN

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

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

8.4 测试

浏览器输入:

MasterIP:8088

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

至此集群正式搭建完成。

9 参考

Hadoop完整搭建过程(四):完全分布模式(服务器)的更多相关文章

  1. 本地+分布式Hadoop完整搭建过程

    1 概述 Hadoop在大数据技术体系中极为重要,被誉为是改变世界的7个Java项目之一(剩下6个是Junit.Eclipse.Spring.Solr.HudsonAndJenkins.Android ...

  2. Hadoop完整搭建过程(三):完全分布模式(虚拟机)

    1 完全分布模式 完全分布模式是比本地模式与伪分布模式更加复杂的模式,真正利用多台Linux主机来进行部署Hadoop,对集群进行规划,使得Hadoop各个模块分别部署在不同的多台机器上,这篇文章介绍 ...

  3. Hadoop完整搭建过程(二):伪分布模式

    1 伪分布模式 伪分布模式是运行在单个节点以及多个Java进程上的模式.相比起本地模式,需要进行更多配置文件的设置以及ssh.YARN相关设置. 2 Hadoop配置文件 修改Hadoop安装目录下的 ...

  4. Hadoop完整搭建过程(一):本地模式

    1 本地模式 本地模式是最简单的模式,所有模块都运行在一个JVM进程中,使用本地文件系统而不是HDFS. 本地模式主要是用于本地开发过程中的运行调试用,下载后的Hadoop不需要设置默认就是本地模式. ...

  5. 转载——Asp.Net MVC+EF+三层架构的完整搭建过程

    转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...

  6. Hadoop环境搭建过程中遇到的问题以及解决方法

    1.启动hadoop之前,ssh免密登录slave主机正常,使用命令start-all.sh启动hadoop时,需要输入slave主机的密码,说明ssh文件权限有问题,需要执行以下操作: 1)进入.s ...

  7. Asp.Net MVC+EF+三层架构的完整搭建过程

    架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...

  8. Hadoop环境搭建|第四篇:hive环境搭建

    一.环境搭建 注意:hive版本不能太高,否则会出现兼容性问题 1.1.上传hive安装包 创建文件夹用于存放hive文件命令:mkdir hive 1.2.解压hive安装包 命令:tar -zxv ...

  9. Hadoop完全分布式搭建过程中遇到的问题小结

    前一段时间,终于抽出了点时间,在自己本地机器上尝试搭建完全分布式Hadoop集群环境,也是借助网络上虾皮的Hadoop开发指南系列书籍一步步搭建起来的,在这里仅代表hadoop初学者向虾皮表示衷心的感 ...

随机推荐

  1. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  2. 正则表达式匹配${key}并在Java中使用

    1.正则表达式匹配${key} \$\{([a-z]+)\} 能够匹配字符串中以${key}形式的文本(其中key为小写应为字母) .*\$\{([a-z]+)\}.* 可以用来检测文本中是否有${k ...

  3. CentOS 7.7上配置mysql

    转载:https://www.cnblogs.com/VinsonYang/p/12333570.html 首先登陆到阿里云,进行远程连接,在这里我使用的是Xshell 6进行连接的. 参照https ...

  4. 基于CefSharp开发浏览器(八)浏览器收藏夹栏

    一.前言 上一篇文章 基于CefSharp开发(七)浏览器收藏夹菜单 简单实现了部分收藏夹功能 如(添加文件夹.添加收藏.删除.右键菜单部分功能) 后续代码中对MTreeViewItem进行了扩展,增 ...

  5. Nginx常见的错误配置

    Blog:博客园 个人 翻译自Common Nginx misconfigurations that leave your web server open to attack Nginx是当前主流的W ...

  6. docker apollo配置中心分布式部署

    Apollo 简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服 ...

  7. C#类中的字段、属性和方法

    C#类中的字段.属性和方法 刚开始学C#,对于类中的字段.属性和方法很难分清,写下这份笔记,帮助理解 字段:与类相关的变量 声明方法与声明变量类似,可在前面添加访问修饰符.static关键字等: 属性 ...

  8. 面试被吊打系列 - Redis原理

    小张兴冲冲去面试,结果被面试官吊打! 小张: 面试官,你好.我是来参加面试的. 面试官: 你好,小张.我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧.首先我的问题是,R ...

  9. shell脚本,mysql数据库的备份,并压缩

    db_user="root"db_passwd="xxx"db_host="localhost" databases="xxx-p ...

  10. 【知识点】 C++寄存器优化

    作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14502076.html 目录 一.前言 二.代码实例 三.volatile作用 一.前言 在c++中什么情况下, ...