当前位置: 代码迷 >> 综合 >> Hadoop3.1伪分布式环境搭建(包含示例测试和详细错误解决方式)
  详细解决方案

Hadoop3.1伪分布式环境搭建(包含示例测试和详细错误解决方式)

热度:86   发布时间:2024-02-12 18:12:41.0

一、 环境准备

以下为本教程环境,其他环境可自备。如果不会操作,请自行度娘或Google

  1. VMware15 PRO
  2. CentOS 7.6 并配置好网络(静态IP 本教程为192.9.6.25)
  3. jdk 1.8 并配置环境变量
  4. 关闭防火墙

二、配置主机名和IP映射关系

  1. 修改主机名 vim /etc/hostname 为自己定义的主机名例如 hadoop

  2. 执行 hostname hadoop 配置即可生效

  3. 修改hosts文件配置映射关系

    vim /etc/hosts

    在后面追加 192.9.6.25 hadoop
    在这里插入图片描述

三、上传并解压Hadoop

  1. 上传hadoop压缩包

? hadoop-3.1.2.tar.gz

  1. 创建一个用于存放Hadoop的文件夹

    mkdir /app/hadoop

  2. 将hadoop解压到指定/app/hadoop

    tar -zxvf hadoop-3.1.2.tar.gz -C /app/hadoop/

四、配置Hadoop

需要配置五个配置文件,进入到hadoop下的etc下的hadoop目录,查看改目录下所有的配置文件,并配置其中的五个。

cd /app/hadoop/hadoop-3.1.2/etc/hadoop/

ls

  1. 配置hadoop-env.sh文件,该配置文件用于指定hadoop运行时jdk的路径

    vim hadoop-env.sh
    export JAVA_HOME=/app/java/jdk1.8.0_211/
    
  2. 配置core-site.xml文件,该配置文件时用户自定义文件,用于配置hadoop的文件系统

    vim core-site.xml

    2.1 配置hdfs的namenode的地址,使用的时hdfs协议

    <property><name>fs.defaultFS</name><!-- hadoop是你自己配置的主机名,代表当前虚拟机 --><value>hdfs://hadoop:9000</value>
    </property>
    

    2.2 配置hadoop运行时产生数据的存储目录, 不是临时目录

    <property><name>hadoop.tmp.dir</name><value>/app/hadoop/tmp</value>
    </property>
    
  3. 配置 hdsf-site.xml文件,配置在hdfs中,一份文件存几份,默认是3份,一台机器只能存一份。

vim hdfs-site.xml

<property><name>dfs.replication</name><value>1</value>
</property>
  1. 配置mapred-site.xml文件,map-reduce是hadoop中的一种计算模型,运行在yarn(资源调度系统)中。

vim mapred-site.xml

 <!--指定mapreduce运行在yarn上-->
<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>
  1. 配置yarn-site.xml文件,指定yarn的老大resourcemanager的地址(该地址是resourcemanager的主机地址,即主机名或该主机的ip地址)。

    vim yarn-site.xml

    <property><name>yarn.resourcemanager.hostname</name><value>hadoop</value>
    </property>
    <!--指定mapreduce执行shuffle时获取数据的方式-->
    <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
    </property>
    

五、启动脚本配置

进入到hadoop的sbin目录

cd /app/hadoop/hadoop-3.1.2/sbin

  1. 编辑start-dsf.sh 和stop-dsf.sh 文件,在顶部注释下面(有效代码顶部)加入:

    HDFS_DATANODE_USER=root
    HDFS_DATANODE_SECURE_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
    
  2. 编辑start-yarn.sh 文件和stop-yarn.sh,在顶部注释下面(有效代码顶部)加入:

    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root
    

六、配置SSH免密登录

  1. 在root用户的根目录,输入 ls -al,可以看到有个.ssh的目录。

  2. 输入cd .ssh/进入到该目录。

  3. 输入ls -al查看该目录的内容。

  4. 在该目录下,输入:ssh-keygen -t rsa 一直回车即可。此时会生成一个RSA 2048文件,生成了一对公钥,一对私钥。

  5. 输入ls 查看生成的私钥和公钥。如果想要查看生成的一对秘钥,可以使用 more 秘钥名即可;

    查看公钥: more id_rsa.pub

    查看私钥: more id_rsa

  6. 进入到hadoop的根目录,执行以下命令:把公钥拷贝到使用ssh的当前机器上

    ssh-cp-id localhost(或者是你的主机名);

    ssh-copy-id localhost(或者是你的主机名);

    输入一次密码(登录linux系统的密码),待拷贝完成。

七、启动Hadoop

  1. 初始化hdfs

    该初始化不是启动hadoop的hdfs,而是对hdfs做格式化,需要到hadoop的bin目录中进行相关命令的操作。

    进入到hadoop的bin目录:

    cd /app/hadoop/hadoop-3.1.2/bin

    输入./hdfs namenode -format进行初始化;

  2. 启动Hadoop

    进入到hadoop的sbin目录:

    cd /app/hadoop/hadoop-3.1.2/sbin

    ./start-all.sh

    启动成功后,使用jps命令可以看到6个进程(pid请忽略):

    23217 SecondaryNameNode
    23640 NodeManager
    23801 Jps
    22842 NameNode
    22187 ResourceManager
    22991 DataNode
    
  3. 使用浏览器访问hadoop的hdfs,如果访问成功,则说明伪分布式环境已搭建成功:

    192.9.6.25:9870
    在这里插入图片描述

  4. 配置Hadoop环境变量,方便使用hadoop命令

    vim /etc/profile 在最下方新增

    export HADOOP_HOME=/app/hadoop/hadoop-3.1.2
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    保存后执行source /etc/profile 使其生效

八、测试

使用hadoop自带的wordcount进行测试。wordcount是计算文件中出现字母的次数。

我们先上传一个文件hello.txt用来测试,内容如下:
在这里插入图片描述
在hdfs中新建一个目录/input用来存放文件 hadoop fs -mkdir /input

查看hdfs中的文件 hadoop fs -ls /
在这里插入图片描述
把hello.txt 上传到hdfs 中的/input目录下 hadoop fs -put hello.txt /input

然后通过命令 hadoop fs -ls /input 就可以看到hello.txt 已经存在input目录下了
在这里插入图片描述
接下来使用hadoop自带的示例程序wordcount计算出hello.txt中各单词出现的次数,执行下面命令

sh hadoop jar /app/hadoop/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /input /output

然后可能会报错
在这里插入图片描述
解决方式:

执行 hadoop classpath 将输出的内容复制下来并且添加到yarn-site.xml
在这里插入图片描述
在这里插入图片描述

<property><name>yarn.application.classpath</name><value>hadoop classpath 输出的内容</value>
</property>

重启yarn

stop-yarn.sh

start-yarn.sh

再次执行刚刚的脚本

sh hadoop jar /app/hadoop/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /input /output

执行成功如下:
在这里插入图片描述
查看hdfs下的文件hadoop fs -ls /可以看到生成了output目录和tmp目录

查看output下 hadoop fs -ls /output 可以看到有_SUCCESS和part-r-00000文件,说明已经运行成功了
在这里插入图片描述
直接打开part-r-00000便可以查看结果

hadoop fs -cat /output/part-r-00000
在这里插入图片描述

  相关解决方案