在CentOS6.4搭建hadoop集羣的實踐筆記

雖然在一般的學習當中,8必用上集羣,hadoop僞分佈式配置已經夠用,配置過程也很簡單

Ubuntu上搭建hadoop僞分佈式配置請看這裏

CentOS上搭建hadoop僞分佈式配置請看這裏

但學hadoop不搭個集羣說不過去。這裏搭個hadoop集羣,一邊搞一邊記錄

說是集羣,實際上只有一個master和一個slave,爲了憐惜自己那一點的內存,爲了不讓CPU燒熟桌子

本搭建基於Hadoop 2,可適合任何 Hadoop 2.x.y 版本

安裝CentOS6.4,兩臺

一臺做Master,一臺做Slave1,這裏不做克隆了

在Windows使用VirtualBox安裝CentOS教程

這步不必闡述,搭過虛擬機的同蟹都懂

在使用CentOS6過程中請注意,CentOS6和CentOS7的個別命令有些許不一樣,如果你的是CentOS7,那麼請注意有些命令間的差別

配置網絡

爲了虛擬機上各個節點都能互聯,我們必須得配置網絡,使它們使用同一個網段。

修改網絡配置文件

Master節點上修改網卡配置

vi /etc/network-scripts/ifcfg-eth0      
#eth0這裏是我機子上的網卡名,注意查看自己機子上的網卡名

首先是改

BOOTPROTO=static
ONBOOT=yes

再然後是增加

IPADDR=192.168.100.10	#IP地址   
NETMASK=255.255.255.0    #子網掩碼
GATEWAY=192.168.100.2	#網關地址
DNS1=8.8.8.8	#DNS服務器地址

Slave1節點上修改網卡配置,基本和Master上的配置一樣,但把IP地址改爲192.168.100.11
配置聯網方式

打開虛擬網絡編輯器:
VMnet8(NAT模式)----子網IP設置爲:192.168.100.0----NAT設置:網關改爲192.168.100.2—確定----去掉使用本地DHCP服務將IP地址分配給虛擬機選項—確定

重啓網卡

在Master節點和Slave1節點上重啓網卡

service network restart

注:CentOS7上重啓網卡的命令是

systemctl restart network

確保都重啓成功,假如有一項重啓失敗,則證明你還有bug要修

我們先永久關閉掉Master和Slave1上的防火牆

#按順序執行這兩個命令
service iptables stop
chkconfig iptables off

CentOS7上關閉防火牆的命令

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

改主機名並配置主機名到IP地址的映射

Master上改主機名

vi /etc/sysconfig/network 

修改HOSTNAME=Master

Slave1上改主機名

vi /etc/sysconfig/network 

注:CentOS7上改主機名命令

vi /etc/hostname

添加HOSTNAME=Slave1

配置主機名到IP地址的映射(兩個節點上都配一遍)

vi /etc/hosts
192.168.100.10   Master Master.cn
192.168.100.11   Slave1 Slave1.cn

注:原來的/etc/hosts裏面,只保留127.0.0.1 localhost

修改完之後我們都重啓一下

reboot

測試能不能跑通,實現節點間互聯

查看網絡配置是否成功

ifconfig	#顯示的網絡信息是否和我們配置的契合

Master上

ping baidu.com
ping 192.168.100.11
ping Slave1

Slave1上

ping baidu.com
ping 192.168.100.10
ping Master

如果ping不通則說明你還有bug要修

更換yum源

我們現在把兩臺虛擬機的默認yum源更換爲國內的阿里雲yum源,讓下載安裝及更新速度更快一些

#備份緩存
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下載新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
#添加EPEL
wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum clean all	#清楚緩存
yum makecache	#生成緩存

CentOS7上更換yum源,請參考這篇文章
CentOS 7的yum更換爲國內的阿里雲yum源

兩個節點都創建hadoop用戶

useradd -m hadoop -s /bin/bash   # 創建新用戶hadoop
passwd hadoop
visudo             #爲hadoop用戶增加管理員權限,以避免後續遇到一系列權限問題

在root ALL=(ALL) ALL 這行下面增加
hadoop ALL=(ALL) ALL,如圖所示,圖中的間隔爲tab
在這裏插入圖片描述
兩個節點都登錄hadoop用戶

su hadoop    #後續的操作在hadoop用戶下執行

配置SSH無密碼登錄

一般情況下,CentOS 默認已安裝了 SSH client、SSH server,我們在兩個節點上打開終端執行如下命令進行檢驗

rpm -qa | grep ssh

如圖,如果有顯示openssh-server和openssh-client就證明已安裝
在這裏插入圖片描述
假如沒有安裝,我們使用以下命令安裝

sudo yum install openssh-clients
sudo yum install openssh-server

在安裝 SSH client、SSH server之後,我們在Master和Slave1節點上檢驗是否能用ssh登錄到本機

ssh localhost

如圖,ssh在兩個節點上均是能正常使用的,雖然每次登錄時要輸入密碼
在這裏插入圖片描述
exit命令退出ssh連接後
我們在Master節點上設置無密碼ssh登錄本機

cd ~/.ssh    #假如沒有此目錄,那麼你需要ssh localhost後再執行這一步操作  
rm ./id_rsa*    #如果有之前瞎鼓搗生成的公鑰的話,就刪除,刪除失敗就跳過
ssh-keygen -t rsa 	#生成公鑰,一直按回車就好

在這裏插入圖片描述

cat ./id_rsa.pub >> ./authorized_keys   #讓Master節點能無密碼ssh本機
chmod 600 ./authorized_keys    #修改文件權限爲只讀

檢驗一下是否能在Master節點上無密碼ssh登錄本機

ssh localhost

這時連接本機已經不需要密碼了
在這裏插入圖片描述
成功了之後就使用exit命令退出ssh連接

我們已經能在Master節點上無密碼ssh登錄本機了

接下來蝦一步

使Master節點能無密碼ssh登錄Slave1節點

這時我們的Master節點是能ssh連接到Slave1節點了,但每一次都得輸入密碼,我們設置使Master節點能無密碼ssh登錄Slave1節點。

在Master上

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/	#在線複製公鑰給Slave1

在Slave1上

mkdir ~/.ssh       # 如果不存在該文件夾需先創建,若已存在則忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys   #將Master傳送過來的公匙加入授權
rm ~/id_rsa.pub    # 用完刪掉,過河拆橋

在Master上測試是否能無密碼ssh登錄到Slave1

ssh Slave1

這時已經不需要密碼登錄了
在這裏插入圖片描述然後exit

兩個節點上均安裝Java環境

sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel  #使用此命令安裝openjdk

查查剛纔的jdk安裝到哪裏了

rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'	

此命令返回的路徑去掉"bin/javac"就是我們jdk的安裝位置,我們拿這個路徑去配環境變量
在這裏插入圖片描述
像我這裏的是/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.251.x86_64

vi ~/.bashrc

在文件後面加一行

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.251.x86_64

讓環境變量生效

source ~/.bashrc  

檢驗變量是否設置生效

java -version

我這裏是ok了
在這裏插入圖片描述
在Master節點上安裝Hadoop2

注意:是在Master節點上完成hadoop安裝和配置。

下載Hadoop可以到這個網址https://mirrors.cnnic.cn/apache/hadoop/common/下載,選擇版本時請選擇Hadoop2.x.y版本。

下載時請下載 hadoop-2.x.y.tar.gz 這個格式的文件,這是編譯好的,另一個包含 src 的則是 Hadoop 源代碼,需要進行編譯纔可使用。

下載時也強烈建議下載(假如有) hadoop-2.x.y.tar.gz.mds 這個文件,該文件包含了檢驗值可用於檢查hadoop-2.x.y.tar.gz 的完整性,否則若文件發生了損壞或下載不完整,Hadoop 將無法正常運行。(假如想知道怎麼驗證文件完整性,請自行百度搜索,因爲我這裏下載的不是hadoop-2.x.y.tar.gz.mds就不做演示了)

插一句題外話:假如嫌瀏覽器下載太慢,那麼可以複製下載鏈接到迅雷打開下載,BT下載就是香。

下載好了之後我們執行解壓安裝

sudo tar -zxf ~/Download/hadoop-2.7.7.tar.gz -C /usr/local    #注意對應自己hadoop壓縮包所在的位置
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop            # 將文件夾名改爲hadoop
sudo chown -R hadoop:hadoop ./hadoop        # 修改文件權限

接蝦來輸入以下命令來檢查 Hadoop 是否安裝成功,成功則會顯示 Hadoop 版本信息

cd /usr/local/hadoop
./bin/hadoop version

ojbk
在這裏插入圖片描述
配置PATH變量

將 Hadoop 安裝目錄加入 PATH 變量中,這樣就可以在任意目錄中直接使用 hadoop、hdfs 等命令了。

在 Master 節點上

vi ~/.bashrc
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

如下圖所示:
配置PATH變量

source ~/.bashrc	#使配置生效

在Master節點上配置Hadoop2
在Master上安裝hadoop之後,緊接着,我們在Master節點上配置hadoop,這裏並不具體解釋每個配置文件是什麼意思,感興趣的童鞋可以自行跳轉鏈接去查。

Hadoop 默認模式爲單機模式,無需進行其他配置即可運行。

如果要做Hadoop集羣/分佈式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件:slaves、core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml

這裏的配置是進入相應的xml文件找到一對configuration空標籤,然後替換如下內容

cd /usr/local/hadoop/etc/hadoop

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

修改 hdfs-site.xml,因爲只有一個分片,所以dfs.replication爲1,dfs.datanode.data.dir也只有一個

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

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

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

修改 slaves

將作爲 DataNode 的主機名寫入該文件,每行一個。

在僞分佈式配置時,默認爲 localhost的,因爲節點即作爲 NameNode 也作爲 DataNode執行。

分佈式配置如果讓 Master 節點既作爲 NameNode,也作爲DataNode,就保留 localhost;如果讓Master節點作爲NameNode,就刪掉localhost。

我這裏選擇刪除localhost

把Master 上的 /usr/local/Hadoop 文件夾複製到Slave1節點上

假如之前有跑過僞分佈式模式,建議在切換到集羣模式前先刪除之前的臨時文件和日誌文件。在 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上

在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系統默認開啓了防火牆,在開啓 Hadoop 集羣之前,需要關閉集羣中每個節點的防火牆。有防火牆會導致 ping 得通但 telnet 端口不通,從而導致 DataNode 啓動了,但 Live datanodes 爲 0 的情況。我們前面的操作中已經關閉防火牆了,如果防火牆沒關閉的請關閉再開啓集羣。

在Master執行

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

這時可以通過jps可以查看各個節點所啓動的進程。正確的話,在 Master 節點上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程
在這裏插入圖片描述
在Slave1節點上可以看到DataNode 和 NodeManager
在這裏插入圖片描述
如圖,集羣搭建成功,高興得像只兩百斤的小胖子

關閉集羣也是在Master上關閉,按順序執行命令

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

記一個bug
有事沒事不要初始化namenode玩。初始化一遍就好,假如初始化多遍導致Slave1節點上datanode不能啓動,那麼有兩種debug方法

  1. 請看看這篇博客:[Hadoop啓動datanode失敗,clusterID有問題,簡而言之,就是把namenode上的clusterID複製到不能正常啓動的datanode節點上。
  2. 在所有datanode節點上找到{hadoop.tmp.dir}/dfs/data目錄,刪除。然後在Masterj節點上再次初始化集羣:hdfs namenode -format。{hadoop.tmp.dir}具體路徑看個人配置(在配置文件core-site.xml中)。

以上兩種方法都能解決因爲初始化集羣多次而產生的clusterID不一致導致datanode不能正常啓動的問題。
但我還是建議採取第一種方法,畢竟當hadoop集羣真正用於生產環境中,要儘量避免刪數據。

監控集羣

監控集羣建立在hadoop集羣啓動之上,當hadoop啓動之後

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

我們可以通過虛擬機CentOS裏自帶的火狐瀏覽器進入集羣監控的web界面,但這裏我選擇在宿主機查看集羣監控的web界面(虛擬機分配的內存太小,不想卡出翔)。

在宿主機添加IP到主機名的映射
在C:/Windows/Systems/drivers/etc/hosts中添加

192.168.100.10   Master Master.cn
192.168.100.11   Slave1 Slave1.cn

在這裏插入圖片描述查看集羣監控的web界面

查看HDFS集羣狀態

地址配置在:hdfs-site.xml中的dfs.namenode.http-address
默認訪問地址:http://namenode的ip:50070
我這裏的是:http://Master:50070
在這裏插入圖片描述
查看secondarynamenode的集羣狀態

地址配置在:hdfs-site.xml中的dfs.namenode.secondary.http-address
默認訪問地址:http://namenode的ip:50090
我這裏的是:http://Master:50090
在這裏插入圖片描述
查看yarn集羣的狀態
地址配置在:yarn-site.xml中的yarn.resourcemanager.webapp.address
默認訪問地址:http://namenode的ip:50090
我這裏的是:http://Master:8088
在這裏插入圖片描述至於能從這些web界面獲取到什麼信息:Hadoop大數據開發基礎 | 集羣監控

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章