0


Ubuntu上Hadoop集群安装和搭建(三台虚拟机,保姆级教程)

1.安装三台虚拟机

注意:这里不要使用克隆去克隆虚拟机,因为ub克隆后网络会出现问题,所建议大家直接安装三台虚拟机

2.配置静态网络(三台虚拟机都要操作)

2.1 查看网络是否连通

ping baidu.com

2.2 安装net-tools

sudo su
apt upgrade
apt install net-tools

2.3.查看物理地址

ifconfig

2.4 查看ip地址的起始和结束地址

ip addr show

从上图中我们可以看到,网络接口

enp0s5

的详细信息如下:

  • 接口名称enp0s5
  • IPv4 地址10.211.55.9/24
  • 广播地址10.211.55.255
  • 子网掩码/24(等价于 255.255.255.0
/24

表示前 24 位用于表示网络号,剩下 8 位

用于主机号。这意味着该子网的 IP 地址范围是

10.211.55.0

10.211.55.255

2.5 修改网络配置文件

  • ip地址设置参照2.4小节中IP地址范围自行选择(在起始地址和结束地址的范围内)
  • 子网掩码设置为默认值:255.255.255.0
  • 采用route -n命令查看主机的网关,把网关IP改为10.211.55.1:

  • DNS使用谷歌提供的免费dns:8.8.8.8
  • 然后重启网卡。激活配置 测试ip是否配置完成:
ip a

  • 测试DNS是否配置成功,测试能否访问百度:
ping 8.8.8.8
ping baidu.com

2.6 修改三台主机名

hostnamectl set-hostname hadoop01
reboot
hostnamectl set-hostname hadoop0
reboot
hostnamectl set-hostname hadoop03
reboot

3. 配置hosts文件和ssh免密登录

3.1 修改hosts配置文件(所有虚拟机都需要)

apt install vim
vim /etc/hosts

3.2 开启ssh服务

sudo apt-get update
sudo apt-get install openssh-server
  • 当安装完后
sudo service ssh start
  • 检查是否运行
sudo service ssh status
  • 运行成功会显示

3.3 开机自启动

sudo systemctl enable ssh
  • 生成密钥文件
ssh-keygen -t rsa

  • 将本机公钥文件复制到其他虚拟机上
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

一定要切回初始用户,因为Ubuntu的root用户密码是随机的确定不了

3.4 查看是否配置成功

ssh分别连接hadoop02、hadoop03:

4. Hadoop集群配置

**4.1 **在所有虚拟机根目录下新建文件夹export,export文件夹中新建data、servers和software文件

cd /
sudo mkdir -p /export/{data,servers,software}

4.2 准备安装包

hadoop-3.3.6.tar.gz:Apache Hadoop

jdk-8u391-linux-x64.tar.gz:Java Archive Downloads - Java SE 8u211 and later

4.3 先修改三台虚拟机的export权限

sudo chmod 777 /export
sudo chmod 777 /export/software

4.4 安装jdk(所有虚拟机都要有的操作)

  • 解压jdk
sudo su
cd /export/software
tar -zxvf jdk-8u391-linux-x64.tar.gz -C /export/servers/
  • 重命名jdk目录
cd /export/servers
mv jdk1.8.0_391 jdk
  • 配置jdk环境变量
vim /etc/profile

#在配置文件末尾追加
export JAVA_HOME=/export/servers/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 使配置文件生效
source /etc/profile
  • 查看是否生效
java -version

4.4 Hadoop安装(所有虚拟机都要操作)

  • 解压hadoop
cd /export/software
tar -zxvf hadoop-3.3.6.tar.gz -C /export/servers/
  • 打开配置文件
vim /etc/profile
  • 配置hadoop环境变量
#在文件末尾追加
export HADOOP_HOME=/export/servers/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 使配置文件生效
source /etc/profile
  • 查看是否配置成功
hadoop version

4.5 Hadoop集群配置

  • 进入主节点设置目录
cd /export/servers/hadoop-3.3.6/etc/hadoop/
  • 修改hadoop-env.sh文件
vim hadoop-env.sh
# 添加
export JAVA_HOME=/export/servers/jdk
  • 修改core-site.xml
vim core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/servers/hadoop-3.3.6/tmp</value>
    </property>
</configuration>
  • 修改hdfs-site.xml
vim hdfs-site.xml

<configuration>
     <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///export/servers/hadoop-3.3.6/tmp/dfs/name</value>
    </property>

    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop01:50070</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address</name>
       <value>hadoop01:9000</value>
    </property>

    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop02:50090</value>
    </property>
</configuration>
  • 修改mapred-site.xml
vim mapred-site.xml

<configuration>
 <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  • 修改yarn-site.xml
vim yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop01</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
  • 修改slaves文件
#将文件中的localhost删除,添加主节点与子节点的hostname
vim workers

  • 将主节点中配置好的文件和hadoop目录copy给子节点
scp /etc/profile hadoop02:/etc/profile
scp /etc/profile hadoop03:/etc/profile
scp -r /export/ hadoop02:/
scp -r /export/ hadoop03:/
  • 使子节点中的配置文件生效
# 返回子节点hadoop02,hadoop03
source /etc/profile
  • **在主节点格式化文件系统 **
hdfs namenode -format

5. Hadoop集群测试

5.1 启动集群:在主节点启动所有HDFS服务进程

start-dfs.sh

5.2 在主节点启动所有YARN服务进程

start-yarn.sh

5.3 使用jps命令查看进程

主节点hadoop01:

hadoop02:

hadoop03:

  • NameNode(名称节点):有时候也叫MasterNode(主节点),它不保存实际数据,只保存元数据(数据块的数目、大小、存储位置)。它也维护着文件系统的命名空间和路径信息。名称节点应当位于可靠的服务器上。
  • SecondaryNameNode(第二名称节点):用于在名称节点失效时进行替换。
  • DataNode(数据节点):有时候也叫SlaveNode(从节点)。它保存实际的数据,根据名称节点的指令,执行数据块的创建、删除、复制。数据节点的数量可以很庞大,但对服务器的要求不高。

5.4 通过UI界面查看Hadoop运行状态

在Windows系统下,访问http://hadoop01:50070,查看HDFS集群状态。如果查看不了关闭虚拟机防火墙:

sudo ufw disable

5.5 查看Yarn集群状态

** 在Windows系统下,访问http://hadoop01:8088**

6 hadoop集群时间同步

6.1. 确保日志一致性

Hadoop 集群中的各个节点需要有一致的时间戳,以确保各节点产生的日志能够按照时间顺序正确地排列和分析。如果节点之间的时间不同步,日志的时间戳可能会出现错乱,导致以下问题:

  • 难以定位故障:分析日志时,时间戳错乱可能导致难以关联不同节点之间发生的事件。
  • 数据处理流程混乱:调度任务、数据写入和读取等操作依赖时间顺序,时间不同步可能会导致调度错误或者数据异常。

6.2. 分布式文件系统的一致性

Hadoop 使用的 HDFS(Hadoop Distributed File System)是一个分布式文件系统,文件的创建、修改和访问时间(时间戳)在分布式环境中都依赖于系统时间来维护一致性。如果节点之间时间不同步,可能导致以下问题:

  • 文件冲突:文件在多个节点之间同步时,时间戳不同可能导致文件被错误覆盖或丢失。
  • 数据一致性错误:HDFS 依赖文件的创建和修改时间来进行数据管理和同步,时间不同步会破坏 HDFS 的一致性。

6.3. YARN 作业调度和执行

Hadoop 中的 YARN(Yet Another Resource Negotiator)负责作业的调度和资源分配,调度和执行流程中对各个节点的时钟有以下依赖:

  • 任务启动和结束时间的记录:调度器需要记录每个任务的开始和结束时间,用来计算任务的执行时间、判断是否需要重试、是否超时等。
  • 任务重启机制:如果节点之间的时间不一致,调度器可能会认为某些任务没有按时完成而触发重启机制,从而导致任务的无效重启或失败。

6.4 配置hadoop集群中主机hadoop01、hadoop02、hadoop03时间同步

  • 1. 在所有虚拟机上安装 chrony,在三台虚拟机上分别执行以下命令:
sudo apt update
sudo apt install chrony -y
  • 2. 配置时间服务器(hadoop01),在时间服务器(hadoop01)上编辑 chrony 配置文件:
sudo vim /etc/chrony/chrony.conf

在配置文件中进行以下修改:

  • 注释掉默认的时间服务器(poolserver 行)。
  • 添加本机作为服务器的配置。
  • 允许客户端(hadoop02和 hadoop03)访问此服务器。

配置文件如下:

10.211.55.0使本机作为时间源,local stratum 10 设置本机的层次结构,allow 10.211.55.0/24 允许局域网内的所有设备访问时间服务器。

  • 启动并启用 chrony 服务:
sudo systemctl restart chrony
sudo systemctl enable chrony
  • 检查 chrony 服务状态,确保其正常运行:
sudo systemctl status chrony

  • 检查时间服务器状态:

  • 3. 配置客户端(hadoop02和 hadoop03)

编辑

chrony

配置文件:

sudo vim /etc/chrony/chrony.conf

在配置文件中进行以下修改:

  • 注释掉默认的时间服务器。
  • 设置时间服务器为 hadoop01 的 IP 地址。

配置文件示例如下:

  • 保存配置并退出。启动并启用 chrony 服务
sudo systemctl restart chrony
sudo systemctl enable chrony
  • 检查 chrony 服务状态:
sudo systemctl status chrony

  • 检查客户端是否成功连接到时间服务器:
chronyc sources

  • **4. 验证集群时间同步 **

在所有虚拟机上分别运行以下命令,查看时间是否同步:

timedatectl

或者使用

chronyc

查看同步状态:

chronyc tracking

  • ** 5. 如果你希望 hadoop02 和 hadoop03也可以作为时间源(冗余配置)**

可以将 hadoop02 和 hadoop03配置成时间服务器(类似于 hadoop01 的配置),并在每台机器上设置彼此为时间源。这样就形成了一个完整的时间同步集群结构,任何一台服务器故障时,其余机器仍能保持时间同步。

配置文件可以修改如下(三台虚拟机都需要):

server10.211.55.8 iburst
server 10.211.55.9 iburst
server 10.211.55.10 iburst

这样设置后,即使某台时间服务器不可用,其他客户端仍然可以与剩余的服务器同步时间。

7. Ubuntu搭建Hadoop集群搭建常见问题

当我们启动hdfs服务时,即运行如下命令:

start-dfs.sh

报错:hadoop01: ERROR: Cannot set priority of datanode process 540655

找了很多篇帖子,很多都没有把问题说清楚,下面我提供一种解决方案:

首先这个问题可能是由如下几种情况引起的:

7.1 **配置

HADOOP_NICENESS

变量**

HADOOP_NICENESS

配置为默认值

0

,这将禁止 Hadoop 在启动时尝试更改进程优先级。可以在

hadoop-env.sh

中进行配置。

  • 打开 hadoop-env.sh 配置文件(通常位于 $HADOOP_HOME/etc/hadoop/hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

export HADOOP_NICENESS=0
  • 保存并退出文件,然后重新启动 Hadoop 集群:
stop-dfs.sh
stop-yarn.sh
start-dfs.sh
start-yarn.sh

这会确保 Hadoop 在启动各个服务时不会更改进程的优先级,从而避免该错误。

7.2 修改文件夹hadoop-3.3.6的权限

  • 首先停掉所有服务:
stop-all.sh
  • 在主节点格式化文件系统
hdfs namenode -format
  • 修改文件夹hadoop-3.3.6的权限
sudo chmod -R 777 /home/user/hadoop-3.3.6/
  • 最后重启所有服务:
start-all.sh

经过上面一系列操作,我们就可以查看HDFS集群状态和Yarn集群状态

参考的帖子:

https://zhuanlan.zhihu.com/p/669223842?utm_medium=social&utm_psn=1820168962375282688&utm_source=wechat_session [Hadoop] Namenode Error (localhost: ERROR: Cannot set priority of datanode process ) — B's

标签: ubuntu hadoop linux

本文转载自: https://blog.csdn.net/wangjian530/article/details/142781899
版权归原作者 金州饿霸 所有, 如有侵权,请联系我们删除。

“Ubuntu上Hadoop集群安装和搭建(三台虚拟机,保姆级教程)”的评论:

还没有评论