史上最全的单机hadoop集群搭建

零零散散两周时间,终于在单机环境下搭建起来了一个4节点的hadoop集群。在这篇文章中,我将分成如下部分进行分享

  1. 使用vagrant在本地运行虚拟机
  2. 使用vagrant在本地搭建多机网络
  3. Hadoop 基础环境搭建
  4. Hadoop 集群的简单验证
  5. Hadoop HA 模式搭建及验证
  6. 搭建过程中遇到的问题,及解决方案

1. 使用vagrant在本地运行虚拟机

vagrant是一个用于创建和部署虚拟化开发环境的工具,它能很方便地在本地生成多个虚拟机器,进而帮助我们在本地实现集群搭建。

1.1 vagrant 安装

vagrant下载

1.2 vagrant box 下载安装

首先在这里找到你想要的box: https://app.vagrantup.com/boxes/search

1.2.1 vagrant 命令下载安装

使用vagrant之前,先在本地新建一个文件夹 ~/hadoop-full/vagrant。后续所有的操作都在此文件加下进行。

vagrant init centos/7 
vagrant up

vagrant init 会创建一个VagrantFile文件,vagrant up会在启动的时候下载一个centos/7的虚拟机。该方式下载的比较慢,比较推荐使用第二种方式安装box

1.2.2 手动下载安装

在搜索列表里面点击自己想要下载的box进入详情页,然后点击选择想要下载的版本,进入该版本的详情页。在详情页URL的后面加上/providers/virtualbox.box(例如:https://app.vagrantup.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box), 即可下载该版本的box。
下载完后,就可以用vagrant来添加box了。 将下载下来的box转移到~/hadoop-full/vagrant,然后使用 vagrant box add 命令 添加box

vagrant box add CentOS-7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

添加完box后,使用vagrant box list 来查看box是否添加成功。在确定box添加成功后,就可以初始化box了 vagrnat init CentOS-7 (注意这里的CentOS-7就是在添加box的时候指定的boxName)。在初始化之后,会生成一个VagrantFile文件,该文件包含了虚拟机的各种配置信息,在后面我们会用到。接下来,我们就可以使用vagrant up 启动虚拟机啦。

Note: 更多关于vagrant的使用细节,可以去访问vagrant的官网。这里我做减法,只介绍如何使用vagrant在本地搭建集群

2 使用vagrant在本地搭建多机网络

要想在本地搭建起一个4节点的hadoop集群,就需要使用vagrant创建四个虚拟机节点,并保证四节点之间可以相互通信。在上面的介绍中我们知道,vagrant在启动虚拟机时,会去读取VagrantFile文件配置,那么我们只需要在VagrantFile里面配置好四台虚拟机,并指定它们的网络模式,就能启动4台虚拟机。

2.1 VagrantFIle配置

boxes = [
    {
        :name => "hadoop1",
        :mem => "1024",
        :cpu => "1"
   },
    {
        :name => "hadoop2",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "hadoop3",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name=> "hadoop4",
        :mem => "1024",
        :cpu => "1"
    }
]

Vagrant.configure("2") do |config|
  # box名称
  config.vm.box = "CentOS-7"
  # 循环设置每台虚拟机
  boxes.each do |opts|
    config.vm.define opts[:name] do |config|
      # 配置 hostname
      config.vm.hostname = opts[:name]
      # 配置内存和CPU
      config.vm.provider "virtualbox" do |v|
        v.customize ["modifyvm", :id, "--memory", opts[:mem]]
        v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
      end
      # 配置 IP
      config.vm.network "private_network", type: "dhcp"
    end
  end
end

注意:为了简单起见,这里的网络模式选择"private_network", ip地址自动分配。如果只想快速搭建集群,可以不用花很多时间研究网络模式这块。当然vagrant官网已经给出了很详尽的介绍,感兴趣的可以去看看。
配置完VagrantFile后,可以vagrant up 启动虚拟就,此刻你就会发现,在你本地有4台虚拟机启动,每台都分配有一个ip地址。

2.2 虚拟机相互通信

首先使用vagrant ssh hadoop1 登陆到名字为hadoop1的虚拟机中(名称是在VagrantFile中指定的)。新启动的虚拟机,有很多功能未安装,可以使用yum进行安装。比如 yum -y install net-tools. 在安装完net-tools后,就可以使用ifconfig查看hadoop1虚拟机的IP了;依照此方法一次得到4台虚拟机的IP

节点名 IP地址
hadoop1 172.28.128.3
hadoop2 172.28.128.4
hadoop3 172.28.128.5
hadoop4 172.28.128.6

在确定完各台虚拟机的IP后,就可以使用ping 命令来检查各虚拟机之间的通信状况了,如:ping 172.28.128.4
为了简化后续的网路连接操作,我们可以在每台虚拟机的 /etc/hosts中添加ip映射关系,如

172.28.128.3 hadoop1
172.28.128.4 hadoop2
172.28.128.5 hadoop3
172.28.128.6 hadoop4

还有一点非常重要,就是一定要关闭每台虚拟机的防火墙设置,因为后续节点之间要相互通信,如果没能关闭防火墙,集群的之间的通信就会受阻,从而集群搭建失败。可以使用如下命令关闭防火墙

firewall-cmd --state #检查防火墙状态
sudo systemctl stop firewalld.service   #停止firewall
sudo systemctl disable firewalld.service #禁止firewall开机启动

3. Hadoop 集群环境搭建

3.1 下载Hadoop安装包

这里我选择的是hadoop 3.2.1 版本https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
将安装包放在放在~/hadoop-full/vagrant目录下,这样当启动虚拟机时,每台虚拟机的/vagrant目录下,就会有Hadoop的安装包。然后解压安装包tar -xzvf hadoop-3.2.1.tar.gz

3.2 下载java包

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
注意要选择linux版本。将下载下来的安装包放到~/hadoop-full/vagrant下,并解压。

3.3 Hadoop环境搭建

3.3.1 hadoop,java 配置

环境搭建主要是为各虚拟机配置hadoop环境和 java环境,首先在~/hadoop-full/vagrant目录下,使用vagrant up 启动虚拟机。
依次进入到hadoop1, hadoop2, hadoop3, hadoop4 在/etc/profile文件中添加hadoop 和java 配置

export JAVA_HOME=/vagrant/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/vagrant/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

并执行source etc/profile 使之生效。接下来可以使用下面的命令来验证安装配置是否成功

java -version 
hadoop version

最后进入/vagrant/hadoop-3.2.1/etc/hadoop/hadoop-env.sh, 在里面为Hadoop增加Java配置 export JAVA_HOME=/vagrant/jdk1.8.0_261

3.3.2 虚拟机之间免密登陆

首先确保各台虚拟机能免密登陆自己. 在每台虚拟机上执行下面的命令

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

然后将主机hadoop1的公钥分发到hadoop2,hadoop3, hadoop4

scp id_dsa.pub hadoop2:~/.ssh/hadoop1.pub

接着将hadoop1.pub 公钥添加到hadoop2,hadoop3,hadoop3 的 authorized_keys中

cat ~/.ssh/hadoop1.pub >> ~/.ssh/authorized_keys

3.3.3 Hadoop集群配置

进入虚拟机/vagrant/hadoop-3.2.1/etc/hadoop目录下

3.3.3.1 core-site.xml

    
        fs.defaultFS
        hdfs://hadoop1:9000
    
    
         hadoop.tmp.dir
         /data/hadoop/tmp
   

3.3.3.2 hdfs-site.xml

   
        
                dfs.namenode.name.dir
                /data/hadoop/tmp/name
                为了保证元数据的安全一般配置多个不同目录
        

        
                dfs.datanode.data.dir
                /data/hadoop/tmp/data
                datanode 的数据存储目录
        

        
                dfs.replication
                3
                HDFS 的数据块的副本存储个数, 默认是3
        

        
                dfs.secondary.http.address
                hadoop3:50090
                secondarynamenode 运行节点的信息,和 namenode 不同节点
        

在指定dataNode、nameNode文件夹的时候,一定要自己先创建 /data/hadoop/tmp/data/data/hadoop/tmp/name 文件夹,并赋予文件权限

sudo mkdir -p /data/hadoop/tmp/data 
sudo mkdir -p /data/hadoop/tmp/name
sudo chmod -R 777 /data
sudo chown -R vagrant /data

3.3.3.3 mapred-site.xml


        
                mapreduce.framework.name
                yarn
        

3.3.3.4 workers

在workers文件中,添加slaves机器

hadoop2
hadoop3
hadoop4

3.3.3.5 masters

添加masters文件, 指定集群master服务器

hadoop1

3.3.3.6初始化hdfs并启动

hdfs namenode -format
start-all.sh

然后打开网页验证:172.28.128.3:9870

4. Hadoop HA搭建

集群分配

虚拟机 NN DN JN ZKFC ZK RM NM
hadoop1 * * *
hadoop2 * * * * * *
hadoop3 * * * * *
hadoop4 * * * *

你可能感兴趣的:(史上最全的单机hadoop集群搭建)