• 云计算与大数据——部署Hadoop集群并运行MapReduce集群(超级详细!)


    大数据与云计算——部署Hadoop集群并运行MapReduce集群案例(超级详细!)

    Linux搭建Hadoop集群(CentOS7+hadoop3.2.0+JDK1.8+Mapreduce完全分布式集群)

    本文所用到的版本号: CentOS7 Hadoop3.2.0 JDK1.8

    基本概念及重要性

    很多小伙伴部署集群用hadoop用mapreduce,却不知道到底部署了什么,有什么用。在部署集群之前先给大家讲一下Hadoop和MapReduce的基本概念,以及它们在大数据处理中的重要性:

    -Hadoop 是一个由Apache基金会开发的开源软件框架,用于在大规模数据集上进行分布式处理和存储。Hadoop的核心组件包括Hadoop Distributed File System (HDFS)和MapReduce。

    • HDFS 是一个分布式文件系统,可以在普通的硬件上存储大量的数据。HDFS将数据分割成多个块,然后在集群中的多个节点上进行分布式存储,从而提供了高容错性和高吞吐量。

    • MapReduce 是一种编程模型,用于处理和生成大数据集。MapReduce任务包括两个阶段:Map阶段和Reduce阶段。在Map阶段,输入数据被分割成多个独立的块,然后并行处理。在Reduce阶段,处理结果被合并成一个最终的输出。

    Hadoop和MapReduce在大数据处理中的重要性主要体现在以下几点:

    1. 可扩展性:Hadoop可以在数百或数千台机器上运行,处理PB级别的数据。

    2. 容错性:Hadoop可以自动处理节点故障,保证数据的可靠性和完整性。

    3. 成本效益:Hadoop可以在普通的硬件上运行,降低了大数据处理的成本。

    4. 灵活性:MapReduce编程模型可以处理结构化和非结构化的数据,适应各种类型的数据处理任务。

    下面正式进入正题话!

    一、直接选择root用户登录并关闭防火墙

    在这里插入图片描述

    直接选择root用户登录,避免了普通用户授权和切换用户导致的一些环境问题,简单来说就是高效、方便。

    然后关闭防火墙:

    systemctl stop firewalld  //关闭防火墙
    
    • 1

    在这里插入图片描述

    systemctl disable firewalld  //关闭开机自启
    
    • 1

    在这里插入图片描述

    systemctl status firewalld  //查看防火墙状态
    
    • 1

    在这里插入图片描述
    让防火墙处于关闭状态。

    二、实现ssh免密码登录

    配置ssh的无密码访问

    ssh-keygen -t rsa
    
    • 1

    连续按回车
    在这里插入图片描述

    cd ~/.ssh
    cat id_rsa.pub >> authorized_keys
    
    • 1
    • 2

    在这里插入图片描述
    设置ssh服务器自动启动

    vi ~/.bashrc 
    
    • 1

    在文件的最末尾按O进入编辑模式,加上:

    /etc/init.d/ssh start
    
    • 1

    在这里插入图片描述
    按ESC返回命令模式,输入:wq保存并退出。
    让修改即刻生效

    source ~/.bashrc
    
    • 1

    在这里插入图片描述
    查看ssh服务状态。

    systemctl status sshd
    
    • 1

    在这里插入图片描述

    三、CentOS7 安装jdk1.8

    1、yum安装

    1. 安装之前先查看一下有无系统自带jdk,有的话先卸载。
      在这里插入图片描述
      卸载自带的jdk:
      rpm -e --nodeps 上步查询出的所有jdk
      例如:
    [root@master ~]# rpm -e --nodeps copy-jdk-configs-3.3-10.el7_5.noarch
    
    • 1

    验证是否已经卸载干净:

    java -version
    
    • 1

    在这里插入图片描述
    卸载完之后开始安装jdk1.8:

    查看可安装的版本

    yum list java*
    
    • 1

    在这里插入图片描述
    安装1.8.0版本openjdk

    yum -y install java-1.8.0-openjdk*
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    安装位置查看:

    rpm -qa | grep java
    rpm -ql java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
    
    • 1
    • 2

    在这里插入图片描述
    添加用户环境变量
    添加:

    export JAVA_HOME=/usr/lib/jvm/java-openjdk
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    然后执行

    source ~/.bashrc
    
    • 1

    在这里插入图片描述
    验证安装:

    which java
    
    • 1

    查看java版本信息

    java -version
    
    • 1

    在这里插入图片描述
    说明JDK配置完成。

    四、下载hadoop

    这个链接也有更多3.2.0版本其它的hadoop文件:
    https://archive.apache.org/dist/hadoop/common/hadoop-3.2.0/
    这里有下载好的hadoop-3.2.0.tar.gz网盘文件链接:
    链接:https://pan.baidu.com/s/1a3GJH_fNhUkfaDbckrD8Gg?pwd=2023

    下载hadoop文件:
    在这里插入图片描述
    然后上传文件并解压缩
    1.在opt目录下新建一个名为hadoop的目录,并将下载得到的hadoop-3.2.0.tar上传到该目录下
    mkdir /opt/hadoop

    解压安装:

    tar -zxvf hadoop-3.2.0.tar.gz
    
    • 1

    在这里插入图片描述
    配置Hadoop环境变量:

    vim ~/.bashrc
    
    • 1

    在这里插入图片描述
    添加hadoop环境变量:

    export JAVA_HOME=/usr/lib/jvm/java-openjdk
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin:/opt/hadoop/hadoop-3.2.0/bin:/opt/hadoop/hadoop-3.2.0/sbin
    export HADOOP_HOME=/opt/hadoop/hadoop-3.2.0
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    然后我们执行

    source  ~/.bashrc
    
    • 1

    使修改的配置文件生效。
    在这里插入图片描述

    五、Hadoop配置文件修改

    新建几个目录:

    mkdir /root/hadoop
    mkdir /root/hadoop/tmp
    mkdir /root/hadoop/var
    mkdir /root/hadoop/dfs
    mkdir /root/hadoop/dfs/name
    mkdir /root/hadoop/dfs/data
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    修改etc/hadoop中的一系列配置文件
    vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/core-site.xml
    在节点内加入配置:

    <configuration>
     <property>
            <name>hadoop.tmp.dir</name>
            <value>/root/hadoop/tmp</value>
            <description>Abase for other temporary directories.</description>
       </property>
       <property>
            <name>fs.default.name</name>
            <value>hdfs://master:9000</value>
       </property>
       </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    修改hadoop-env.sh

    vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/hadoop-env.sh
    
    • 1

    将 export JAVA_HOME=${JAVA_HOME}
    修改为: export JAVA_HOME=/usr/lib/jvm/java-openjdk
    说明:修改为自己的JDK路径
    在这里插入图片描述

    修改hdfs-site.xml
    vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/hdfs-site.xml
    在节点内加入配置:

    <configuration>
    <property>
       <name>dfs.name.dir</name>
       <value>/root/hadoop/dfs/name</value>
       <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.
       </description>
    </property>
    
    <property>
       <name>dfs.data.dir</name>
       <value>/root/hadoop/dfs/data</value>
       <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.
       </description>
    </property>
    
    <property>
       <name>dfs.replication</name>
       <value>2</value>
    </property>
    
    <property>
       <name>dfs.permissions</name>
       <value>false</value>
       <description>need not permissions</description>
    </property>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述
    新建并且修改mapred-site.xml:
    vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/mapred-site.xml
    在节点内加入配置:

    <configuration>
    <!-- 配置mapReduce在Yarn上运行(默认本地运行) -->
    <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
    </property>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    修改workers文件:

    vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/workers
    
    • 1

    将里面的localhost删除,添加以下内容(master和node1节点都要修改):

    master
    node1
    
    • 1
    • 2

    在这里插入图片描述

    注意:上面修改后不能有多余空格,文件中不允许有空行。

    也可以修改好master节点的/opt/hadoop/hadoop-3.2.0/etc/hadoop/workers文件,然后一条命令直接分发给集群,这样就不用再修改其它节点的workers文件:

    xsync  /opt/hadoop/hadoop-3.2.0/etc
    
    • 1

    修改yarn-site.xml文件:

    HADOOP_CLASSPATH 是设置要运行的类的路径。否则当你用hadoop classname [args]方式运行程序时会报错,说找不到要运行的类。用hadoop jar jar_name.jar classname [args]方式运行程序时没问题

    这边需要设置hadoop classpath否则后面mapreduce会报错找不到主类:

    hadoop classpath
    
    • 1

    在这里插入图片描述

    记下返回的结果

    vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/yarn-site.xml 
    
    • 1

    添加一个配置

    <property>
            <name>yarn.application.classpath</name>
            <value>hadoop classpath返回信息</value>
    </property>
    
    • 1
    • 2
    • 3
    • 4

    这是我的yarn-site.xml配置:

    <configuration>
            <property>
                <name>yarn.nodemanager.aux-servicesname>
                <value>mapreduce_shufflevalue>
            property>
            <property>
                <name>yarn.resourcemanager.hostnamename>
                <value>mastervalue>
            property>
            <property>
                <name>yarn.application.classpathname>
                <value>/opt/hadoop/hadoop-3.2.0/etc/hadoop:/opt/hadoop/hadoop-3.2.0/share/hadoop/common/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/common/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/hdfs:/opt/hadoop/hadoop-3.2.0/share/hadoop/hdfs/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/hdfs/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/yarn:/opt/hadoop/hadoop-3.2.0/share/hadoop/yarn/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/yarn/*value>
            property>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    配置hadoop-3.2.0/sbin/目录下start-dfs.sh、start-yarn.sh、stop-dfs.sh、stop-yarn.sh文件
    服务启动权限配置

    cd /opt/hadoop/hadoop-3.2.0
    
    • 1

    配置start-dfs.sh与stop-dfs.sh文件

    
    ```bash
    vi sbin/start-dfs.sh
    vi sbin/stop-dfs.sh
    
    • 1
    • 2
    • 3
    • 4

    都在里面加入下面内容

    HDFS_DATANODE_USER=root
    HADOOP_SECURE_DN_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    配置start-yarn.sh与stop-yarn.sh文件

    vi sbin/start-yarn.sh
    vi sbin/stop-yarn.sh
    
    • 1
    • 2

    加入下面内容

    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述
    配置好基础设置(SSH、JDK、Hadooop、环境变量、Hadoop和MapReduce配置信息)后,克隆虚拟机,获得从机node1节点。
    在这里插入图片描述
    克隆master主机后,获得从机node1节点。
    然后开始修改网卡信息:

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    
    • 1

    修改node1节点ip信息:
    在这里插入图片描述

    修改node1节点主机名:

    vi /etc/hostname
    
    • 1

    在这里插入图片描述
    修改node1节点对应的ip 和主机名(主从节点保持一致)

    vim /etc/hosts  
    
    • 1

    在这里插入图片描述
    主从节点互连ssh试试:
    先试试在master节点连接node1节点

    ssh node1
    
    • 1

    在这里插入图片描述
    再试试node1节点连接master节点:

    ssh master
    
    • 1

    在这里插入图片描述
    OK,互连成功。(按exit可以退出

    六、启动Hadoop

    因为master是namenode,node1是datanode,所以只需要对master进行初始化操作,也就是对hdfs进行格式化。
    进入到master这台机器/opt/hadoop/hadoop-3.2.0/bin目录:

      cd /opt/hadoop/hadoop-3.2.0/bin
    
    • 1

    执行初始化脚本

      ./hadoop namenode -format
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    然后执行启动进程:

    ./sbin/start-all.sh
    
    • 1

    在这里插入图片描述
    查看启动进程情况。

    jps
    
    • 1

    在这里插入图片描述

    master是我们的namenode,该机器的IP是192.168.95.20,在本地电脑访问如下地址:

    http://192.168.95.20:9870/
    
    • 1

    在这里插入图片描述
    在本地浏览器里访问如下地址:

    http://192.168.95.20:8088/cluster
    
    • 1

    自动跳转到cluster页面
    在这里插入图片描述
    在hdfs上建立一个目录存放文件

    ./bin/hdfs dfs -mkdir -p /home/hadoop/myx/wordcount/input
    
    • 1

    查看分发复制是否正常

    ./bin/hdfs dfs -ls /home/hadoop/myx/wordcount/input
    
    • 1

    在这里插入图片描述

    七、运行MapReduce集群

    Mapreduce运行案例:
    在hdfs上建立一个目录存放文件
    例如

    ./bin/hdfs dfs -mkdir -p /home/hadoop/myx/wordcount/input
    
    • 1

    可以先简单地写两个小文件分别为text1和text2,如下所示。
    file:text1.txt

    hadoop is  very good 
    mapreduce is very good
    
    • 1
    • 2
    vim text1
    
    • 1

    在这里插入图片描述

    然后可以把这两个文件存入HDFS并用WordCount进行处理.

    ./bin/hdfs dfs -put text1 /home/hadoop/myx/wordcount/input
    
    • 1

    在这里插入图片描述
    查看分发情况
    在这里插入图片描述
    运行MapReduce用WordCount进行处理

    ./bin/hadoop jar ![在这里插入图片描述](https://img-blog.csdnimg.cn/81fe96bc9823429d8263e450ba417363.png)
    /opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar  wordcount /home/hadoop/myx/wordcount/input /home/hadoop/myx/wordcount/output
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    最终结果会存储在指定的输出目录中,查看输出目录里面可以看到以下内容。

    ./bin/hdfs dfs -cat /home/hadoop/myx/wordcount/output/part-r-00000*
    
    • 1

    运行输出结果也可以在web端查看,里面有详细信息:

    http://192.168.95.20:9870/explorer.html#/home/hadoop/myx/wordcount/output
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    以上输出结果为每个单词出现的次数。

    再来试试第二个案例:
    file:text2.txt

    vim text2
    
    • 1
    hadoop is  easy to learn 
    mapreduce is  easy to learn
    
    • 1
    • 2

    在这里插入图片描述
    在浏览器端查看新建的input2目录:
    在这里插入图片描述
    运行MapReduce进行处理,设置输出的目录为output2(输出结果目录不用提前创建,Mapreduce运行过程中会自动生成output2输出目录)。

    ./bin/hadoop jar /opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar  wordcount /home/hadoop/myx/wordcount/input2 /home/hadoop/myx/wordcount/output2
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    运行结束后,查看text2的输出结果

    ./bin/hdfs dfs -cat /home/hadoop/myx/wordcount/output2/part-r-00000*
    
    • 1

    在这里插入图片描述

    运行输出结果也可以在web端查看,里面有详细信息:

    http://192.168.95.20:9870/explorer.html#/home/hadoop/myx/wordcount/output2
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    以上输出结果为每个单词出现的次数。

    我们再自己试试运行测试程序WordCount
    先在hadoop当前用户目录下新建文件夹WordCount,在其中建立两个测试文件分别为file1.txt,file2.txt。自行在两个文件中填写内容。
    新建文件夹WordCount。

    mkdir WordCount
    ls
    
    • 1
    • 2

    在这里插入图片描述

    cd WordCount
    vim file1.txt
    
    • 1
    • 2

    在这里插入图片描述
    file1.txt文件内容为:

    This is the first hadoop test program!
    
    • 1

    在这里插入图片描述

    vim file2.txt
    
    • 1

    file2.txt文件内容为:

    This  program is not very difficult,but this program is a common hadoop program!
    
    • 1

    在这里插入图片描述
    然后在Hadoop文件系统HDFS中/home目录下新建文件夹input,并查看其中的内容。具体命令如下。

    cd /opt/hadoop/hadoop-3.2.0
    ./bin/hadoop fs -mkdir /input
    ./bin/hadoop fs -ls /
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在浏览器端查看:

    http://192.168.95.20:9870/explorer.html#/input
    
    • 1

    在这里插入图片描述
    将WordCount文件夹中file1.txt\file2.txt文件上传到刚刚创建的“input”文件夹。具体命令如下。

    ./bin/hadoop fs -put /opt/hadoop/hadoop-3.2.0/WordCount/*.txt  /input
    
    • 1

    在这里插入图片描述
    运行Hadoop的示例程序,设置输出的目录为/output(输出结果目录不用提前创建,Mapreduce运行过程中会自动生成/output输出目录)。

    ./bin/hadoop jar /opt/had![在这里插入图片描述](https://img-blog.csdnimg.cn/abf75678cb6943698c1a26d250317caf.png)
    oop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar  wordcount  /input /output
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    查看输出结果的文件目录信息和WordCount结果。
    使用如下命令查看输出结果的文件目录信息。

    ./bin/hadoop fs -ls /output
    
    • 1

    在这里插入图片描述

    使用如下命令查看WordCount的结果。

    ./bin/hdfs dfs -cat /output/part-r-00000*
    
    • 1

    输出结果如下所示
    在这里插入图片描述
    运行输出结果也可以在web端查看,里面有详细信息:

    http://192.168.95.20:9870/explorer.html#/output
    
    • 1

    在这里插入图片描述
    以上输出结果为每个单词出现的次数。
    至此Centos搭建hadoop集群和运行3个MapReduce集群案例完成!

    在这里给大家扩展一下优化Hadoop集群性能和MapReduce任务效率的一些技巧和建议:

    1. 硬件优化:选择适合的硬件配置是提高Hadoop集群性能的关键。例如,使用更快的CPU,更大的内存,更快的硬盘(如SSD),以及高速的网络连接。

    2. 配置优化:Hadoop和MapReduce的配置参数可以根据具体的工作负载进行调整。例如,可以增加HDFS的块大小以提高大文件的处理速度,或者调整MapReduce的内存设置以适应更大的任务。

    3. 数据本地化:尽可能在数据所在的节点上运行MapReduce任务,以减少网络传输的开销。

    4. 并行处理:通过增加MapReduce任务的并行度,可以更充分地利用集群的资源。

    5. 编程优化:在编写MapReduce程序时,应尽可能减少数据的传输和排序。例如,可以使用Combiner函数来减少Map和Reduce阶段之间的数据传输。

    6. 使用高级工具:一些高级的数据处理工具,如Apache Hive和Apache Pig,可以自动优化MapReduce任务,使其更高效。

    7. 监控和调试:使用Hadoop自带的监控工具,如Hadoop Web UI和Hadoop Metrics,可以帮助你发现和解决性能问题。

    以上只是一些基本的优化技巧和建议,具体的优化策略需要根据具体需求和环境进行调整。小马同学在这里祝各位部署一切顺利!

  • 相关阅读:
    python管道技术,subprocess模块详解
    我司在国内首个通讯行业的Teardown Room在锐捷网络落地
    并发、并行和多线程关系
    牛客练习赛106 G
    CF思维训练
    Windows同步yum源
    设计模式:外观模式(Facade Pattern),理解为小爱同学模式
    TCP的三次挥手、四次握手
    哪些专业跟芯片有关?
    aspectj切面织入
  • 原文地址:https://blog.csdn.net/Myx74270512/article/details/133246660