ubuntu 搭建 Hadoop 完全分布式集群

Hadoop 相关软件及版本

软件 版本
Linux OS ubuntu-20.04.1
JDK jdk-8u261-linux-x64
VMware 15.5.6
Hadoop hadoop-2.7.7

虚拟机参数配置

  1. master:1.5G ~ 4G 内存、20G 硬盘、NAT、1 ~ 4 核
  2. slave1 ~ slave2:1G 内存、20G 硬盘、NAT、1 核

上面的虚拟机参数配置只是参考,可以根据自身机器的实际情况进行调整

准备工作

  1. 新建虚拟机 master,安装 Ubuntu

  2. 配置固定 IP

  3. 安装必要软件(SSH 服务端、安装 Java 环境、安装 Hadoop,并完成配置)

  4. 克隆 master 到 slave1、slave2

  5. 修改 slave1 ~ slave2 的 IP,改为固定 IP

分布式模式配置

  1. 修改主机名

    为了便于区分 master 节点 和 Slave 节点,可以修改各个节点的主机名

    sudo vi /etc/hostname
    # master 虚拟机修改为 master
    # slave1 虚拟机修改为 slave1
    # slave2 虚拟机修改为 slave2
    

    注意:只有重启 Linux 系统才能看到主机名的变化)

  2. 设置 hosts 文件

    配置 IP 与 HOSTNAME 的映射(IP 根据自己机器情况设置)

    sudo vi /etc/hosts
    # 3 台虚拟机都配置一样	
    # 192.168.13.21   master
    # 192.168.13.22   slave1
    # 192.168.13.23   slave2
    
  3. ssh 无密码登录

    如果之前已经生成过公钥,必须删除原来生成的公钥

    cd ~/.ssh			# 如果没有该目录,先执行一次 ssh localhost
    rm ./id_rsa*		# 删除之前生成的公钥(如果已经存在)
    

    生成公钥和密钥

    ssh-keygen -t rsa	# 执行该命令后,遇到提示信息,一直按 Enter 键就可以了
    cd ~/.ssh
    cat ./id_rsa.pub >> ./authorized_keys	# 将公钥赋予给authorized_keys
    sudo chmod 644 authorized_keys			# 修改权限
    

    完成后执行命令

    ssh master
    

    如果不用输入密码,则配置成功

    在 master 节点上将公钥传输到 slave1 ~ 2 节点

    # ssh-copy-id -i ~/.ssh/id_rsa.pub master
    # ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
    # ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
    scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/	# hadoop改为你的用户
    scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh/
    

    在终端中输入 ssh master、ssh slave1、ssh slave2,如果可直接登录,而不需要输入密码,则 ssh 无密码登录配置成功

  4. 配置集群/分布式环境

    需要修改的文件:

    • slaves
      slave1
      slave2
      
    • core-site.xml
      <configuration>
       		<property>
                      <name>fs.defaultFS</name>
                      <value>hdfs://master:9000</value>
              </property>
              <property>
                      <name>hadoop.tmp.dir</name>
                      <value>file:/usr/local/hadoop/tmp</value>
                      <description>Abase for other temporary directories.</description>
              </property>
      </configuration>
      
    • hdfs-site.xml
      <configuration>
              <property>
                      <name>dfs.namenode.secondary.http-address</name>
                      <value>master:50090</value>
      
              </property>
              <property>
                      <name>dfs.replication</name>
                      <value>1</value>
              </property>
              <property>
                      <name>dfs.namenode.name.dir</name>
                      <value>file:/usr/local/hadoop/tmp/dfs/name</value>
              </property>
              <property>
                      <name>dfs.datanode.data.dir</name>
                      <value>file:/usr/local/hadoop/tmp/dfs/data</value>
              </property>
      </configuration>
      
    • mapred-site.xml
      <configuration>
          <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
          </property>
          <property>
              <name>mapreduce.jobhistory.address</name>
              <value>master:10020</value>
          </property>
          <property>
              <name>mapreduce.jobhistory.webapp.address</name>
              <value>master:19888</value>
          </property>
      </configuration>
      
    • yarn-site.xml
      <configuration>
      
      <!-- Site specific YARN configuration properties -->
      <property>
              <name>yarn.resourcemanager.hostname</name>
              <value>master</value>
      </property>
      
      <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
      </property>
      </configuration>
      

    上述 5 个文件全部配置完成后,需要把 master 节点上的 /usr/local/hadoop 文件复制到各个节点上如果之前运行过伪分布模式,建议删除之前伪分布模式下生产的临时文件

    cd /usr/local
    sudo rm -r ./hadoop/tmp		# 删除 Hadoop 临时文件
    sudo rm -r ./hadoop/logs/*	# 删除日志文件
    

    在 slave1 ~ 2 节点上把旧的 hadoop 删掉(如果存在

    sudo rm -r /usr/local/hadoop/
    

    在 master 节点将配置好的 Hadoop 复制到其他节点

    sudo scp -r /usr/local/hadoop/ slave1:/usr/local/
    sudo scp -r /usr/local/hadoop/ slave2:/usr/local/
    

    (这里遇到错误请看文章末尾)

  5. 在 master 节点格式化 NameNode

    $HADOOP_HOME/bin/hdfs namenode -format
    

    在这里插入图片描述
    (注意:/usr/local/hadoop/tmp/dfs/name 目录就是前面配置的 dfs.namenode.name.dir 的值)

  6. 集群启动与关闭

    启动 Hadoop 集群

    cd $HADOOP_HOME		# 进入 Hadoop 安装目录
    sbin/start-dfs.sh	# 启动 HDFS 相关服务
    sbin/start-yarn.sh	# 启动 YARN 相关服务
    sbin/mr-jobhistory-daemon.sh start historyserver	# 启动日志相关服务
    

    关闭 Hadoop 集群

    cd $HADOOP_HOME		# 进入 Hadoop 安装目录
    sbin/stop-dfs.sh	# 关闭 HDFS 相关服务
    sbin/stop-yarn.sh	# 关闭 YARN 相关服务
    sbin/mr-jobhistory-daemon.sh stop historyserver	# 关闭日志相关服务
    

master 节点

在这里插入图片描述
slave 节点

在这里插入图片描述

错误

  • 在这里插入图片描述

解决方法:

  1. 把 PermitRootLogin no 改成 PermitRootLogin yes

    sudo vi /etc/ssh/sshd_config
    # 找到PermitRootLogin prohibit-password在后面添加一行
    # PermitRootLogin yes
    

    重启sshd服务:

    #systemctl restart ssh.service
    sudo /etc/init.d/ssh restart
    
  2. ubuntu 没法登录 root 用户
    更改 slave1 ~2 的 root 用户密码

    sudo passwd		# 重启之后会密码会失效
    

    再次执行输入刚刚改的密码就可以了

  • 在这里插入图片描述

    使 3 台虚拟机 hadoop 文件的用户组相同

    sudo chown -R hadoop /usr/local/hadoop	# 前面的 hadoop 改为你的用户
    

猜你喜欢

转载自blog.csdn.net/weixin_44018458/article/details/109260480