第二課 Hadoop原理與集群搭建筆記

一、理論部分知識

1、HDFS :Hadoop DIstributed File System簡寫。

易于擴(kuò)展的分布式文件系統(tǒng)

運行在大量普通廉價機器上(成本低) ,提供容錯的機制(可靠性高)

2、HDFS優(yōu)點:

高容錯性

適合大數(shù)據(jù)批處理(移動計算不移動數(shù)據(jù)、數(shù)據(jù)位置暴露給計算框架、存儲量大、百萬規(guī)模以上的文件數(shù)量、10k節(jié)點規(guī)模)

流式文件訪問(一次寫入,多次讀取,保證數(shù)據(jù)一致性)

構(gòu)建成本低、安全可靠(構(gòu)建在廉價機器上、通過多副本提高可靠性、提供容錯和恢復(fù)機制)

3、HDFS缺點:

不適合低延遲數(shù)據(jù)訪問(毫秒級不支持)

不適合大量小文件存儲(占用NameNode大量內(nèi)存空間:會導(dǎo)致Namenode不可用、磁盤尋道時間超過讀取時間)

不適合并發(fā)寫入(一個文件只能一個寫入者:多線程同時寫一個不行,只有一個能成功,其他都會報異常)

不提供文件隨機修改(只支持追加)

4、HDFS設(shè)計需求

1)超大文件2)流式數(shù)據(jù)訪問3)低成本4)數(shù)據(jù)一致性5)高吞吐率6)易擴(kuò)展7)高容錯

5、HDFS 架構(gòu)圖

hdfs架構(gòu)圖

若想有更高的容錯,可以復(fù)制多個副本數(shù)。

6、HDFS核心概念:

Active NameNode

1)主Master(只有一個)

2)管理HDFS文件系統(tǒng)命名空間

3)管理副本策略(默認(rèn)3個副本)

4)處理客戶端讀寫請求

Standby NameNode: Active NameNode的熱備節(jié)點

1)NameNode 元數(shù)據(jù)文件

? ? edits:編輯日志

? ? fsimage: 文件系統(tǒng)元數(shù)據(jù)檢查點鏡像文件,保存文件系統(tǒng)中所有目錄和文件信息

2)NameNode 內(nèi)存中保存一份最新的鏡像信息

3)NameNode定期將edits+fsimage合并保存到磁盤

DataNode

1)slave工作節(jié)點,可以啟動多個

2)存儲數(shù)據(jù)庫和數(shù)據(jù)校驗和

3)執(zhí)行客戶端讀寫請求操作

4)通過心跳機制定期向NameNode 匯報運行狀態(tài)和塊列表信息

5)集群啟動時向NameNode 提供存儲的塊列表信息

Block數(shù)據(jù)塊

1)文件寫入到HDFS會被切分成若干個Block塊

2)數(shù)據(jù)塊大小固定,默認(rèn)大小128MB,可自定義修改

3)HDFS最小存儲單元

4)若一個塊的大小小于設(shè)置的數(shù)據(jù)塊大小,則不會占用整個塊的空間

5)默認(rèn)情況下每個Block有三個副本

Client

1)文件切分

2)與NameNode交互獲取元數(shù)據(jù)信息

3)與DataNode,讀取/寫入數(shù)據(jù)

4)管理HDFS

7、HDFS為什么不適合存儲小文件?

元數(shù)據(jù)信息存儲在NameNode內(nèi)存中,內(nèi)存大小有限

NameNode存儲BLock數(shù)據(jù)有限

一個Block元數(shù)據(jù)消耗大約150byte內(nèi)存

如果存儲一億個block,大約需要20G內(nèi)存

如果一個文件為10K,則1億個文件大小只有1TB,卻消耗了20G內(nèi)存

8、HDFS高可用原理


高可用原理

JournalNode一般部署奇數(shù)個,3臺最多允許1臺掛掉,否則集群不可用

對于ActiveNode,寫請求時阻塞,元數(shù)據(jù)同時寫入edit ,還同時寫入所有的JournalNode ,都寫入完成后,會在內(nèi)存中寫一個文件,更新內(nèi)存中的目錄數(shù)。元數(shù)據(jù)信息會定期的更新到fsimage ,fsimage相當(dāng)于一個鏡像文件

對于Standby Node,定期從JournalNode中同步元數(shù)據(jù)信息到內(nèi)存中,然后定期的更新到fsimage。

9、YARN核心組件

ResourceManage:整個集群只有一個Master

NodeManage :每個節(jié)點只有一個,集群上會有多個,一般與DataNode一一對應(yīng),在相同的集群上部署。

ApplicationManage:每個應(yīng)用程序只有一個,負(fù)責(zé)應(yīng)用程序的管理,資源申請和任務(wù)調(diào)度。

Container:任務(wù)運行環(huán)境的抽象,只有在分配任務(wù)的時候才會抽象出一個Container。

二、Hadoop分布式安裝

1、使用hadoop用戶解壓并安裝到apps路徑下

1.1使用hadoop用戶進(jìn)入到在/home/hadoop/apps目錄下

? ? ? cd /home/hadoop/apps

注意:如果沒有/home/hadoop/apps路徑,自行在/home/hadoop路徑下創(chuàng)建apps文件夾:

? ? ? mkdir /home/Hadoop/apps

1.2使用rz將本機的hadoop安裝包上傳到/home/hadoop/apps目錄下

1.3解壓安裝文件

tar -zxvf hadoop-2.7.4.tar.gz

1.4使用root用戶創(chuàng)建軟鏈接

ln -s /home/hadoop/apps/hadoop-2.7.4 /usr/local/hadoop

1.5使用root用戶修改軟鏈接屬主

chown -R hadoop:hadoop /usr/local/hadoop

1.6使用root用戶將hadoop相關(guān)內(nèi)容添加到環(huán)境變量中

注意:Hadoop配置文件路徑是/usr/local/hadoop/etc/hadoop

vim /etc/profile

添加內(nèi)容如下:

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_HOME=$HADOOP_HOME

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

1.7使用root用戶重新編譯環(huán)境變量使配置生效

source /etc/profile

2. 配置HDFS

2.1使用hadoop用戶進(jìn)入到Hadoop配置文件路徑

cd /usr/local/hadoop/etc/hadoop

2.2修改hadoo-env.sh

修改JDK路徑export JAVA_HOME=/usr/local/jdk

2.3 配置core-site.xml

2.4 配置hdfs-site.xml

3. 配置YARN

3.1 修改yarn-site.xml

3.2 修改mapred-site.xml

3.3 在/usr/local/hadoop路徑下創(chuàng)建hdpdata文件夾

cd /usr/local/hadoop

mkdir hdpdata

4. 修改slaves文件,設(shè)置datanode和nodemanager啟動節(jié)點主機名稱

在slaves文件中添加節(jié)點的主機名稱

node03

node04

node05

注意:node03,node04,node05是我的虛擬機主機名稱,在這三臺機器上啟動datanode和nodemanager,同學(xué)根據(jù)自己集群主機名稱情況自行修改。

5. 配置hadoop用戶免密碼登陸

配置node01到node01、node02、node03、node04、node05的免密碼登陸

在node01上生產(chǎn)一對鑰匙

ssh-keygen -t rsa

將公鑰拷貝到其他節(jié)點,包括自己本機

ssh-copy-id -i node01

ssh-copy-id -i node02

ssh-copy-id -i node03

ssh-copy-id -i node04

ssh-copy-id -i node05

注意:兩個namenode之間要配置ssh免密碼登陸

6. 將配置好的hadoop拷貝到其他節(jié)點

scp -r hadoop-2.7.4 hadoop@node02:/home/hadoop/apps

scp -r hadoop-2.7.4 hadoop@node03:/home/hadoop/apps

scp -r hadoop-2.7.4 hadoop@node04:/home/hadoop/apps

scp -r hadoop-2.7.4 hadoop@node05:/home/hadoop/apps

在每個節(jié)點分別執(zhí)行如下四步操作

第一步:使用root用戶創(chuàng)建軟鏈接

ln -s /home/hadoop/apps/hadoop-2.7.4 /usr/local/hadoop

第二步:使用root用戶修改軟鏈接屬主

chown -R hadoop:hadoop /usr/local/hadoop

第三步:使用root用戶添加環(huán)境變量

vim /etc/profile

添加內(nèi)容:

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_HOME=$HADOOP_HOME

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

第四步:使用root用戶重新編譯環(huán)境變量使配置生效

source /etc/profile


集群啟動步驟(注意使用hadoop用戶啟動,嚴(yán)格按照順序啟動)

su hadoop

1. 啟動journalnode(分別在node03、node04、node05上執(zhí)行啟動)

/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode

運行jps命令檢驗,node03、node04、node05上多了JournalNode進(jìn)程

2. 格式化HDFS

在node01上執(zhí)行命令:

hdfs namenode -format

格式化成功之后會在core-site.xml中的hadoop.tmp.dir指定的路徑下生成dfs文件夾,將該文件夾拷貝到node02的相同路徑下

scp -r hdpdata hadoop@node02:/usr/local/hadoop

3. 在node01上執(zhí)行格式化ZKFC操作

hdfs zkfc -formatZK

執(zhí)行成功,日志輸出如下信息

INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK

4. 在node01上啟動HDFS

sbin/start-dfs.sh

5. 在node02上啟動YARN

sbin/start-yarn.sh

在node01單獨啟動一個ResourceManger作為備份節(jié)點

sbin/yarn-daemon.sh start resourcemanager

6. 在node02上啟動JobHistoryServer

sbin/mr-jobhistory-daemon.sh start historyserver

啟動完成node02會增加一個JobHistoryServer進(jìn)程

7. hadoop安裝啟動完成

HDFS HTTP訪問地址

NameNode (active):http://192.168.183.100:50070

NameNode (standby):http://192.168.183.101:50070

ResourceManager HTTP訪問地址

ResourceManager :http://192.168.183.101:8088

歷史日志HTTP訪問地址

JobHistoryServer:http://192.168.183.101:19888

三、hadoop集群驗證

1. 驗證HDFS 是否正常工作及HA高可用

首先向hdfs上傳一個文件

hadoop fs -put /usr/local/hadoop/README.txt /

在active節(jié)點手動關(guān)閉active的namenode

sbin/hadoop-daemon.sh stop namenode

通過HTTP 50070端口查看standby namenode的狀態(tài)是否轉(zhuǎn)換為active

手動啟動上一步關(guān)閉的namenode

sbin/hadoop-daemon.sh start namenode

2.驗證YARN是否正常工作及ResourceManager HA高可用

運行測試hadoop提供的demo中的WordCount程序:

hadoop fs -mkdir /wordcount

hadoop fs -mkdir /wordcount/input

hadoop fs -mv /README.txt /wordcount/input

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /wordcount/input? /wordcount/output

驗證ResourceManager HA

手動關(guān)閉node02的ResourceManager

sbin/yarn-daemon.sh stop resourcemanager

通過HTTP 8088端口訪問node01的ResourceManager查看狀態(tài)

手動啟動node02 的ResourceManager

sbin/yarn-daemon.sh start resourcemanager

四、Hadoop集群搭建常見問題記錄

問題1 : 啟動hadoop集群后訪問node02的resouremanage 無激活的Nodes 如下圖所示?



解決方法,是虛擬機內(nèi)存不夠,需要修改yarn-site.xml配置文件

修改yarn-site.xml配置文件添加如下內(nèi)容:


把這兩項配置添加到y(tǒng)arn-site.xml里,所有機器都要改,保持配置文件一直然后關(guān)閉yarn? :sbin/stop-yarn.sh

關(guān)閉之后啟動:? sbin/start-yarn.sh

課上老師答疑記錄

問題1:假如說datanode掛了 硬件沒有問題的情況下能恢復(fù)么?

答:可以恢復(fù),DataNode掛了,會通過NameNode副本恢復(fù),然后DataNode重啟后,數(shù)據(jù)塊就刪除了。

問題2:JN里面寫的是操作日志還是數(shù)據(jù)文件?

答:JN里面寫的是操作日志

問題3:zookeeper、yarn、hdfs、hadoop 關(guān)系?

答:hadoop包括hdfs、yarn; zookeeper是充當(dāng)nadenode ,resoursemanage選主過程,老師繪制草圖如下:


當(dāng)nn1掛掉,臨時節(jié)點就會被刪除,nn2變?yōu)閍ctive、

同理rm1掛掉,臨時節(jié)點被刪除,rm2再去請求,變?yōu)閍ctive

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容