Hadoop完全分布式集群配置

准备三台客户机

模板虚拟机准备

安装模板虚拟机

  1. ip地址192.168.10.100
  2. 主机名称hadoop100
  3. 内存4g
  4. 硬盘50g

配置

  1. 测试网络

    ping www.baidu.com
    
  2. 安装epel-release

    yum install -y epel-release
    
  3. 安装net-tools

    yum install -y net-tools
    
  4. 安装vim

    yum install -y vim
    

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld.service

卸载虚拟机自带的JDK

 rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

克隆虚拟机

利用hadoop100,克隆出hadoop102、hadoop103、hadoop104

修改克隆机ip

  1. 修改静态ip

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    
    DEVICE=ens33
    TYPE=Ethernet
    ONBOOT=yes
    BOOTPROTO=static
    NAME="ens33"
    IPADDR=192.168.10.102
    PREFIX=24
    GATEWAY=192.168.10.2
    DNS1=192.168.10.2
    
  2. 查看 Linux 虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8image-20210501153433555image-20210501153525525

  3. 查看 Windows 系统适配器 VMware Network Adapter VMnet8 的 IP 地址image-20210501153751285

  4. 保证 Linux 系统 ifcfg-ens33 文件中 IP 地址、虚拟网络编辑器地址和 Windows 系统 VM8 网络 IP 地址相同。

修改克隆机主机名

  1. 修改主机名称

    vim /etc/hostname
    
    hadoop102
    
  2. 配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hosts

     vim /etc/hosts
    
    192.168.10.100 hadoop100
    192.168.10.101 hadoop101
    192.168.10.102 hadoop102
    192.168.10.103 hadoop103
    192.168.10.104 hadoop104
    192.168.10.105 hadoop105
    192.168.10.106 hadoop106
    192.168.10.107 hadoop107
    192.168.10.108 hadoop108
    
  3. 修改 windows 的主机映射文件(hosts 文件)

    1. 进入 C:\Windows\System32\drivers\etc 路径

    2. 打开 hosts 文件并添加如下内容,然后保存

      192.168.10.100 hadoop100
      192.168.10.101 hadoop101
      192.168.10.102 hadoop102
      192.168.10.103 hadoop103
      192.168.10.104 hadoop104
      192.168.10.105 hadoop105
      192.168.10.106 hadoop106
      192.168.10.107 hadoop107
      192.168.10.108 hadoop108
      

安装JDK和Hadoop

3.x版本的hadoop不支持jdk11,这里我们使用jdk8

  1. 用 xftp 传输工具将 JDK,hadoop导入到 opt 目录下面的 software 文件夹下面

  2. 将事先在/opt/software 下的jdk,hadoop解压到指位置

tar -zxvf jdk-8u291-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

配置环境变量

  1. 新建/etc/profile.d/my_env.sh 文件

    vim /etc/profile.d/my_env.sh
    
  2. #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk8
    export PATH=$PATH:$JAVA_HOME/bin
    
    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.1.3
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    
    #root用户使用Hadoop需要的环境变量
    export HDFS_NAMENODE_USER="root"
    export HDFS_DATANODE_USER="root"
    export HDFS_SECONDARYNAMENODE_USER="root"
    export YARN_RESOURCEMANAGER_USER="root"
    export YARN_NODEMANAGER_USER="root"
    
  3. source /etc/profile
    
  4. 检测

    java -version
    hadoop version
    

配置集群

编写集群分发脚本xsync

  1. scp(secure copy)安全拷贝

    scp -r $pdir/$fname $user@$host:$pdir/$fname
    
  2. rsync 远程同步工具

    rsync -av $pdir/$fname $user@$host:$pdir/$fname
    
  3. xsync集群分发脚本

    1. 在/root/bin/下建立脚本

      vim xsync
      
      #!/bin/bash
      #1. 判断参数个数
      
      if [ $# -lt 1 ]
      then
       	echo Not Enough Arguement!
       	exit;
      fi
      
      #2. 遍历集群所有机器
      
      for host in hadoop102 hadoop103 hadoop104
      do
       	echo ==================== $host ====================
      	#3. 遍历所有目录,挨个发送
       	for file in $@
       	do
       	#4. 判断文件是否存在
       		if [ -e $file ]
       			then
                  	#5. 获取父目录
                  	pdir=$(cd -P $(dirname $file); pwd)
                 		#6. 获取当前文件的名称
                   	fname=$(basename $file)
                      ssh $host "mkdir -p $pdir"
                      rsync -av $pdir/$fname $host:$pdir
       			else
       				echo $file does not exists!
       		fi
       	done
      done
      
    2. 修改权限

      chmod +x xsync
      

ssh无密登录

  1. 生成公钥和私钥

    pwd
    /root/.ssh/
    
    ssh-keygen -t rsa
    
  2. 将公钥拷贝到要免密登录的目标机器上

    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    ssh-copy-id hadoop104
    
  3. 其它机器同理配置一遍

配置文件

  1. 配置 core-site.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
     	<!-- 指定 NameNode 的地址 -->
        <property>
     		<name>fs.defaultFS</name>
        	<value>hdfs://hadoop102:8020</value>
        </property>
        <!-- 指定 hadoop 数据的存储目录 -->
        <property>
        	<name>hadoop.tmp.dir</name>
         	<value>/opt/module/hadoop-3.1.3/data</value>
        </property>
        <!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
        <property>
        	<name>hadoop.http.staticuser.user</name>
         	<value>atguigu</value>
        </property>
    </configuration>
    
  2. 配置 hdfs-site.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <!-- nn web 端访问地址-->
    	<property>
     		<name>dfs.namenode.http-address</name>
     		<value>hadoop102:9870</value>
    	</property>
    <!-- 2nn web 端访问地址-->
    	<property>
     		<name>dfs.namenode.secondary.http-address</name>
     		<value>hadoop104:9868</value>
    	</property>
    </configuration>
    
  3. 配置 yarn-site.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
     	<!-- 指定 MR 走 shuffle -->
     	<property>
     		<name>yarn.nodemanager.aux-services</name>
     		<value>mapreduce_shuffle</value>
     	</property>
     	<!-- 指定 ResourceManager 的地址-->
     	<property>
     		<name>yarn.resourcemanager.hostname</name>
     		<value>hadoop103</value>
     	</property>
     	<!-- 环境变量的继承 -->
     	<property>
     		<name>yarn.nodemanager.env-whitelist</name>							     			<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,
            CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
     	</property>
    </configuration>
    
  4. 配置 mapred-site.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <!-- 指定 MapReduce 程序运行在 Yarn 上 -->
     	<property>
     	<name>mapreduce.framework.name</name>
     	<value>yarn</value>
     	</property>
    </configuration>
    
  5. 分发集群配置文件

    xsync /opt/module/hadoop-3.1.3/etc/hadoop
    

群起并测试集群

配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104

同步配置文件

xsync /opt/module/hadoop-3.1.3/etc

启动集群

  1. 如果第一次启动需要在102节点格式化NameNode

    若集群崩溃应先删除每台机器的./data、./logs

    hdfs namenode -format
    
  2. 启动 HDFS

    start-dfs.sh
    
  3. 在配置了 ResourceManager的节点(hadoop103)启动 YARN

    start-yarn.sh
    
  4. Web 端查看 HDFS 的 NameNode

    1. 浏览器中输入://hadoop102:9870

    2. 查看 HDFS 上存储的数据信息

  5. Web 端查看 YARN 的 ResourceManager

    1. 浏览器中输入://hadoop103:8088
    2. 查看 YARN 上运行的 Job 信息
Tags: