我爱编程

使用虚拟机搭建Hadoop分布式集群环境

2018-04-24  本文已影响114人  每天一个小目标

本文系统是最小化安装的CentOS

新建的虚拟机无法上网,需要修改虚拟机的网络配置。

为了保证集群的稳定,将网络连接改成NAT模式,此时VMnet8就相当于这台虚拟机的路由器。(实验室中的IP有时会变化,使用桥接的话IP发生变化之后就需要重新配置,比较麻烦,所以不采用)


NAT模式

打开虚拟网络编辑器

虚拟网络编辑器
打开NAT设置,可以发现虚拟机的网关是192.168.88.2,而本机VMNET 8的ip地址是192.168.88.1
确认网关
VMnet8

打开DHCP设置


IP地址变化范围

我们打算配置1个master节点 5个slave节点
其中master节点ip地址为:192.168.88.130
slave1:192.168.88.131
slave2:192.168.88.132
slave3:192.168.88.133
slave4:192.168.88.134
slave5:192.168.88.135

先配置master节点
进入系统,查看IP地址和MAC地址


IP地址和MAC地址

进入系统

  1. 配置网卡
    cd /etc/sysconfig/network-scripts
    vi ifcfg-ens33
    原始配置信息
    进行修改,配置固定ip

显示行号,vim命令模式下:set number
撤销操作:u,恢复撤销:ctrl + r

修改后的配置
  1. 重启网络服务
    service network stop
    service network start
  2. 查看网络状况
    ip addr
    IP地址修改成功

可以看到,IP地址分配成功了,192.168.88.130
有了ip地址之后,为了方便配置,使用putty进行连接,这样就无需再WMware界面进行接下来的配置了。(重点是复制内容方便)

putty连接虚拟机 putty登录系统

修改主机名
sudo vim /etc/sysconfig/network
添加一行
HOSTNAME=master
修改hosts文件
sudo vim /etc/hosts
添加六行
192.168.88.130 master
192.168.88.131 slave1
192.168.88.132 slave2
192.168.88.133 slave3
192.168.88.134 slave4
192.168.88.135 slave5

  1. 下载Java
    使用Hadoop需要Java 的支持,首先在系统中安装Java:下载地址
    下载Linux下64位Java:jdk-8u171-linux-x64.tar.gz
    将文件传到虚拟机中(可以使用WinSCP这个工具进行传输,同样输入目标主机的ip地址后,登录账户即可)

    WinSCP主界面
  2. 新建Java文件夹安装Java
    mkdir /usr/java
    将刚下载好的文件拖拽到/usr/java文件夹中

    传输文件
  3. 传输完成后,解压文件
    cd /usr/java
    tar -xzvf jdk-8u171-linux-x64.tar.gz
    (压缩包可以删除rm jdk-8u171-linux-x64.tar.gz,为了方便也可安装vimyum install vim

  4. 配置环境变量
    vi /etc/profile
    在文件末尾添加

export JAVA_HOME=/usr/java/jdk1.8.0_171
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
  1. 令更改生效
    source /etc/profile
  2. 测试一下
    javac,生成用法信息即安装成功

这里安装Hadoop 2.6.5(之前用过这个版本,各种文件都在,所以就没有安装最新版)

  1. 新建Hadoop文件夹安装Hadoop
    mkdir /usr/hadoop
  2. 下载Hadoop,使用WinSCP将文件传输到虚拟机
    下载地址
  3. 解压文件
    tar -xzvf hadoop-2.6.5.tar.gz
  4. 下面开始配置Hadoop,配置文件都存放在/usr/hadoop/hadoop-2.6.5/etc/hadoop文件夹下了
export JAVA_HOME=/usr/java/jdk1.8.0_171
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.88.130:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/hadoop/hadoop-2.6.5/tmp</value>
    </property>
</configuration>

fs.defaultFS中填写的是主节点的ip地址,也可以填主节点名称master

<configuration>
    <property>
        <name>dfs.nameservices</name>
        <value>hadoop-cluster</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/hadoop/hadoop-2.6.5/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/hadoop/hadoop-2.6.5/dfs/data</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>
<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>
<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:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
</configuration>
slave1
slave2
slave3
slave4
slave5

如果localhost不删除则主节点也参与计算,也就是六个计算节点

  1. 复制虚拟机,复制五个slave节点,这样就不需要在其他虚拟机上安装Java,重新配置Hadoop了
    右键虚拟机名字-管理-克隆(需要先将虚拟机关闭)


    虚拟机克隆
    克隆当前状态
    选择创建完成克隆

    指定克隆机名称,选择保存地址后,点击确定,稍等片刻后即可。


    完成克隆

复制过来的虚拟机与刚刚配置的机器完全一致,需要进行一些配置的修改。

  1. 修改网络配置信息


    复制虚拟机的网络信息
    修改MAC地址和IP地址
    修改后的IP信息

    可以看到IP地址已经正确了

复制的虚拟机UUID是一样的 但是MAC地址不一样,暂时不知道会有什么影响,以后再解决吧
而且目前虚拟机无法解析域名,设置DNS后依然无效,待解决
配置文件中MAC地址与UUID直接删除也不影响正常使用
突然发现虚拟机无法解析域名

  1. 修改HOSTNAME
    vim /etc/sysconfig/network
    HOSTNAME = slave1
    (此过程重复5次……直到所有虚拟机配置完毕)
    如果使用master可以ping通全部的slave节点,则配置成功

首先,格式化HDFS
为了方便起见,将Hadoop路径添加到环境变量中,这样每次就不需要到对应的文件夹输入命令了
vim /etc/profile

export HADOOP_HOME=/usr/hadoop/hadoop-2.6.5
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_LOG_DIR=/usr/hadoop/hadoop-2.6.5/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
  1. 输入hdfs namenode -format 格式化HDFS
  2. 输入start-all.sh启动集群

如果直接启动的话,需要输入每一个slave节点的密码,非常不方便,可以配置集群节点间的免密登录
CentOS直接输入ssh-keygen -t rsa -P ''即可产生公钥。
接下来将公钥分发给slave节点scp ~/.ssh/id_rsa.pub root@slave1:~
登录slave1,输入如下命令
ssh-keygen -t rsa -P ''
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
完成所有slave节点的配置后,master就可以免密登录所有的节点

  1. 输入jps查看进程运行情况
    主节点(不知道secondary namenode没有启动,手动启动一下):
[root@master ~]# hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /usr/hadoop/hadoop-2.6.5/logs/hadoop-root-secondarynamenode-master.out
[root@master ~]# jps
2901 ResourceManager
3221 Jps
2410 NameNode
3183 SecondaryNameNode

从节点:

2417 NodeManager
2363 DataNode
2559 Jps

关闭master防火墙,可以从宿主机浏览器下访问Hadoop
地址栏输入master的ip地址与端口号192.168.88.130:50070

系统总览
五个slave节点
接下来运行一个Word Count的例子测试一下系统功能
上一篇 下一篇

猜你喜欢

热点阅读