一呛哟、理論部分知識
1垢袱、HDFS :Hadoop DIstributed File System簡寫幌甘。
易于擴展的分布式文件系統(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)易擴展7)高容錯
5照瘾、HDFS 架構(gòu)圖
若想有更高的容錯,可以復(fù)制多個副本數(shù)丧慈。
6网杆、HDFS核心概念:
Active NameNode
1)主Master(只有一個)
2)管理HDFS文件系統(tǒng)命名空間
3)管理副本策略(默認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ù)塊大小固定碳却,默認大小128MB,可自定義修改
3)HDFS最小存儲單元
4)若一個塊的大小小于設(shè)置的數(shù)據(jù)塊大小笑旺,則不會占用整個塊的空間
5)默認情況下每個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)用程序只有一個,負責(zé)應(yīng)用程序的管理鞋真,資源申請和任務(wù)調(diào)度崇堰。
Container:任務(wù)運行環(huán)境的抽象,只有在分配任務(wù)的時候才會抽象出一個Container涩咖。
二海诲、Hadoop分布式安裝
1、使用hadoop用戶解壓并安裝到apps路徑下
1.1使用hadoop用戶進入到在/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用戶進入到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用戶啟動茄猫,嚴格按照順序啟動)
su hadoop
1. 啟動journalnode(分別在node03狈蚤、node04、node05上執(zhí)行啟動)
/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode
運行jps命令檢驗划纽,node03脆侮、node04、node05上多了JournalNode進程
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進程
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