分布式系统搭建(CentOS7虚拟机)

VM版本:15.0.4 build-12990004
Linux: 7.9.2009 (Core)
Hadoop: hadoop-2.8.0
JDK: jdk1.8.0_161


1、创建一台虚拟机进行基本配置

这里就不进行虚拟机的创建了。这里额外创建了一个evil用户,之后利用evil用户进行hadoop的相关操作。

  1. 网络配置
    命令: vim /etc/sysconfig/network-scripts/ifcfg-ens33
    在这里插入图片描述

  2. 赋予evil用户root权限
    修改/etc/sudoers文件,找到下面的内容,在root下面添加一行 evil ALL=(ALL) ALL。

    命令: vim /etc/sudoers

    ## Allow root to run any commands anywhere 
    root    ALL=(ALL)       ALL
    evil    ALL=(ALL)       ALL
    

    注意:
    ①可能这个文件不具备写的权限,利用 chmod 744 /etc/sudoers 命令使文件具备写的权限;
    ②如果的创建的是其他用户,请将evil换成相应的用户;
    ③这里使用root用户进行操作,接下来如果换用其他用户会进行说明;

  3. 主机映射
    vim /etc/hosts
    将之后要用到的ip和主机名加入这个文件,我这里是三台机器
    在这里插入图片描述
    注意:主机名后面不要有多余的空格


2、 安装jdk和hadoop

  1. 在/opt目录下创建两个文件 software module,分别用来放压缩包和软件,这两个的用户和组都改为evil

    jdk安装包
    链接:https://pan.baidu.com/s/1IBH4CuVH32i1aY_74I1P5w
    提取码:v7ws

    hadoop安装包
    链接:https://pan.baidu.com/s/1YI2_rYF9p1pQnSk8s0fZog
    提取码:stlz

  2. 安装和环境配置

    将两个安装包传输到software,下面进入software目录进行安装到指定的module目录下

    命令:

    	tar -zxvf hadoop-2.8.0.tar.gz -C /opt/module/
        tar -zxvf jdk-8u161-linux-x64.tar.gz -C /opt/module/
    

    编辑/etc/profile文件,添加jdk和hadoop环境变量
    命令:

    vim /etc/profile
    

    在这里插入图片描述


3、克隆两台虚拟机

  1. 将之前的虚拟机关闭,克隆出两台虚拟机

  2. 配置这两台虚拟机

    ①修改主机名
    命令:vim /etc/hostname
    这里我分别把主机名改为了hadoop103、hadoop104

    ②配置网络
    关于这一步网上有着大量说法,配mac地址、删除UUID(每台机器的唯一标识)、改ip等等。不过,这里我改了ip和删除了UUID,结果三台虚拟机能正常的网络连接。CentOS7只需配IP和删除UUID即可(亲测有用),7以下的版本就要繁琐一点,这里就不介绍了。
    命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33
    相应的我把ip改成了192.168.1.103和192.168.1.104,再强调一遍要根据自己的实际的网络配置来改。

    ③重启虚拟机,同时也把之前的hadoop102开启。

    ④配置ssh免密码登入
    设置免密登入是为了后面集群群起用的,和在使用xsync分发脚本时不再需要重复输入密码,提高效率。我们配置的这个集群,hadoop102是namenode、hadoop103是resourcemanage,所以我们需要为这两个机器配置免密登入。
    免登录原理
    在这里插入图片描述
    配置密钥前我们进入hadoop102的/home/evil/.ssh目录
    1、 生成公钥和私钥命令:ssh-keygen -t rsa。执行后连续三下回车即可
    2、将公钥拷贝到要免密登录的目标机器上:ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104 分别在hadoop102上执行这三个命令。打开每个hadoop中/home/evil/.ssh下有一个authorized_keys文件,说明拷贝成功。

    3、免密登入测试
    在hadoop102上使用命令: ssh hadoop104(102、103) 登入hadoop104,第一次登入需要密码,第二次就不需要密码就说明成功hadoop102免密登入成功。
    4、在hadoop103上进行同上的免密登录配置,因为resourcemanage在hadoop103上,到时候要进行manage的开启

    注意:我遇到过这种问题:文件配置好后,进行免密登入时,遇到了hadoop102登入到hadoop103、hadoop104免密登入成功,hadoop102登入到hadoop102失败的情况。 日志中出现了: Authentication refused: bad ownership or modes for directory 要解决,请点这里

  3. xsync分发脚本的设置
    设置这个脚本方便于后面分布式系统配置文件的统一分发,提高效率。

    现在转化为evil用户,hadoop102进入/home/evil,创建一个bin文件;在文件中创建一个文件,将shell脚本写入。
    命令:

    mkdir bin  //进入/home/evil,创建bin目录
    vim xsync  //创建bin文件并编辑
    

    将下面的脚本复制到xsync并保存

    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if((pcount==0)); then
    echo no args;
    exit;
    fi
    
    #2 获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    
    #3 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir
    
    #4 获取当前用户名称
    user=`whoami`
    
    #5 循环
    for((host=103; host<105; host++)); do
            echo ------------------- hadoop$host --------------
            rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    done
    
    

    注意:这个脚本是根据三台虚拟机编写的,且每台的主机名分别是hadoop102、hadoop103、hadoop104;如果不太一样,将循环那改一下就可以了。


4、分布式系统配置

前面的三步都可以说是为这一步做准备的,下面进行分布式系统配置。

现在我们都以evil用户登入Linux,在hadoop102上进入 /opt/module/hadoop-2.8.0/etc/hadoop hadoop的配置文件的目录下。这里有很多配置文件
在这里插入图片描述

接下来进行一些的文件的配置,这里集群部署如下:

  1. slaves
    配置这个文件是为了可以群起集群。在这个文件添加这个集群的所有主机名称。注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

    hadoop102
    hadoop103
    hadoop104
    
  2. core-site.xml
    配置NameNode的地址和Hadoop运行时产生文件的存储目录

    <!-- 指定HDFS中NameNode的地址 -->
    <property>
    		<name>fs.defaultFS</name>
          <value>hdfs://hadoop102:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录,文件系统所有目录的基础目录 -->
    <property>
    		<name>hadoop.tmp.dir</name>
    		<value>/opt/module/hadoop-2.8.0/data/tmp</value>
    </property>
    
    
  3. hdfs-site.xml

    <!-- 指定Hadoop的副本数 -->
    <property>
    		<name>dfs.replication</name>
    		<value>3</value>
    </property>
    
    <!-- 指定Hadoop辅助名称节点主机配置 -->
    <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>hadoop104:50090</value>
    </property>
    
    
  4. yarn-site.xml

    <!-- Reducer获取数据的方式 -->
    <property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
    		<name>yarn.resourcemanager.hostname</name>
    		<value>hadoop103</value>
    </property>
    
    
  5. mapred-site.xml
    这里往往只有一个mapred-site.xml的模板文件mapred-site.xml.template,将这个文件重命名即可

    <!-- 指定MR运行在Yarn-->
    <property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    </property>
    
    
  6. hadoop-env.sh、yarn-env.sh、mapred-env.sh

    这三个文件,均只要在里面配置jdk的环境变量即可。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  7. xsync分发配置文件
    xsync slaves
    xsync core-site.xml
    xsync hdfs-site.xml
    xsync yarn-site.xml
    xsync mapred-site.xml
    xsync hadoop-env.sh
    xsync yarn-env.sh
    xsync mapred-env.sh


5、启动分布式系统

  1. 格式化NameNode和群起namenode
    如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)。

    在hadoop102上,进入/opt/module/hadoop-2.8.0/目录下,
    ①执行 bin/hdfs namenode -format
    ②执行 sbin/start-dfs.sh

  2. 群起yarn
    在hadoop103上,进入/opt/module/hadoop-2.8.0/目录下,
    ①执行 sbin/start-yarn.sh

  3. 每个Linux上执行jps命令查看进程

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

  4. 查看 namenode的web 和 yarn的web

    成功
    在这里插入图片描述

    在这里插入图片描述
    注意:若看不起web端,①检查进程是否启动 ②防火墙是否关闭

防火墙关闭

systemctl stop firewalld
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值