【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)

【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)

  • 环境搭建
    • 1. 环境基础
    • 2. 下载Hadoop
    • 3. 解压
    • 4. 配置Hadoop-env.sh
    • 5. 配置单节点上伪分布式模式
    • 6. 测试
  • 解决问题:
    • 1. 无法正常启动NameNode
    • 2. 无法正常启动DataNode

本文的目标是辅助官方文档,构建并配置单节点Hadoop伪分布式模式(Pseudo-Distributed Operation Mode)。

本文作者作为接触Linux和Hadoop的超级小白,在配置过程中踩坑无数,这里将遇到的问题和解决方案总结如下。如有解释错误以及更好方法,还请多多指正,共同学习共同进步(呲牙笑)

环境搭建

1. 环境基础

  • Linux
  • Java:jdk1.8.0(版本参考:Hadoop Java Versions)
  • ssh 和 sshd,安装代码如下
  $ sudo apt-get install ssh
  $ sudo apt-get install pdsh

2. 下载Hadoop

选择合适的镜像文件 Apache Download Mirrors,这几个镜像都可以,作者选择清华的镜像,并选择了hadoop-3.2.1版本,注意下载.tar.gz结尾的文件。
【版本选择时候一定要注意和其他平台的兼容问题!!最好去查一下官方文件,这里附上 HBase与Hadoop版本对应链接】
【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)_第1张图片
【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)_第2张图片
【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)_第3张图片

3. 解压

// 新建目录
$ mkdir /usr/hadoop

// 将下载好的.tar.gz文件移动到上述目录下
$ mv hadoop-3.2.1.tar.gz  /usr/hadoop

// 解压文件
$ tar -zxvf hadoop-3.2.1.tar.gz

4. 配置Hadoop-env.sh

// 通过cd命令不断深入,找到etc目录下的Hadoop-env.sh文件(路径可能有区别)
$ cd /usr/hadoop/hadoop-3.2.1/etc/hadoop

// 编辑文件(利用gedit命令也可)
$ vi hadoop-env.sh

// 打开文件后,找到JAVA_HOME,将其前面的#去掉,并将路径调整本机JAVA路径
 # set to the root of your Java installation
  export JAVA_HOME=/usr/java/jdk1.8.0_261
 
//更改后关闭并保存:按Esc键后,输入 :wq

做完以上步骤,就可以开启Hadoop集群;其中包括三种模式:

  • Local (Standalone) Mode
  • Pseudo-Distributed Mode
  • Fully-Distributed Mode

本文仅介绍第二种伪分布式模式,其他配置可参考官方文档。

5. 配置单节点上伪分布式模式

参考第四步,配置文件etc/hadoop/core-site.xml,增加如下内容:


    
        fs.defaultFS
        hdfs://localhost:9000
    

配置etc/hadoop/hdfs-site.xml文件:


    
        dfs.replication
        1
    

6. 测试

配置完成,官方文档会带大家查看一些配置情况,这里就提炼干货不多说了。接下来就是测试部分,各种迷幻问题也就来了。。。

(1) 格式化文件系统

  $ bin/hdfs namenode -format

(2) 启动DataNode和NameNode

  $ sbin/start-dfs.sh

(3) 通过浏览器查看NameNode和DataNode的情况

  http://localhost:9870/

如果以上步骤都顺利进行,jps之后,显示均启动,那恭喜你完工了!!

【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)_第4张图片
然而理想丰满,现实残酷地让人想落泪。作者就遇到了各种各样的问题T_T

解决问题:

1. 无法正常启动NameNode

SHUTDOWN_MSG: Shutting down NameNode at ___ 【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)_第5张图片
关于这个问题,感谢一篇博文的帮助,这里提供了很好的解决方案,可以参考原文。

  • 在Hadoop安装目录下找到sbin文件夹
  • 在里面修改四个文件
  • 对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:
    #!/usr/bin/env bash
    HDFS_DATANODE_USER=root
    HADOOP_SECURE_DN_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
  • 对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:
    #!/usr/bin/env bash
    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root

2. 无法正常启动DataNode

SHUTDOWN_MSG: Shutting down DataNode at ___,且start-dfs.sh之后jps后没有DataNode,即DataNode节点启动失败

在这里插入图片描述
这个问题,同样感谢两篇博文的帮助,这里提供了很好的解决方案,可以参考原文1和参考原文2。

查看日志文件,发现有:

java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-root/dfs/data: namenode clusterID = CID-c7037991-30b6-4ff1-a886-b9097304b43d; datanode clusterID = CID-5073d500-972a-4226-8831-fb082f72864c

  • 问题描述
    截取的第一行日志说明了datanode的clusterID 和 namenode的clusterID 不匹配

  • 解决方法:

  1. 根据日志进入路径(/tmp/hadoop-root/dfs/data)
  2. 其下有/data和/name两个目录。将name/current下的VERSION中的clusterID复制到data/current下的VERSION中,覆盖掉原来的clusterID,让两个保持一致;或者,直接删除掉data和name两个目录下的内容
  3. 重启hadoop
  4. 注意:在重启之前,一定要结束掉hadoop所有进程(sbin/stop-all.sh),否则会出现其他错误。

至此,我们迎来了阶段性的胜利,庆祝撒花!遇到其他问题会再补充,希望大家都可以配置成功!!!

你可能感兴趣的:(Hadoop相关配置,hadoop,linux,java,大数据,分布式)