centos 搭建hadoop分佈式集羣

本教程講述如何配置 Hadoop 集羣.html

本教程適合於原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要參考了官方安裝教程,步驟詳細,輔以適當說明,保證按照步驟來,都能順利安裝並運行 Hadoop。另外有Hadoop安裝配置簡略版方便有基礎的讀者快速完成安裝。node

爲了方便新手入門,咱們準備了兩篇不一樣系統的 Hadoop 僞分佈式配置教程。但其餘 Hadoop 教程咱們將再也不區分,可同時適用於 Ubuntu 和 CentOS/RedHat 系統。例如本教程以 Ubuntu 系統爲主要演示環境,但對 Ubuntu/CentOS 的不一樣配置之處、CentOS 6.x 與 CentOS 7 的操做區別等都會盡可能給出註明。web

環境

本教程使用 Ubuntu 14.04 64位 做爲系統環境,基於原生 Hadoop 2,在 Hadoop 2.6.0 (stable) 版本下驗證經過,可適合任何 Hadoop 2.x.y 版本,例如 Hadoop 2.7.1,Hadoop 2.4.1 等。apache

本教程簡單的使用兩個節點做爲集羣環境: 一個做爲 Master 節點,局域網 IP 爲 192.168.1.121;另外一個做爲 Slave 節點,局域網 IP 爲 192.168.1.122。vim

準備工做

Hadoop 集羣的安裝配置大體爲以下流程:centos

  1. 選定一臺機器做爲 Master
  2. 在 Master 節點上配置 hadoop 用戶、安裝 SSH server、安裝 Java 環境
  3. 在 Master 節點上安裝 Hadoop,並完成配置
  4. 在其餘 Slave 節點上配置 hadoop 用戶、安裝 SSH server、安裝 Java 環境
  5. 將 Master 節點上的 /usr/local/hadoop 目錄複製到其餘 Slave 節點上
  6. 在 Master 節點上開啓 Hadoop

配置 hadoop 用戶、安裝 SSH server、安裝 Java 環境、安裝 Hadoop 等過程已經在Hadoop安裝教程_單機/僞分佈式配置 或 CentOS安裝Hadoop_單機/僞分佈式配置中有詳細介紹,請前往查看,再也不重複敘述。bash

繼續下一步配置前,請先完成上述流程的前 4 個步驟網絡

網絡配置

假設集羣所用的節點都位於同一個局域網。app

若是使用的是虛擬機安裝的系統,那麼須要更改網絡鏈接方式爲橋接(Bridge)模式,才能實現多個節點互連,例如在 VirturalBox 中的設置以下圖。此外,若是節點的系統是在虛擬機中直接複製的,要確保各個節點的 Mac 地址不一樣(能夠點右邊的按鈕隨機生成 MAC 地址,不然 IP 會衝突):ssh

VirturalBox中節點的網絡設置

VirturalBox中節點的網絡設置

Linux 中查看節點 IP 地址的命令爲 ifconfig,即下圖所示的 inet 地址(注意虛擬機安裝的 CentoS 不會自動聯網,須要點右上角連上網絡才能看到 IP 地址):

Linux查看IP命令

首先在 Master 節點上完成準備工做,並關閉 Hadoop (/usr/local/hadoop/sbin/stop-dfs.sh),再進行後續集羣配置。

爲了便於區分,能夠修改各個節點的主機名(在終端標題、命令行中能夠看到主機名,以便區分)。在 Ubuntu/CentOS 7 中,咱們在 Master 節點上執行以下命令修改主機名(即改成 Master,注意是區分大小寫的):

sudo vim /etc/hostname

若是是用 CentOS 6.x 系統,則是修改 /etc/sysconfig/network 文件,改成 HOSTNAME=Master,以下圖所示:

CentOS中hostname設置

而後執行以下命令修改本身所用節點的IP映射:

sudo vim /etc/hosts

例如本教程使用兩個節點的名稱與對應的 IP 關係以下:

192.168.1.121   Master
192.168.1.122   Slave1

咱們在 /etc/hosts 中將該映射關係填寫上去便可,以下圖所示(通常該文件中只有一個 127.0.0.1,其對應名爲 localhost,若是有多餘的應刪除,特別是不能有 「127.0.0.1 Master」 這樣的記錄):

Hadoop中的hosts設置

CentOS 中的 /etc/hosts 配置則以下圖所示:

CentOS中的hosts設置

修改完成後須要重啓一下,重啓後在終端中才會看到機器名的變化。接下來的教程中請注意區分 Master 節點與 Slave 節點的操做。

須要在全部節點上完成網絡配置

如上面講的是 Master 節點的配置,而在其餘的 Slave 節點上,也要對 /etc/hostname(修改成 Slave一、Slave2 等) 和 /etc/hosts(跟 Master 的配置同樣)這兩個文件進行修改!

配置好後須要在各個節點上執行以下命令,測試是否相互 ping 得通,若是 ping 不通,後面就沒法順利配置成功:

ping Master -c 3 # 只ping 3次,不然要按 Ctrl+c 中斷
ping Slave1 -c 3

例如我在 Master 節點上 ping Slave1,ping 通的話會顯示 time,顯示的結果以下圖所示:

檢查是否ping得通

繼續下一步配置前,請先完成全部節點的網絡配置,修改過主機名的話需重啓才能生效

SSH無密碼登錄節點

這個操做是要讓 Master 節點能夠無密碼 SSH 登錄到各個 Slave 節點上。

首先生成 Master 節點的公匙,在 Master 節點的終端中執行(由於改過主機名,因此還須要刪掉原有的再從新生成一次):

cd ~/.ssh # 若是沒有該目錄,先執行一次ssh localhost
rm ./id_rsa* # 刪除以前生成的公匙(若是有)
ssh-keygen -t rsa # 一直按回車就能夠

讓 Master 節點需能無密碼 SSH 本機,在 Master 節點上執行:

cat ./id_rsa.pub >> ./authorized_keys

完成後可執行 ssh Master 驗證一下(可能須要輸入 yes,成功後執行 exit 返回原來的終端)。接着在 Master 節點將上公匙傳輸到 Slave1 節點:

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

scp 是 secure copy 的簡寫,用於在 Linux 下進行遠程拷貝文件,相似於 cp 命令,不過 cp 只能在本機中拷貝。執行 scp 時會要求輸入 Slave1 上 hadoop 用戶的密碼(hadoop),輸入完成後會提示傳輸完畢,以下圖所示:

經過scp向遠程主機拷貝文件

接着在 Slave1 節點上,將 ssh 公匙加入受權:

mkdir ~/.ssh # 若是不存在該文件夾需先建立,若已存在則忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就能夠刪掉了

 

若是有其餘 Slave 節點,也要執行將 Master 公匙傳輸到 Slave 節點、在 Slave 節點上加入受權這兩步。

這樣,在 Master 節點上就能夠無密碼 SSH 到各個 Slave 節點了,可在 Master 節點上執行以下命令進行檢驗,以下圖所示:

ssh Slave1

在Master節點中ssh到Slave節點

在Master節點中ssh到Slave節點

配置PATH變量

(CentOS 單機配置 Hadoop 的教程中有配置這一項了,這一步能夠跳過)

在單機僞分佈式配置教程的最後,說到能夠將 Hadoop 安裝目錄加入 PATH 變量中,這樣就能夠在任意目錄中直接使用 hadoo、hdfs 等命令了,若是尚未配置的,須要在 Master 節點上進行配置。首先執行 vim ~/.bashrc,加入一行:

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

以下圖所示:

配置PATH變量

保存後執行 source ~/.bashrc 使配置生效。

配置集羣/分佈式環境

集羣/分佈式模式須要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啓動所必須的設置項: slaves、core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml 。

1, 文件 slaves,將做爲 DataNode 的主機名寫入該文件,每行一個,默認爲 localhost,因此在僞分佈式配置時,節點即做爲 NameNode 也做爲 DataNode。分佈式配置能夠保留 localhost,也能夠刪掉,讓 Master 節點僅做爲 NameNode 使用。

本教程讓 Master 節點僅做爲 NameNode 使用,所以將文件中原來的 localhost 刪除,只添加一行內容:Slave1。

2, 文件 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>

3, 文件 hdfs-site.xml,dfs.replication 通常設爲 3,但咱們只有一個 Slave 節點,因此 dfs.replication 的值仍是設爲 1:

<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>

4, 文件 mapred-site.xml (可能須要先重命名,默認文件名爲 mapred-site.xml.template),而後配置修改以下:

<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>

5, 文件 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>

配置好後,將 Master 上的 /usr/local/Hadoop 文件夾複製到各個節點上。由於以前有跑過僞分佈式模式,建議在切換到集羣模式前先刪除以前的臨時文件。在 Master 節點上執行:

cd /usr/local
sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時文件
sudo rm -r ./hadoop/logs/* # 刪除日誌文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再複製
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop

在 Slave1 節點上執行:

sudo rm -r /usr/local/hadoop # 刪掉舊的(若是存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

一樣,若是有其餘 Slave 節點,也要執行將 hadoop.master.tar.gz 傳輸到 Slave 節點、在 Slave 節點解壓文件的操做。

首次啓動須要先在 Master 節點執行 NameNode 的格式化:

hdfs namenode -format # 首次運行須要執行初始化,以後不須要

CentOS系統須要關閉防火牆

CentOS系統默認開啓了防火牆,在開啓 Hadoop 集羣以前,須要關閉集羣中每一個節點的防火牆。有防火牆會致使 ping 得通但 telnet 端口不通,從而致使 DataNode 啓動了,但 Live datanodes 爲 0 的狀況。

在 CentOS 6.x 中,能夠經過以下命令關閉防火牆:

sudo service iptables stop # 關閉防火牆服務
sudo chkconfig iptables off # 禁止防火牆開機自啓,就不用手動關閉了

若用是 CentOS 7,需經過以下命令關閉(防火牆服務改爲了 firewall):

systemctl stop firewalld.service # 關閉firewall
systemctl disable firewalld.service # 禁止firewall開機啓動

以下圖,是在 CentOS 6.x 中關閉防火牆:

CentOS6.x系統關閉防火牆

接着能夠啓動 hadoop 了,啓動須要在 Master 節點上進行:

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

經過命令 jps 能夠查看各個節點所啓動的進程。正確的話,在 Master 節點上能夠看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程,以下圖所示:

經過jps查看Master的Hadoop進程

在 Slave 節點能夠看到 DataNode 和 NodeManager 進程,以下圖所示:

經過jps查看Slave的Hadoop進程

缺乏任一進程都表示出錯。另外還須要在 Master 節點上經過命令 hdfs dfsadmin -report 查看 DataNode 是否正常啓動,若是 Live datanodes 不爲 0 ,則說明集羣啓動成功。例如我這邊一共有 1 個 Datanodes:

經過dfsadmin查看DataNode的狀態

也能夠經過 Web 頁面看到查看 DataNode 和 NameNode 的狀態:http://master:50070/。若是不成功,能夠經過啓動日誌排查緣由。

僞分佈式、分佈式配置切換時的注意事項

從分佈式切換到僞分佈式時,不要忘記修改 slaves 配置文件;

  1. 在二者之間切換時,若遇到沒法正常啓動的狀況,能夠刪除所涉及節點的臨時文件夾,這樣雖然以前的數據會被刪掉,但能保證集羣正確啓動。因此若是集羣之前能啓動,但後來啓動不了,特別是 DataNode 沒法啓動,不妨試着刪除全部節點(包括 Slave 節點)上的 /usr/local/hadoop/tmp 文件夾,再從新執行一次 hdfs namenode -format,再次啓動試試。

執行分佈式實例

執行分佈式實例過程與僞分佈式模式同樣,首先建立 HDFS 上的用戶目錄:

hdfs dfs -mkdir -p /user/hadoop

將 /usr/local/hadoop/etc/hadoop 中的配置文件做爲輸入文件複製到分佈式文件系統中:

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

經過查看 DataNode 的狀態(佔用大小有改變),輸入文件確實複製到了 DataNode 中,以下圖所示:

經過Web頁面查看DataNode的狀態

接着就能夠運行 MapReduce 做業了:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

運行時的輸出信息與僞分佈式相似,會顯示 Job 的進度。

可能會有點慢,但若是遲遲沒有進度,好比 5 分鐘都沒看到進度,那不妨重啓 Hadoop 再試試。若重啓還不行,則頗有多是內存不足引發,建議增大虛擬機的內存,或者經過更改 YARN 的內存配置解決。

顯示MapReduce Job的進度

一樣能夠經過 Web 界面查看任務進度 http://master:8088/cluster

在 Web 界面點擊 「Tracking UI」 這一列的 History 鏈接,能夠看到任務的運行信息,以下圖所示:

經過Web頁面查看集羣和MapReduce做業的信息

執行完畢後的輸出結果:

MapReduce做業的輸出結果

關閉 Hadoop 集羣也是在 Master 節點上執行的:

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

此外,同僞分佈式同樣,也能夠不啓動 YARN,但要記得改掉 mapred-site.xml 的文件名。

自此,你就掌握了 Hadoop 的集羣搭建與基本使用了。

相關文章
相關標籤/搜索