在Ubuntu上搭建Hadoop群集


前面我搭建的Hadoop都是單機偽分布式的,並不能真正感受到Hadoop的最大特點,分布式存儲和分布式計算。所以我打算在虛擬機中同時開啟3台機器,實現分布式的Hadoop群集。

1.准備3台Ubuntu Server

1.1復制出3台虛擬機

我們可以用之前編譯和安裝好Hadoop的虛擬機作為原始版本,在VirtualBox中復制三台新的虛擬機出來,也可以完全重新安裝一台全新的Ubuntu Server,然后在VirtualBox中復制出2台,就變成了3台虛擬機。

1.2修改主機名

主機名保存在/etc/hostname文件中,我們可以運行

sudo vi /etc/hostname

命令,然后為三台機器起不同的名字,這里我們就分別起名:

master

slave01

slave02

1.3修改為固定IP

Ubuntu的IP地址保存到/etc/network/interfaces文件中,我們需要為3台虛擬機分別改為固定的IP,這里我的環境是在192.168.100.*網段,所以我打算為master改為192.168.100.40,操作如下:

sudo vi /etc/network/interfaces

然后可以看到每個網卡的配置,我這里網卡名是叫enp0s3,所以我改對應的內容為:

# The primary network interface
auto enp0s3
iface enp0s3 inet static
address 192.168.100.40
gateway 192.168.100.1
netmask 255.255.255.0

對slave01改為192.168.100.41,slave02改為192.168.100.42。

1.4修改Hosts

由於三台虛擬機是使用的默認的DNS,所以我們需要增加hosts記錄,才能直接用名字相互訪問。hosts文件和Windows的Hosts文件一樣,就是一個域名和ip的對應表。

編輯hosts文件:

sudo vi /etc/hosts

增加三條記錄:

192.168.100.40  master
192.168.100.41  slave01
192.168.100.42  slave02

1.5重啟

這一切修改完畢后我們重啟一下三台機器,然后可以試着各自ping master,ping slave01 ping slave02看能不能通。按照上面的幾步操作,應該是沒有問題的。

1.6新建用戶和組

這一步不是必須的,就采用安裝系統后的默認用戶也是可以的。

sudo addgroup hadoop

sudo adduser --ingroup hadoop hduser

為了方便,我們還可以把hduser添加到sudo這個group中,那么以后我們在hduser下就可以運行sudo xxx了。

sudo adduser hduser sudo

切換到hduser:

su – hduser

1.7配置無密碼訪問SSH

在三台機器上首先安裝好SSH

sudo apt-get install ssh

然后運行

ssh-keygen

默認路徑,無密碼,會在當前用戶的文件夾中產生一個.ssh文件夾。

接下來我們先處理master這台機器的訪問。我們進入這個文件夾,

cd .ssh

然后允許無密碼訪問,執行:

cp id_rsa.pub authorized_keys

然后要把slave01和slave02的公鑰傳給master,進入slave01

scp ~/.ssh/id_rsa.pub hduser@master:/home/hduser/.ssh/id_rsa.pub.slave01

然后在slave02上也是:

scp ~/.ssh/id_rsa.pub hduser@master:/home/hduser/.ssh/id_rsa.pub.slave02

將 slave01 和 slave02的公鑰信息追加到 master 的 authorized_keys文件中,切換到master機器上,執行:

cat id_rsa.pub.slave01 >> authorized_keys
cat id_rsa.pub.slave02 >> authorized_keys

現在authorized_keys就有3台機器的公鑰,可以無密碼訪問任意機器。只需要將authorized_keys復制到slave01和slave02即可。在master上執行:

scp authorized_keys hduser@slave01:/home/hduser/.ssh/authorized_keys
scp authorized_keys hduser@slave02:/home/hduser/.ssh/authorized_keys

最后我們可以測試一下,在master上運行

ssh slave01

如果沒有提示輸入用戶名密碼,而是直接進入,就說明我們配置成功了。

同樣的方式測試其他機器的無密碼ssh訪問。

2.安裝相關軟件和環境

如果是直接基於我們上一次安裝的單機Hadoop做的虛擬機,那么這一步就可以跳過了,如果是全新的虛擬機,那么就需要做如下操作:

2.1配置apt source,安裝JDK

sudo vi /etc/apt/sources.list
打開后把里面的us改為cn,如果已經是cn的,就不用再改了。然后運行:
sudo apt-get update
sudo apt-get install default-jdk

2.2下載並解壓Hadoop

去Hadoop官網,找到最新穩定版的Hadoop下載地址,然后下載。當然如果是X64的Ubuntu,我建議還是本地編譯Hadoop,具體編譯過程參見這篇文章
wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
下載完畢后然后是解壓
tar xvzf hadoop-2.7.3.tar.gz
最后將解壓后的Hadoop轉移到正式的目錄下,這里我們打算使用/usr/local/hadoop目錄,所以運行命令:
sudo mv hadoop-2.7.3 /usr/local/hadoop

3.配置Hadoop

3.1配置環境變量

編輯.bashrc或者/etc/profile文件,增加如下內容:

# Java Env
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

# Hadoop Env
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

3.2進入Hadoop的配置文件夾:

cd /usr/local/hadoop/etc/hadoop

(1)修改hadoop-env.sh

增加如下配置:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

export HADOOP_PREFIX=/usr/local/hadoop

(2)修改core-site.xml

<configuration>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/hduser/temp</value>
  <description>A base for other temporary directories.</description>
</property>

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value>
</property>
</configuration>

這里我們指定了一個臨時文件夾的路徑,這個路徑必須存在,而且有權限訪問,所以我們在hduser下創建一個temp目錄。

(3)hdfs-site.xml

設置HDFS復制的數量

<configuration>
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>
</configuration>

(4)mapred-site.xml

這里可以設置MapReduce的框架是YARN:

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

(5)配置YARN環境變量,打開yarn-env.sh

里面有很多行,找到JAVA_HOME,設置:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

(6)配置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.hostname</name>
        <value>master</value>
    </property>
</configuration>

(7)最后打開slaves文件,設置有哪些slave節點。

由於我們設置了3份備份,把master即是Name Node又是Data Node,所以我們需要設置三行:

master
slave01
slave02

3.3配置slave01和slave02

在slave01和slave02上做前面3.1 3.2相同的設置。

一模一樣的配置,這里不再累述。

4.啟動Hadoop

回到Master節點,我們需要先運行

hdfs namenode –format

格式化NameNode。

然后執行

start-all.sh

這里Master會啟動自己的服務,同時也會啟動slave01和slave02上的對應服務。

啟動完畢后我們在master上運行jps看看有哪些進程,這是我運行的結果:

2194 SecondaryNameNode
2021 DataNode
1879 NameNode
3656 Jps
2396 ResourceManager
2541 NodeManager

切換到slave01,運行jps,可以看到如下結果:

1897 NodeManager
2444 Jps
1790 DataNode

切換到slave02也是一樣的有這些服務。

那么說明我們的服務網都已經啟動成功了。

現在我們在瀏覽器中訪問:

http://192.168.100.40:50070/

應該可以看到Hadoop服務已經啟動,切換到Datanodes可以看到我們啟動的3台數據節點:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM