在VMware下Hadoop分布式集群环境的配置--基于Yarn模式的一个Master节点、两个Slaver(Worker)节点的配置

你遇到的大部分ubuntu中配置hadoop的问题这里都有解决方法!!!(近10000字)

概要

在Docker虚拟容器环境下,进行Hadoop-3.2.2分布式集群环境的配置与安装,完成基于Yarn模式的一个Master节点、两个Slaver(Worker)节点的配置。

1.主要步骤

  1. 安装配置启动Docker虚拟容器
  2. 配置主机名
  3. 配置自动时钟同步
  4. 配置hosts列表
  5. 配置免密码登录
  6. 安装JDK(在三台节点分别操作此步骤)
  7. 安装部署Hadoop集群

2、实验环境

虚拟机数量:3

系统版本:Centos Stream/Ubuntu 20.4(18.4)

Hadoop版本:Apache Hadoop 3.2.2(3.2.1)

3、相关技能

熟悉Linux操作系统

Hadoop原理

4、知识点

常见Linux命令的使用

linux系统基础配置

配置JDK

配置Hadoop的相关参数

掌握Hadoop操作指令

在安装Docker之前安装一些必要的依赖包:

复制代码
sudo apt install apt-transport-https ca-certificates curl software-properties-common

添加 Docker 的官方 GPG 密钥

复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

添加 Docker 的 APT 源

复制代码
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

更新 APT 包索引

复制代码
sudo apt update

安装 Docker CE

复制代码
sudo apt install docker-ce

安装完成后,您可以通过运行以下命令来验证 Docker 是否成功安装:

复制代码
sudo systemctl status docker

下载Docker compose

复制代码
sudo apt update
sudo apt install docker-compose
docker-compose version  

创建Docker-compose.yml

将以下内容放入yml:

复制代码
version: "3"  

  

services:  

  master:  

    image: ubuntu:latest  

    container_name: masternode  

    privileged: true  

    networks:  

      hadoop:  

        ipv4_address: 10.10.0.11  

    ports:  

      - 9870:9870  

      - 9000:9000  

      - 18040:18040  

      - 18030:18030  

      - 18025:18025  

      - 18141:18141  

      - 18088:18088  

      - 50070:50070  

      - 60000:60000  

      - 16000:16000  

      - 8080:8080  

    volumes:  

      - hadoop:/hadoop/master  

      - ./Files:/Files  

    environment:  

      - CLUSTER_NAME=hadoop_cluster_simple  

    stdin_open: true  

    tty: true  

  slave01:  

    image: ubuntu:latest  

    container_name: slave01node  

    privileged: true  

    networks:  

      hadoop:  

        ipv4_address: 10.10.0.12  

    volumes:  

      - hadoop:/hadoop/slave01  

      - ./Files:/Files  

    environment:  

      - CLUSTER_NAME=hadoop_cluster_simple  

    stdin_open: true  

    tty: true  

  slave02:  

    image: ubuntu:latest  

    container_name: slave02node  

    privileged: true  

    networks:  

      hadoop:  

        ipv4_address: 10.10.0.13  

    volumes:  

      - hadoop:/hadoop/slave02  

      - ./Files:/Files  

    environment:  

      - CLUSTER_NAME=hadoop_cluster_simple  

    stdin_open: true  

    tty: true  

  slave03:  

    image: ubuntu:latest  

    container_name: slave03node  

    privileged: true  

    networks:  

      hadoop:  

        ipv4_address: 10.10.0.14  

    volumes:  

      - hadoop:/hadoop/slave03  

      - ./Files:/Files  

    environment:  

      - CLUSTER_NAME=hadoop_cluster_simple  

    stdin_open: true  

    tty: true  

volumes:  

  hadoop:  

networks:  

  hadoop:  

    driver: bridge  

    ipam:  

      driver: default  

      config:  

        - subnet: "10.10.0.0/24" 

在docker镜像地址中有已无法进入的地址,需要换源,具体看:完美解决Docker pull时报错:https://registry-1.docker.io/v2/-CSDN博客

启动Docker虚拟容器

复制代码
sudo docker-compose -f docker-compose.yml  up

打开三个新的终端窗口,分别登录master、slave01和slave02节点(按下 ctrl + d 可以从各节点退出

复制代码
sudo docker exec -it masternode /bin/bash
sudo docker exec -it slave01node /bin/bash
sudo docker exec -it slave02node /bin/bash

使用vim编辑masternode主机名

复制代码
vi /etc/hostname

docker容器中没有vim包需要下载:

复制代码
apt-get update
apt-get install -y vim

同理将slave01和slave02也改好

使用Linux命令crontab配置定时任务进行自动时钟同步(分别进入三个节点)

复制代码
apt install -y cron

crontab -e

按"i "键,进入INSERT模式;输入下面的内容(星号之间和前后都有空格)

复制代码
0 1 * * * ntpdate cn.pool.ntp.org

按Esc键退出INSERT模式,按下"shift+:"键,输入wq保存修改并退出

手动同步时间,直接在Terminal运行下面的命令

复制代码
apt install -y ntpdate

ntpdate cn.pool.ntp.org

分别在三个节点 配置hosts列表

在各虚拟机中运行ifconfig命令,获得当前节点的ip地址

复制代码
apt install -y net-tools

ifconfig

分别获得三个结点的ip地址

编辑主机名列表文件

复制代码
vi /etc/hosts

将下面三行添加到/etc/hosts文件中,保存退出

复制代码
#master节点对应IP地址是10.10.0.11,slave01对应的IP是10.10.0.12,slave02对应的IP是10.10.0.13
10.10.0.11 master
10.10.0.12 slave01
10.10.0.13 slave02

Ping主机名,按"Ctrl+C"终止命令

复制代码
ping master 
ping slave01  
ping slave02

三个虚拟节点的免密码登录配置

先在master节点上进行配置,生成rsa的SSH公钥

复制代码
apt install -y openssh-client

ssh-keygen -t rsa

生成的密钥在用户根目录中的.ssh子目录中,进入.ssh目录,查看目录文件

复制代码
cd ~/.ssh/

ls

将id_rsa.pub 文件追加 到authorized_keys文件中

复制代码
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

修改authorized_keys文件的权限,命令如下:

复制代码
chmod 600 ~/.ssh/authorized_keys

将专用密钥添加到 ssh-agent 的高速缓存中

复制代码
ssh-agent bash

ssh-add ~/.ssh/id_rsa

将authorized_keys文件复制到slave01、slave02节点root用户的根目录,命令(在宿主机终端下执行 )如下:

复制代码
     sudo docker cp  masternode:/root/.ssh/authorized_keys .
     sudo docker cp  authorized_keys slave01node:/root/.ssh/
     sudo docker cp  authorized_keys slave02node:/root/.ssh/

打开主机和三个节点的防火墙

复制代码
apt install ufw -y

验证免密登陆

复制代码
ssh slave01

退出slave01远程登录

复制代码
exit

通过apt-get安装JDK

复制代码
apt-get install openjdk-8-jdk

使用vim修改".bashrc"

复制代码
 vi ~/.bashrc 

复制粘贴以下内容添加到到上面vim打开的文件中:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

export PATH=JAVA_HOME/bin:PATH

使环境变量生效,查看Java版本

复制代码
 source ~/.bashrc
 java -version

安装部署Hadoop集群

说明:每个节点上的Hadoop配置基本相同,在master节点操作,然后复制到slave01、slave02两个节点。

hadoop用Ubuntu自带的火狐浏览器下载,镜像地址:

复制代码
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/

将/目录下的hadoop-3.4.1.tar.gz压缩包解压到/hadoop-3.4.1目录下:

复制代码
sudo tar -zxf /home/Downloads/hadoop-3.4.1.tar.gz -C /usr/local

-zxf后面的是刚才下载的压缩包路径,如果没安装输入法打不了中文的可以直接找到刚才下载的那个压缩包点复制然后粘贴到命令行就是路径了

配置hadoop-env.sh文件

复制代码
vi /usr/local/hadoop-3.4.1/etc/hadoop/hadoop-env.sh

在hadoop-env.sh文件中添加JAVA环境变量:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

配置yarn-env.sh文件

复制代码
vi /usr/local/hadoop-3.4.1/etc/hadoop/yarn-env.sh

在yarn-env.sh文件中添加JAVA环境变量

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

配置core-site.xml 文件

复制代码
vi /usr/local/hadoop-3.4.1/etc/hadoop/core-site.xml

复制粘贴以下内容,添加到上面vim打开的core-site.xml 文件中:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop</value>
</property>
</configuration>

配置hdfs-site.xml 文件

复制代码
vi /usr/local/hadoop-3.4.1/etc/hadoop/hdfs-site.xml

复制粘贴以下内容,添加到到上面vim打开的hdfs-site.xml 文件中:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

配置yarn-site.xml 文件

复制代码
 vi /usr/local/hadoop-3.4.1/etc/hadoop/yarn-site.xml

复制粘贴以下内容,添加到到上面vim打开的yarn-site.xml 文件中:

复制代码
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
</configuration>

配置mapred-site.xml 文件

复制代码
vi /usr/local/hadoop-3.4.1/etc/hadoop/mapred-site.xml

复制粘贴以下内容,添加到到上面vim打开的mapred-site.xml 文件中:

复制代码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

配置workers 文件

复制代码
vi /usr/local/hadoop-3.4.1/etc/hadoop/workers

复制粘贴以下内容,添加到到上面vim打开的workers文件中:

复制代码
slave01

slave02

将配置好的hadoop-3.4.1文件夹复制到从节点

复制代码
scp -r /usr/local/hadoop-3.4.1/ root@master:/
scp -r /usr/local/hadoop-3.4.1/ root@slave01:/
scp -r /usr/local/hadoop-3.4.1/ root@slave02:/

如果输入密码错误:需要在从节点用 passwd root命令设置密码

如果显示无法连接错误:

安装 OpenSSH 服务端
复制代码
apt update && apt install -y openssh-server
启动 SSH 服务
复制代码
service ssh start 
配置 SSH
复制代码
vi /etc/ssh/sshd_config

添加:

复制代码
PermitRootLogin yes     # 允许 root 登录(仅测试环境)
PasswordAuthentication yes

重启ssh服务:

复制代码
service ssh restart 

结果如下:

配置Hadoop环境变量(在三台节点分别操作此步骤)

复制代码
vi ~/.bashrc

在.bashrc末尾添加如下内容:

复制代码
##HADOOP
export HADOOP_HOME=/hadoop-3.4.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

使环境变量生效

复制代码
source ~/.bashrc 

格式化Hadoop文件目录(在master上执行)

说明:格式化后首次执行此命令,提示输入y/n时,输入y。

复制代码
 hdfs namenode -format 

启动Hadoop集群(在master上执行):

复制代码
start-all.sh

查看Hadoop进程是否启动,在master的终端执行jps命令,出现下图效果

复制代码
 jps

浏览器地址栏中输入http://127.0.0.1:9870/,检查namenode 和datanode 是否正常,如下图所示:

在浏览器地址栏中输入http://127.0.0.1:18088/,检查Yarn是否正常,如下图所示:

运行PI实例检查集群是否成功,成功如下图所示:

复制代码
hadoop jar /hadoop-3.4.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.1.jar pi 10 10

其他细节事项:

首先打开VMware虚拟机,进入Ubuntu操作系统,进入终端:

然后在终端切换到root用户:

设置 root 用户的密码:

复制代码
sudo passwd root

输入密码后切换到root模式:

复制代码
 su root

在Linux安装软件时需要用到yum命令,也可以是apt-get命令,以下介绍如何在ubtuntu中安装配置yum




接下来是安装build-essential程序包和yum:

复制代码
apt-get install build-essential
apt-get install yum

在安装yum后可能会遇到以下报错:

E: Unable to locate package yum

这时候需要手动下载yum:

  1. 备份sources.list文件

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

2.更换源

复制代码
sudo vim /etc/apt/sources.list

如果这个时候报错无法发现vim

复制代码
sudo apt-get update
sudo apt-get install vim

按照上述方式下载vim

3.vim编辑

接下来会进入到sources.list的内容里进行编辑

  • 点击insert进入编辑模式
  • 将下面网站文本复制粘贴并覆盖,粘贴的命令是 shift + insert。记得选择相应的Linux版本,此处为Ubuntu 20.04

在第一行添加镜像源如下:

复制代码
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse

4.更新源

复制代码
sudo apt-get update

5.安装yum

复制代码
sudo apt-get install yum

然后如果有以下提示:

The following packages have unmet dependencies:

按照提示逐一安装依赖:

复制代码
sudo apt-get install python-sqlitecachec
sudo apt-get install python-pycurl
sudo apt-get install python-urlgrabber

再次安装yum:

复制代码
sudo apt-get install yum 

安装yum成功:

复制代码
yum --version

最后将自己配置的repo文件用yum-config-manager进行yum软件源添加:

复制代码
 yum-config-manager --add-repo /etc/yum.repo.d/my.repo 

通过使用yum repolist命令查看时,由于刚下载yum,显示库的软件信息为0

这时需要配置yum源

参考这篇博主的文章:

# ubuntu 系统使用 yum命令报错 There are no enabled repos.Run "yum repolist all" to see the repos you have..._there are no enabled repos. run "yum repolist all"-CSDN博客

好了之后就可以安装了

复制代码
 yum upgrade
 yum install net-tools



设置root密码

在docker容器内,初始化root密码,用于下一步的登录。

复制代码
passwd root
相关推荐
AlfredZhao3 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334669 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
得物技术9 小时前
从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流
大数据·llm·ai编程
久美子10 小时前
AI驱动数仓建设的Harness工程实践——本体建模、知识分层与上下文工程
大数据
猪脚踏浪11 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
大志哥1231 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux