• 搭建集群环境(CentOS7+Hadoop2.6.1+SSH)


            本篇介绍如何使用虚拟机搭建Hadoop集群,此例搭建1个master和2个slave,如要更多的slave,方法如此类推。

            现在已经有安装了一台虚拟机,

    1、查看虚拟机的虚拟网络,设置为NAT模式:

    编辑——>虚拟网络编辑器

    进入到虚拟网络编辑器界面后,单击VMnet8,

    这里可以查看网关IP,默认是192.168.112.2,这个很重要,因为等下配置ifcfg-ens33文件时会用到。

    2、自动获取IP功能初始化

            VMWare需要用到自动获取IP的服务,所以需要对其进行初始化。而初始化是使用桥接模式:

    在VMWare右下角位置,右击图标——>设置:

    确定之后,待机器执行完成,重复同样的操作,不过要选择NAT模式,这样子,自动获取IP服务的功能已经初始化。

    3、配置ifcfg-ens33文件

            虚拟机上网的相关配置都在这个文件里面配置:

    输入指令:

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

            修改ifcfg-ens33文件需要root权限,可以在Linux输入命令su,然后输入密码,再次进入ifcfg-ens33文件,上网的IP地址随便设置,一般我们都会将网关IP的最后一位修改一下;网关IP就是第一步查看的那个网关IP;DNS1则是提供上网的服务地址,这个地址需要查看本机到底是连了那个网络服务地址,步骤:本机打开cmd窗口,输入ipconfig命令,下图框框所示就是提供网络服务的地址,

    HWADDR则是网卡地址(不一定需要填写编辑),查看网卡地址则需要退出ifcfg-ens33文件进行查看,退出操作:按esc结束编辑,按shift + :,输入命令wq(wq表示保存修改并退出,q!表示不保存修改,直接退出),按enter,在Linux终端输入命令ifconfig:

    配置好之后,可以进行网络测试

    4、网络测试

    重启网络,输入命令:

    /etc/init.d/network restart

    上图所示,表示重启网络成功,但还是要测试一下是否可以上网:

    输入命令:

    curl www.baidu.com

    可以正常上网。那么这里,就将192.168.112.10作为本次集群的master节点。

    5、创建slave节点

            创建slave节点比较简单,首先关闭master节点(这个很重要),找到该节点的镜像所在的文件夹位置,对其整个镜像进行复制,粘贴。

    复制、粘贴,修改文件夹名字:

    新建两个虚拟机,分别为slave1和slave2,首先分别输入ifconfig查看是否显示正常,

     

    有时候并没有像上图那样显示,有可能少了ens33或者某些信息,输入命令“/etc/init.d/network restart”时,出现“Failed to start LSB:Bring up/down networking”的报错,这时要确定是否关闭NetWorkManager服务,因为刚创建的slave和master容易出现NetWorkManager服务冲突,这时master和slave都要关闭NetWorkManager服务,并禁止开机启动该服务,输入命令:

    service NetworkManager stop
    chkconfig NetworkManager off

    执行命令后,重启虚拟机,之后就可以正常使用。

    6、关闭防火墙

            无论系统防火墙(指Linux),还是内核防火墙都要关闭。而且Master和slave都要操作。

    (1)关闭系统防火墙

    #查看防火墙状态,输入命令:

    firewall-cmd --state

    如果出现“not running”字样,说明防火墙已经关闭,如果不是这样的字样,则以下操作:

    #停止防火墙,临时关闭,输入命令:

    systemctl stop firewalld.service

    #禁止防火墙开机启动,永久关闭,输入命令:

    systemctl disable firewall.service

    (2)关闭内核防火墙

    #清空系统防火墙,输入命令:

    iptable -F

    如果没有iptable命令,可以执行下面命令下载,如果有,就忽略:

    yum -y install iptable -services

    #保存防火墙配置

    service iptables save

    #临时关闭内核防火墙,输入命令:

    setenforce 0

    #永久关闭内核防火墙:

    vim /etc/selinux/config

    添加语句:SELINUX=disabled

    7、配置slave1和slave2的ifcfg-ens33文件

            参考步骤3,slave1和slave2都需要配置,需要修改的地方有IPADDR,HWADDR(按实际情况修改),根据实际情况而修改,配置好,同样的重启一下网络。

    将slave1的IPADDR修改为:192.168.112.11

    将slave2的IPADDR修改为:192.168.112.12

    8、安装JDK

            默认情况下,CentOS7会自动安装了openjdk1.7和jdk1.8,但它们并不是我们想要的,所以要卸载它们。

    #查看安装的JDK版本,输入命令:

    rpm -q|grep jdk

    #卸载原装的Open JDK,输入命令:

    yum -y remove java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
    yum -y remove java-1.8.0-openjdk-headless-1.7.0.65-3.b17.el7.x86_64

    #安装JDK

    去到Oracle官网下载Linux版本的JDK,

    将压缩包导入到虚拟机里面,导入外部文件有好多种方法,这里介绍两种:(1)没有可视化界面的虚拟机,可以通过命令:rz,然后选择相应的压缩包文件,如下图:

    (2)有可视化界面的虚拟机,直接将压缩包文件复制粘贴到虚拟机的桌面:如下图

    这里使用了第二种方法。

    导入压缩文件后,进入到桌面路径下,将导入的压缩包通过命令的方式,复制到指定的路径下(目的是方便管理),

    进入虚拟机桌面路径,输入命令:

    cd ~
    cd ./Desktop

    #复制压缩包到指定路径

    复制压缩包到/usr/local/src文件夹下,在当前Desktop目录下输入命令:

    cp jdk-8u201-linux-x64.tar.gz /usr/local/src/

    #解压压缩包

    进入/usr/local/src目录下,输入命令:cd /usr/local/src,解压jdk压缩包,输入命令:

    tar -zxvf jdk-8u201-linux-x64.tar.gz

    #配置环境变量

    解压成功后,输入命令:

    vim ~/.bashrc

    新增以下参数,并用“wq”进行保存退出:

    export JAVA_HOME= /usr/local/src/jdk1.8.0_201 export JRE_HOME=$JAVA_HOME/jre

    export CALSSPATH=.$CLASSPATH:$JAVA_HOME/lib

    export PATH=$PATH:$JAVA_HOME/bin

    #生效配置文件

    配置完,使文件生效,输入命令:

    source ~/.bashrc

    #验证

    都配置好了就验证一下,看一下jdk版本,输入命令:

    java -version

    可以用同样的操作方法,将slave1和slave2的JDK也安装好。

    9、配置SSH

    #修改映射关系,输入命令:

    vim /etc/hosts/

    新增以下内容(slave1和slave2也要加):

    192.168.112.10 master

    192.168.112.11 slave1

    192.168.112.12 slave2

    #修改主机名字,输入命令:

    vim /etc/sysconfig/network

    新增以下内容:

    NETWORKING=yes

    HOSTNAME=master

    #设置临时主机名称,输入命令:

    hostname master

    输入验证命令:

    hostname

    在slave1和slave2也要设置,各自将“master”改为各自机器名

    #永久设置hostname名称为xxx(每个机器都要设置):

    在master节点

    vim /etc/hostname

    添加内容

    master

    在slave1和slave2也要设置,各自将“master”改为各自机器名

    #生成ssh密钥

    输入命令(每个节点都要生成一次):

    ssh-keygen -t rsa

    在slave1和slave2分别查看id_rsa.pub文件,并将文件内容复制到mastaer中的authorized_keys里,输入命令:

    cd ~
    cd .ssh
    vim ./authorized_keys

    复制完就是下面截图这样:

    然后通过远程的方式,将authorized_keys文件覆盖到slave1和slave2中(或者用同样的方式在slave1和slave2中操作),输入命令:

    scp authorized_keys root@slave1:~/.ssh/
    scp authorized_keys root@slave2:~/.ssh/

    #验证

    最后在每台机器上分别验证,各自输入命令:

    ssh slave1
    ssh slave2
    ssh master

    拿master做例子:

    首先,输入:ssh slave1,


    此时机器已经转到slave1节点上,使用hostname命令验证,证明master可以访问slave1,然后再输入命令:ssh master,使得机器再次回到master节点,

     

    执行成功,说明slave1节点可以访问master;用同样的方法测试master->slave2:

    退出命令:exit

    10、配置Hadoop2.6.1

    #解压

    同步骤8一样,复制hadoop压缩包到/usr/local/src/目录中,并解压。

    #配置相关文件(这里给出master节点的,slave1和slave2的通过将master的相关文件远程复制过去)

    进入hadoop路径,所有操作都在该文件夹路径下操作:

    cd /usr/local/src/hadoop-2.6.1/etc/hadoop

    (1)为hadoop配置jdk环境

    vim hadoop-env.sh

    添加内容:export JAVA_HOME=/usr/local/src/jdk1.8.0_201

    (2)为分布式资源管理系统配置jdk环境

    vim yarn-env.sh

    添加内容:export JAVA_HOME=/usr/local/src/jdk1.8.0_201

    (3)配置hadoop其他节点名称

    vim slaves

    添加内容:

    slave1

    slave2

    (4)配置Hadoop Core

     

    vim core-site.xml

    添加内容:

    <configuration>
    <!--指定namenode的地址-->
         <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9000</value>
        </property>
    <!--用来指定使用hadoop时产生文件的存放目录-->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/src/hadoop-2.6.1/tmp</value>
        </property>
    </configuration>

    (5)配置Hadoop hdfs

    vim hdfs-site.xml

    添加内容:

    <configuration>
    <!--配置namenode.secondary地址-->
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>master:9001</value>
        </property>
    <!--指定hdfs中namenode的存储位置-->
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/src/hadoop-2.6.1/dfs/name</value>
        </property>
     <!--指定hdfs中datanode的存储位置-->
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/src/hadoop-2.6.1/dfs/data</value>
        </property>
    <!--指定hdfs保存数据的副本数量-->
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
    </configuration>

    (6)配置Hadoop mapper

    注意:hadoop2.x没有mapred-site.xml,所以先拷贝并创建这个文件,输入命令:

    cp mapred-site.xml.template mapred-site.xml

    进入mapreduce配置文件:

    vim mapred-site.xml

    编辑文件:

    <configuration>
    <!--告诉hadoop以后MR(Map/Reduce)运行在YARN上-->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>

    (7)配置Hadoop yarn

    vim yarn-site.xml

    添加内容:

    <configuration>
    <!--nomenodeManager获取数据的方式是shuffle-->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    <!--配置shuffle,因为map和reduce之间有个shuffle过程,-->
            <property>
            <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
            <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
    <!--为每个rm-id设置主机:端口用来提交作业。-->
            <property>
            <name>yarn.resourcemanager.address</name>
            <value>master:8032</value>
        </property>
    <!--调度器接口的地址。-->
            <property>
            <name>yarn.resourcemanager.scheduler.address</name>
            <value>master:8030</value>
        </property>
    <!--对每个rm-id设置NodeManager连接的host-->
            <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
            <value>master:8035</value>
        </property>
    <!--对每个rm-id指定管理命令的host-->
            <property>
            <name>yarn.resourcemanager.admin.address</name>
            <value>master:8033</value>
        </property>
    <!--对每个rm-id,指定RM webapp对应的host-->
            <property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>master:8088</value>
        </property>
    <!-- 关闭虚拟内存检查-->
        <property>
            <name>yarn.nodemanager.vmem-check-enabled</name>
            <value>false</value>
        </property>
    </configuration>

    #创建临时目录和文件目录

    mkdir /usr/local/src/hadoop-2.6.1/tmp

    mkdir -p /usr/local/src/hadoop-2.6.1/dfs/name

    mkdir -p /usr/local/src/hadoop-2.6.1/dfs/data

    #配置Hadoop的环境变量(master、slave1和slave2都要配置)

    vim ~/.bashrc

    添加内容:

    HADOOP_HOME=/usr/local/src/hadoop-2.6.1
    export PATH=$PATH:$HADOOP_HOME/bin

    #重新启动资源文件

    source ~/.bashrc

    这个时候可以将上面再master节点下的hadoop文件下的配置文件copy到slave1和slave2里,输入命令:

    scp -f /usr/local/src/hadoop-2.6.1/ root@slave1:usr/local/src/
    scp -f /usr/local/src/hadoop-2.6.1/ root@slave2:usr/local/src/

    11、启动集群

    #初始化Namenode,只在master节点操作,

    hadoop namenode -format

    注意:该命令重复执行的话,有可能会出现异常。这时需要,删除相关文件(这个后面再讲),重新初始化hadoop

    #启动集群

    在master节点操作

    /usr/local/src/hadoop-2.6.1/sbin/start-all.sh

    启动后,分别在master、slave1和slave2节点上输入命令:jps,查看节点:

    (1)master节点

    (2)slave1节点

    (3)slave2节点

    上面提及到:重复初始化hadoop会带来了异常,导致某些node无法正常启动,解决方法:

    1、关闭集群,./sbin/stop-all.sh
    2、删除/usr/local/src/hadoop-2.6.1/dfs/name下面的文件[每个节点都操作]
    3、删除/usr/local/src/hadoop-2.6.1/dfs/data下面的文件[每个节点都操作]
    4、删除/usr/local/src/hadoop-2.6.1/tmp下面的文件[每个节点都操作]
    5、删除/usr/local/src/hadoop-2.6.1/logs下面的文件[每个节点都操作]
    6、重新格式化hadoop,输入命令:hadoop namenode -format [只在master节点操作]
    7、启动集群,./sbin/start-all.sh

    #监控网页

    在浏览器输入地址:192.168.112.10:8088(这个是master:8088)

    #关闭集群

    /usr/local/src/hadoop-2.6.1/sbin/stop-all.sh

     

  • 相关阅读:
    hdu4355(三分求极值)
    Codeforces Round #107 (Div. 1) (快速求质因子、vector)
    2012哈工程ACM暑期集训图论专场(练习赛第7场)题解
    2012 MultiUniversity Training Contest 6
    Codeforces Beta Round #97 (Div. 2)
    Codeforces Round #134 (Div. 2) 并查集
    C++ Boost foreach
    Design : 如何设计View
    15个最优秀的酒店网页免费模板
    在C++中使用tr1实现functor/函数指针/成员函数指针
  • 原文地址:https://www.cnblogs.com/SysoCjs/p/10835793.html
Copyright © 2020-2023  润新知