VMware搭建hadoop分布式集群

VMware版本为15.5    系统为ubuntu18.04    hadoop版本为3.1.3   jdk版本为1.8

本次采用一个主节点  3个从节点

1.安装4台虚拟机

  1. 先安装一台虚拟机

  2. 安装jdk

  • 将下载的jdk解压到/usr/local目录下

  • 将jdk加入到环境变量中

    #将以下内容加入到  .bashrc  文件中
    #set jdk path
    export JAVA_HOME=/usr/local/jdk  #jdk存放位置
    export JRE_HOME=${JAVA_HOME}/jre  
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
    export PATH=${JAVA_HOME}/bin:$PATH

安装ssh

sudo apt-get install openssh-server  #安装ssh

克隆这台虚拟机3次  并将克隆的虚拟机MAC地址重新生成

VMware搭建hadoop分布式集群_VMware

  1. 修改每台虚拟机的hostname  分别修改为Master(主节点)、Slave1、Slave2、Slave3
sudo vim /etc/hostname

2. 固定每台虚拟机的IP地址

采用NAT模式 (主机和虚拟机、虚拟机与虚拟机之间可以互相通信)

NAT模式图解:

VMware搭建hadoop分布式集群_hadoop_02

  1. 设置网段、网关 ,关闭虚拟DHCP服务

VMware搭建hadoop分布式集群_VMware_03

VMware搭建hadoop分布式集群_hadoop_04

  1. 给每台虚拟机设置静态IP

    ubuntu从17.10开始,已放弃在/etc/network/interfaces里固定IP的配置,即使配置也不会生效,而是改成netplan方式 ,配置写在/etc/netplan/01-netcfg.yaml或者类似名称的yaml文件里,修改配置以后执行 netplan apply 命令让配置生效。

    $sudo nano /etc/netplan/50-cloud-init.yaml,配置文件可按如下内容修改。

network:

version: 2

renderer: networkd

ethernets:

ens33:  #配置的网卡名称

dhcp4: no  #dhcp4关闭

dhcp6: no   #dhcp6关闭

addresses: [192.168.1.55/24]  #设置本机IP及掩码

gateway4: 192.168.1.254  #设置网关

nameservers:

addresses: [114.114.114.114, 8.8.8.8]  #设置DNS

VMware搭建hadoop分布式集群_hadoop_05

里面的内容有严格的缩进

network:
  version: 2
  ethernets:
    ens33:   //ens33为网卡名称  可用ifconfig命令查看
      dhcp4: no  
      addresses: [192.168.2.10/24]  //ip地址
      gateway4: 192.168.2.1         //网关
      nameservers:               // dns服务器
        addresses: [114.114.114.114,8.8.8.8]

设置完成后执行命令 sudo netplan apply  通过 ifconfig 命令可以查看是否设置成功

给每台虚拟机设置的IP地址为:

Master  :  192.168.2.10

Slave1  :  192.168.2.11

Slave2  :  192.168.2.12

Slave3  :  192.168.2.13

配置完成后 各个虚拟机之间应该可以互相ping通。

3. 增加IP和主机名的映射

对每台虚拟机都进行下列操作:

修改/etc/hosts 文件

VMware搭建hadoop分布式集群_hadoop_06

一般hosts文件中只能有一个127.0.0.1,其对应主机名为localhost,如果有多余127.0.0.1映射,应删除,特别是不能存在“127.0.0.1 Master”这样的映射记录。修改后需要重启Linux系统。

4.  设置ssh免密码登录

让Master节点可以SSH无密码登录到各个Slave节点上

在Master中操作

cd ~/.ssh              # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*           # 删除之前生成的公匙(如果已经存在)
ssh-keygen -t rsa      # 执行该命令后,遇到提示信息,一直按回车就可以
cat ./id_rsa.pub >> ./authorized_keys #让Master节点能够无密码SSH登录本机
#将公钥传输到各个从节点中
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@Slave2:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@Slave3:/home/hadoop/

在每个从节点中操作

mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub    # 用完以后就可以删掉

4. 安装并配置Hadoop

  1. 解压下载的Hadoop到/usr/local目录下 (在Master中操作)

    sudo tart -zxf hadoop-3.1.3.tar.gz -C /usr/local/
  2. 修改Hadoop文件夹权限

    sudo chown -R hadoop /usr/local/hadoop
  3. 将Hadoop加入到环境变量当中

    #将以下内容加入到 .bashrc 文件中
    export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
  4. 修改 workers文件  (步骤4、5、6、7、8文件都在 /usr/local/hadoop/etc/hadoop/ 目录下)

    把所有数据节点的主机名写入该文件,每行一个,默认为 localhost(即把本机作为数据节点)在进行分布式配置时,可以保留localhost,让Master节点同时充当名称节点和数据节点,或者也可以删掉localhost这行,让Master节点仅作为名称节点使用。

    本次让Master节点仅作为名称节点使用,故将workers文件中原来的localhost删除,只添加如下三行内容:

    Slave1
    Slave2
    Slave3
  5. 修改文件core-site.xml

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://Master:9000</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>file:/usr/local/hadoop/tmp</value>
                    <description>Abase for other temporary directories.</description>
            </property>
    </configuration>
  6. 修改文件hdfs-site.xml

    <configuration>
            <property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>Master:50090</value>
            </property>
            <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>
  7. 修改文件mapred-site.xml

    <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>
            <property>
                    <name>yarn.app.mapreduce.am.env</name>
                    <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
            </property>
            <property>
                    <name>mapreduce.map.env</name>
                    <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
            </property>
            <property>
                    <name>mapreduce.reduce.env</name>
                    <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
            </property> 
    </configuration>
  8. 修改文件yarn-site.xml

    <configuration>
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>Master</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
    </configuration>
  9. 将Master节点上的“/usr/local/hadoop”文件夹复制到各个节点上

    在Master中操作:

    tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
    cd ~
    #将压缩好的hadoop文件夹复制到各个从节点中
    scp ./hadoop.master.tar.gz Slave1:/home/hadoop
    scp ./hadoop.master.tar.gz Slave2:/home/hadoop
    scp ./hadoop.master.tar.gz Slave3:/home/hadoop

    在各个从节点操作:

    sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
    sudo chown -R hadoop /usr/local/hadoop
  • 如果之前运行过伪分布式 切换到分布式集群之前先删除掉临时文件

    cd /usr/local
    sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
    sudo rm -r ./hadoop/logs/*   # 删除日志文件

首次启动Hadoop集群时,需要先在Master节点执行名称节点的格式化

hdfs namenode -format

5. 启动Hadoop

  1. 在Master中执行如下命令

    start-dfs.sh
    start-yarn.sh
    mr-jobhistory-daemon.sh start historyserver
  2. 通过jps命令查看各个节点启动的进程

    主节点:

    VMware搭建hadoop分布式集群_hadoop_07

    从节点:

    VMware搭建hadoop分布式集群_hadoop_08

  3. 可以在在Master节点上通过命令“hdfs dfsadmin -report”查看数据节点是否正常启动 ,“Live datanodes”不为 0 ,则说明集群启动成功  也可以访问http://localhost:9870  ,通过 Web 页面看到查看名称节点和数据节点的状态。

    VMware搭建hadoop分布式集群_VMware_09

6. 执行分布式实例

#创建HDFS上的用户目录
hdfs dfs -mkdir -p /user/hadoop
#在HDFS中创建一个input目录,并把“/usr/local/hadoop/etc/hadoop”目录中的配置文件作为输入文件复制到input目录中
hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
#运行实例
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'

在执行过程中,可以在Linux系统中打开浏览器,在地址栏输入“http://master:8088/cluster”,通过Web界面查看任务进度

运行结果:

VMware搭建hadoop分布式集群_hadoop_10

关闭Hadoop集群:

stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver