史上最全的單機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 <boxName> <boxFilePath>命令 添加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

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>/data/hadoop/tmp</value>
   </property>

3.3.3.2 hdfs-site.xml

   <configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/data/hadoop/tmp/name</value>
                <description>為了保證元數據的安全一般配置多個不同目錄</description>
        </property>

        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/data/hadoop/tmp/data</value>
                <description>datanode 的數據存儲目錄</description>
        </property>

        <property>
                <name>dfs.replication</name>
                <value>3</value>
                <description>HDFS 的數據塊的副本存儲個數, 默認是3</description>
        </property>

        <property>
                <name>dfs.secondary.http.address</name>
                <value>hadoop3:50090</value>
                <description>secondarynamenode 運行節點的信息,和 namenode 不同節點</description>
        </property>
</configuration>

在指定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

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

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 * * * *
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。