完全分布式Hadoop集群在虚拟机CentOS7上搭建——过程与注意事项


搭了几次集群后,从什么都不懂到懂了点皮毛,有了些心得体会,写在前面,不一定对但我是这么理解的:

  • master = Namenode + SecondaryNamenode
  • slave = Datanode
  • 每个slave节点都要保证能与master相互免密SSH连接,但slave节点之间无所谓
  • 其实不管是master节点还是slave节点,它们的配置都可以是一样的,只是后期确定一个master,让所有的slave都能与其互通,然后格式化namenode,这样它逻辑上就是master了。所以只需要配置一台虚拟机当master,之后需要几个slave就克隆几台就行了,只不过需要改一些配置。(不想克隆的话把配置好了的hadoop文件夹远程复制到slave上,再配一下环境变量和hosts)
  • 我有两台云服务器,原来幻想着建一个虚拟机当master,把那两台服务器当slave,后来发现太天真了,slave和master之间必须能够相互访问、传数据,而云服务器连本地主机IP都ping不通,怎么集群?所以应该是不能把云服务器和虚拟机混用的。
  • 需要配置的地方:/etc/sysconfig/network-scripts/ifcfg-ens33(配IP)、jdkhadoop/etc/hadoophadoop/tmp(自建)、/etc/profile/etc/hosts~/.ssh(免密登录)、防火墙
  • 本次集群环境:
    VMware Workstation Pro 14CentOS 7jdk1.8.0_161hadoop-2.10.0

下面记录一下配置搭建过程,首先配master,打开Vmware14,装一台全新的CentOS 7,我推荐装最简版,之后需要什么功能才下载,不然太臃肿了。安装过程省略,用root登录


配置IP

用以下命令查看和配置本机IP,保证和主机互ping通
ip addr
vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static      (这里)
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=795a782a-9240-4230-95fc-bcc33bdbbd97
DEVICE=ens33
ONBOOT=yes     (这里)
(下面按自己情况)
IPADDR=192.168.117.101
NETMASK=255.255.255.0
GATEWAY=192.168.117.2
DNS1=114.114.114.114
ZONE=public

重启服务:
systemctl restart network.service

改主机名,配置hosts文件

其实主机名改不改无所谓,hosts改了就行了,但为了便于区分,每台节点的主机名还是改一下吧。
改主机名:
hostnamectl set-hostname master
执行完之后发现并没有变,其实已经改了
在这里插入图片描述
重启一下或者重连一下SSH就会变了
在这里插入图片描述
配置hosts:
vi /etc/hosts
自己需要几个节点就配几个,之后如果还加节点的话,那master上的hosts也要更新
在这里插入图片描述

关闭防火墙

这一步很重要,不关的话会出现很多问题
systemctl stop firewalld.service
systemctl disable firewalld.service

安装JDK

把网上下载的jdk-8u161-linux-x64.tar.gz文件传到/usr/local/java目录下,这个目录随意。进到目录后,解压即可:
tar -zxvf jdk-8u161-linux-x64.tar.gz
环境变量之后和Hadoop一起配。

安装Hadoop

与JDK类似,把网上下载的hadoop-2.10.0.tar.gz文件传到/usr/local目录下,进目录之后解压:
tar -zxvf hadoop-2.10.0.tar.gz
改名:(为了方便)
mv hadoop-2.10.0 hadoop

配置环境变量

执行以下命令:
vi /etc/profile
在文件的最后加上以下配置:(根据自己路径)(这个配置可能有些不优美但绝对没错)

export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

更新环境变量:
source /etc/profile
验证:
java -version
在这里插入图片描述

配置Hadoop文件

进入Hadoop的配置目录
cd /usr/local/hadoop/etc/hadoop
可以看到有许多配置文件,一个一个配置

  1. hadoop-env.sh
    将文件靠前面的
    export JAVA_HOME=${JAVA_HOME}
    中的${JAVA_HOME}改成自己的Java路径
    在这里插入图片描述
  2. yarn-env.sh
    将文件靠前面的
    # export JAVA_HOME=/home/y/libexec/jdk1.6.0/
    前的 # 去掉,然后改成自己的Java路径
    在这里插入图片描述
  3. core-site.xml
    用下面的代码替换
    <configuration>
    <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/hadoop/tmp</value>
        </property>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9000</value>
        </property>
    </configuration>
    
  4. hdfs-site.xml
    用下面的代码替换
    <configuration>
        <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>
    
  5. yarn-site.xml
    用下面的代码替换
    	<configuration>
    	<!-- Site specific YARN configuration properties -->
            <property>
    	        <name>yarn.nodemanager.aux-services</name>
    	        <value>mapreduce_shuffle</value>
            </property>
            <property>
                <name>yarn.resourcemanager.address</name>
                <value>master:18040</value>
            </property>
            <property>       
    			<name>yarn.resourcemanager.scheduler.address</name>
                <value>master:18030</value>
            </property>
            <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>master:18025</value>
            </property>
            <property>            
                <name>yarn.resourcemanager.admin.address</name>
                <value>master:18141</value>
            </property>
            <property>             
                <name>yarn.resourcemanager.webapp.address</name>
                <value>master:18088</value>
            </property>
    	</configuration>
    
    这里端口号不是死板的。
  6. mapred-site.xml
    一开始是没有这个文件的,需要从它给的模板复制一个:
    cp mapred-site.xml.template mapred-site.xml
    用下面的代码替换
    <configuration>
       <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
  7. slaves
    打开后,有几个从节点就写几个,名字必须和hosts里的一致,我这里的是slave和slave2,slaves文件只对master节点有用,如果新增从节点的话,这个文件也要改。
    在这里插入图片描述
新建Hadoop数据目录

添加 hdfs-site.xml 文件里配置的并不存在的数据目录:
目录结构是这样的:
/usr/local/hadoop/tmp
/usr/local/hadoop/tmp/dfs
/usr/local/hadoop/tmp/dfs/data
/usr/local/hadoop/tmp/dfs/name
高亮的是新建的目录。


至此,一台master节点的全部配置就完成了,接下来slave想克隆几台就克隆几台,我这里克隆了两台,距离分布式集群完全完成还差:配克隆后IP、配免密登录


克隆虚拟机

关闭master
右键master虚拟机 --> 管理 --> 克隆
根据克隆向导一路继续,注意,一定要选 创建完整克隆!
在这里插入图片描述

配置克隆后的IP

这里跟前面配IP的方法一样,就不赘述,但是一定要保证每一台slave的主机名和IP与master节点里hosts文件里的主机名和IP 保持一致

配置SSH免密登录

这一步也很重要,不配的话每次都要输密码,过于麻烦也不现实。
配置免密登录基本原理就是,把自己的公钥(一串字符串)复制到别人的authorized_keys文件里,当一个主机要SSH连接另一个主机时,如果本机的authorized_keys文件存有那个主机的公钥,那么就不需要输密码,否则,就连主机SSH自己都要输密码。所以,我们的目的就是:

  1. 让master节点自己对自己、自己对所有slave免密
  2. 让每一台slave节点都自己对自己、自己对master免密

首先进入master,以root登录。
密钥和authorized_keys的所在目录是~/.ssh下面,但初次配置会发现没有这个目录,这时我们只需随意SSH登录一个节点,再退出来就会出现这个目录了。
进入cd ~/.ssh
执行ssh-keygen -t rsa生成密钥(连按3次回车),
对自身免密ssh-copy-id master
对所有从节点免密ssh-copy-id slave,依次执行对slave2、slave3等等,这个命令其实就是自动把公钥复制到指定主机的authorized_keys文件中去。

然后分别进入几个从节点,进行类似的操作。
这时候从节点已经有~/.ssh目录了,进入后执行ssh-keygen -t -rsa命令,
ssh-copy-id命令分别对自己、对master进行免密。

可以验证,如果免密成功,SSH另一个主机是不需要密码就能登录的。

启动Hadoop集群

至此,完全分布式集群的所有配置就大功告成了,满怀着激动的心情启动吧!
这时所有的节点必须开机!
首先要在master节点上进行格式化:
hdfs namenode -format
在这里插入图片描述
看到这句话就说明格式化成功了(当然这句话有时候并不能说明什么~_ ~)
启动Hadoop!
start-all.sh
在这里插入图片描述
启动好了之后,分别在所有节点执行jps命令以验证成功与否:
当master节点为:
在这里插入图片描述
slave节点都为:
在这里插入图片描述
就说明运行成功了。

进一步验证

在宿主机浏览器上输入:
(master的IP地址):50070
看到:
在这里插入图片描述
在这里插入图片描述
将50070改为18088:
在这里插入图片描述
就大功告成了!
关闭集群:
stop-all.sh

特别注意
  1. 如果集群启动后,jps命令给出的结果与正确的不符,比如少了一个或多了一个,那么大多就需要重新格式化,重新格式化不是再执行一遍hdfs namenode -format那么简单,需要把所有节点下的/usr/local/hadoop/tmp目录的结构按照上面说到的方式重新建立,即把之前的都删了,重新建文件夹。(重建之前记得关闭集群)
    之后再格式化、启动。
  2. 如果启动后,在宿主机上无法访问虚拟机IP及端口,可能是虚拟机防火墙没关,也可能是宿主机的防火墙规则设置问题。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值