Hadoop是一個大數(shù)據(jù)的框架偎蘸,當代大數(shù)據(jù)的痛點在于大量數(shù)據(jù)的采集、存儲與計算瞬内。Hadoop解決了后兩個問題迷雪,主要提供海量數(shù)據(jù)的存儲與計算功能撩满,所以備受青睞剿干。
一、大數(shù)據(jù)的特點
大數(shù)據(jù)擁有“4V”的特點弯洗,不過我最近查到的資料說是已經(jīng)有“5V”了能真。
-
大容量(Volume)
我們所說的大數(shù)據(jù)一般指數(shù)量級在PB(1024T)赁严、EB(1024PB)扰柠、ZB(1024EB)等級的數(shù)據(jù)。 -
高增長速度(Velocity)
數(shù)據(jù)增長速度快疼约,處理速度也快卤档,時效性要求高。比如搜索引擎要求幾分鐘前的新聞能夠被用戶查詢到程剥,個性化推薦算法盡可能要求實時完成推薦劝枣。這是大數(shù)據(jù)區(qū)別于傳統(tǒng)數(shù)據(jù)挖掘的顯著特征。 -
數(shù)據(jù)多樣性(Variety)
種類和來源多樣化织鲸。包括結(jié)構化舔腾、半結(jié)構化和非結(jié)構化數(shù)據(jù),具體表現(xiàn)為網(wǎng)絡日志昙沦、音頻琢唾、視頻、圖片盾饮、地理位置信息等等采桃,多類型的數(shù)據(jù)對數(shù)據(jù)的處理能力提出了更高的要求。 -
低密度價值(Value)
數(shù)據(jù)量大丘损,但有價值的數(shù)據(jù)很少普办,需要通過計算與處理來提取出有價值的部分。 -
真實性(Veracity)
數(shù)據(jù)的準確性和可信賴度徘钥,即數(shù)據(jù)的質(zhì)量衔蹲。
二、Hadoop簡介
Hadoop基礎信息
Hadoop是Apache基金會開發(fā)的分布式系統(tǒng)基礎架構呈础。
??一個視頻存儲在一臺電腦上叫單機存儲舆驶,如果將視頻分為三部分,分別存儲在三臺機器上而钞,這就叫分布式存儲沙廉。Hadoop主要解決了海量數(shù)據(jù)的存儲與分析計算的問題。
??廣義上來說臼节,Hadoop是指Hadoop生態(tài)圈撬陵,即圍繞Hadoop框架來運行的其他程序所構成的一個生態(tài)系統(tǒng)。如HDFS网缝、HBASE巨税、HIVE、ZooKeeper等粉臊。
Hadoop的三大發(fā)行版
cloudera公司的CDH草添,是最先對開源Hadoop進行封裝的發(fā)行版。
Hortonworks公司的HDP扼仲,第二個對開源Hadoop進行封裝的發(fā)行版果元。
后來cloudera與Hortonworks收購合并促王,推出最新也最貴的CDP發(fā)行版。(單節(jié)點而晒,一年一萬美金)
不過我發(fā)現(xiàn)HDP是免費的啊,包括Ambari阅畴。我下載使用的時候也沒管我要錢啊倡怎。
Hadoop的優(yōu)勢
- 高可靠性
數(shù)據(jù)在同集群的多臺機器上存在多個副本,一塊甚至多塊硬盤損壞并不影響實際數(shù)據(jù)贱枣。3.0版本的Hadoop增加了糾刪碼機制监署,以前一個數(shù)據(jù)完全拷貝3次,磁盤使用率是?纽哥,現(xiàn)在多占用原始數(shù)據(jù)的40%磁盤存儲校驗碼钠乏,原始數(shù)據(jù)在一定范圍內(nèi)的損壞都可以根據(jù)校驗碼還原,增加了磁盤使用率春塌。 - 高擴展性
可以動態(tài)添加晓避、刪除機器。 - 高效性
在MapReduce的思想下只壳,Hdaoop是并行工作的俏拱,以加快任務處理速度。 - 高容錯性
Hadoop能夠自動將失敗的任務重新分配吼句。
Hadoop的迭代與組成變化
-
Hadoop 1.x時代
MapReduce負責計算與資源調(diào)度锅必、HDFS負責數(shù)據(jù)存儲、Common是輔助工具惕艳。 -
Hadoop 2.x時代
MapReduce負責計算搞隐、Yarn負責資源調(diào)度、HDFS負責數(shù)據(jù)存儲远搪、Common是輔助工具劣纲。 -
Hadoop 3.x時代
在3.x時代,Hadoop的組成與2.x時代沒有區(qū)別终娃,但是增加了新的功能及特性味廊,如糾刪碼,能配置多個NameNode等棠耕。
HDFS架構
-
HDFS(Hadoop Distributed File System)是分布式文件系統(tǒng)余佛。
??HDFS包含NameNode和DataNode,分布式存儲時需要有一個節(jié)點負責記錄每一個文件存儲在哪個節(jié)點上窍荧,這個節(jié)點就是NameNode節(jié)點辉巡。而下面每一個存儲真實數(shù)據(jù)的節(jié)點就是DataNode。
??這種情況下如果NameNode節(jié)點死掉了蕊退,整個集群就無法對外提供服務了郊楣,因為誰也不知道數(shù)據(jù)存哪個節(jié)點上了憔恳,所以有一個2NN的節(jié)點,專門輔助NameNode净蚤。
NameNode存儲元數(shù)據(jù)钥组,如文件名、文件目錄結(jié)構今瀑、文件屬性(生成時間程梦、文件權限、副本數(shù)等)橘荠,以及每個塊列表與塊所在的DataNode屿附。
??DataNode在本地文件系統(tǒng)存儲文件塊數(shù)據(jù),以及塊數(shù)據(jù)的校驗和哥童。
??SecondaryNameNode(2NN)負責每過一段時間對NameNode元數(shù)據(jù)備份挺份。
-
YARN(Yet Another Resource Negotiator)負責資源調(diào)度
??YARN主要負責資源調(diào)度,如CPU與內(nèi)存贮懈。其中包含ResourceManager(RM)匀泊、NodeManager(NM)、ApplicationMastrt(AM)還有Container(容器)错邦。
??RM是整個集群的資源調(diào)度老大探赫,NM是各個數(shù)據(jù)節(jié)點的資源調(diào)度老大,AM是單個任務的資源調(diào)度者撬呢,當多個客戶端發(fā)起任務時RM會在數(shù)據(jù)節(jié)點上生成容器伦吠,容器中的資源由AM管理,同時AM會向RM申請資源魂拦,RM會根據(jù)NM的資源情況進行分配毛仪,如果當前節(jié)點資源不足,而AM依然申請更多資源的時候芯勘,RM會將任務分配到其他節(jié)點上運行箱靴,從而使用其他節(jié)點的空閑資源。當任務結(jié)束時荷愕,容器會被釋放衡怀,資源歸還給NM。
??需要注意的是安疗,客戶端可以是多個抛杨,訪問RM時會分配多個AM,一個數(shù)據(jù)節(jié)點上可以運行多個AM荐类,每個NM上可以有多個容器在運行怖现,容器默認的內(nèi)存范圍是1-8G,CPU默認最低1個玉罐。
-
MapReduce
MapReduce是大數(shù)據(jù)的計算部分屈嗤,他分為Map和Reduce兩個階段潘拨。
Map階段并行處理輸入數(shù)據(jù)。
Reduce階段對Map結(jié)果進行匯總饶号。
具體運行邏輯比較復雜铁追,暫時不細研究。
三茫船、Hadoop簡單部署與使用
1.環(huán)境準備
我準備的環(huán)境
??三臺虛擬機脂信,每臺虛擬機的配置為2C3G,硬盤50G透硝,操作系統(tǒng)為centos7.6,無UI界面的最小安裝疯搅。
需要jdk和hadoop環(huán)境濒生,配置好hostname,以及hosts文件幔欧。
- 修改主機名
推薦使用hostnamectl去修改罪治,他會一并修改配置文件與靜態(tài)主機名。
[root@localhost /]# hostnamectl set-hostname hadoop101
- 修改hosts文件
hadoop集群中使用主機域名來通信礁蔗,所以需要配置hosts觉义,并指定全限定主機名
[root@hadoop101 /]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.163.101 hadoop101 hadoop101.nb
192.168.163.102 hadoop102 hadoop102.nb
192.168.163.103 hadoop103 hadoop103.nb
- 安裝jdk
上傳jdk的tar包到虛擬機/opt/package
目錄下(其實路徑隨意),此步驟不予展示浴井。
然后解壓jdk包到/opt
下
[root@hadoop101 package]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt/
- 安裝hadoop
上傳hadoop的tar包到虛擬機/opt/package
目錄下(其實路徑隨意)晒骇,此步驟不予展示。
然后解壓hadoop包到/opt
下
[root@hadoop101 package]# tar -zxvf hadoop-3.1.3.tar.gz -C /opt/
其中hadoop的bin目錄中有一些后面重點學習會經(jīng)常使用的命令磺浙,分別是hdfs洪囤,yarn和mapred。
還有常用的配置文件撕氧,在hadoop安裝路徑/etc/hadoop
文件夾中瘤缩,重要配置有core-site.xml,hdfs-site.xml伦泥,mapred-site.xml和yarn-site.xml剥啤。
- 配置環(huán)境變量
將hadoop和jdk的環(huán)境變量配置到/etc/profile
中,并執(zhí)行source /etc/profile
使其生效不脯。
[root@hadoop103 opt]# tail -9 /etc/profile
#jdk環(huán)境變量
export JAVA_HOME=/opt/jdk1.8.0_221
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#hadoop環(huán)境變量
export HADOOP_HOME=/opt/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
- 免密互信
hadoop環(huán)境內(nèi)的三臺機器最好都配置免密互信府怯,可以是root用戶,也可以是普通用戶跨新。教學視頻上沒說為什么一定要這樣做富腊,但是……做了吧。
這里我用一臺機器舉例子域帐,首先需要創(chuàng)建這臺機器自己的ssh密鑰對赘被,分公鑰與私鑰是整,然后將自己的公鑰復制給其他機器。
先創(chuàng)建密鑰對民假,執(zhí)行命令后一路回車即可浮入。
[eops@hadoop102 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:k3+EzQArxSszuVms1DnDt1AUCGRdVbQvj5m6car4NTQ root@hadoop102
The key's randomart image is:
+---[RSA 2048]----+
| .++o++o.oo |
| . .+o. . |
| .=.+. . |
| *.@..= . |
| . OS=..E . .|
| + o.o . * |
| . = = .|
| . o * |
| ..o.+. |
+----[SHA256]-----+
然后復制自己的公鑰到其他機器上,三臺機器互相都要做羊异。
[eops@hadoop102 ~]$ ssh-copy-id 192.168.163.102
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.163.102 (192.168.163.102)' can't be established.
ECDSA key fingerprint is SHA256:YmdUMxmmKBnAqQEquZdNvfO5PKABYpzBIrSHiLHPBA8.
ECDSA key fingerprint is MD5:dd:99:1c:4e:89:84:14:fe:b0:a5:9d:69:2a:ad:ea:d9.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
eops@192.168.163.102's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.163.102'"
and check to make sure that only the key(s) you wanted were added.
最后可以登錄驗證一下事秀,應該只需要輸入一次yes
,我下面這次連yes都沒讓我輸入野舶,因為之前已經(jīng)保存過主機信息了易迹,以后連接時連yes也不用輸入了。
[eops@hadoop102 ~]# ssh 192.168.163.102
Last failed login: Wed Nov 10 17:20:09 CST 2021 from hadoop102 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Wed Nov 10 17:18:05 2021
[eops@hadoop102 ~]#
- 防火墻配置
一般安裝時都要求關閉防火墻平道,但是我偏不睹欲,因為在真實的生產(chǎn)環(huán)境中,一般都禁止關閉防火墻一屋,防火墻是服務器防護的一道重要關卡窘疮,沒了他服務器就是在裸奔,如果服務器是公網(wǎng)服務器冀墨,那你就完蛋了闸衫!
不過也可以關閉防火墻,畢竟練習嘛诽嘉,無所謂蔚出,還能省去不少麻煩。
給三臺機器都配置防火墻規(guī)則含懊。
[root@hadoop101 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.163.101" accept'
success
[root@hadoop101 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.163.102" accept'
success
[root@hadoop101 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.163.103" accept'
success
[root@hadoop101 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.163.1" accept'
success
[root@hadoop101 ~]# firewall-cmd --reload
success
我是在虛擬機里配置的身冬,所以除了集群內(nèi)的三臺,還要給宿主機開放訪問權限岔乔,同時為了能用主機名訪問url酥筝,我還更改了宿主機的hosts文件,就不展示了雏门。
最后一定記得重新加載防火墻配置嘿歌,否則不生效。
- 時間同步
時間同步這里先不說了茁影,主要就是集群中挑選一臺機器安裝ntp宙帝,然后其他機器使用netdate定時向ntp服務同步時間。如果只是練習hadoop的話募闲,這里暫時不配置也行步脓。
2.hadoop運行方式
- 本地模式
也就是單機模式,數(shù)據(jù)存儲在linux服務器本地,用來演示及測試官方案例靴患。 - 偽分布式
本質(zhì)也是單機運行仍侥,不過數(shù)據(jù)存儲在HDFS上,同時具備集群的所有功能鸳君,用一臺機器模擬一個分布式環(huán)境农渊。 - 完全分布式
多臺服務器組成的集群環(huán)境。
3.簡單執(zhí)行hadoop程序
hadoop的程序可以調(diào)用命令行簡單執(zhí)行并獲取結(jié)果或颊,比如對一個文本中的單詞進行詞頻統(tǒng)計砸紊。
首先需要一個文檔用來存儲單詞
[root@hadoop101 input]# pwd
/tmp/input
[root@hadoop101 input]# ls
test.txt
[root@hadoop101 input]# cat test.txt
aa hh
bb dd
cc ss
aa ff
ee
ff
ee
我創(chuàng)建了一個/tmp/input
文件夾,作為輸入目錄囱挑,其中存儲數(shù)據(jù)本身醉顽,然后執(zhí)行hadoop命令
[root@hadoop101 input]# hadoop jar /opt/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /tmp/input/test.txt /tmp/output/test1
命令中使用hadoop執(zhí)行jar包,后面是jar包的全路徑(相對路徑也可以)平挑,然后執(zhí)行此jar包中的wordcount程序徽鼎,這個程序需要兩個參數(shù),輸入路徑與輸出路徑弹惦,其中輸出路徑必須不存在,否則會報錯悄但。
執(zhí)行過程略棠隐,結(jié)果就是會在輸出路徑中生成兩個文件。
[root@hadoop101 test1]# pwd
/tmp/output/test1
[root@hadoop101 test1]# ls
part-r-00000 _SUCCESS
[root@hadoop101 test1]# cat part-r-00000
aa 2
bb 1
cc 1
dd 1
ee 2
ff 2
hh 1
ss 1
文件夾中的_SUCCESS
為標志文件檐嚣,只表示執(zhí)行結(jié)果的成功與否助泽,前面的part-r-00000
才是執(zhí)行后的輸出內(nèi)容。
4.hadoop集群的搭建
現(xiàn)在三臺機器上的環(huán)境都搭建好了嚎京,接下來說一下各個機器的組件分配情況嗡贺。
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode(2NN)鞍帝、DataNode |
YARN | NodeManager | ResourceManager诫睬、NodeManager | NodeManager |
這里需要注意,NameNode與2NN不能安裝在一臺機器上帕涌,因為他們都很耗內(nèi)存摄凡,放在一起會有資源搶奪的情況出現(xiàn)。
ResourceManager也比較耗內(nèi)存蚓曼,不要與NameDode和2NN裝在一臺機器上亲澡。
YARN的NodeManager是每臺機器都要裝的,而DateNode盡量每臺都裝纫版,可以最大化機器資源的利用床绪。
不過以上只是建議,執(zhí)意全裝一臺機器上也沒問題。
另外癞己,我看的視頻中提到過膀斋,2NN在NN失效時會自動切換,這是不對的末秃,2NN不具備自動切換功能概页,他只是用于修復NN的工具硕勿,并不能在NN失效時代替NN維持集群運行倍试。
4.1 修改配置文件
接下來需要按照上面的主機規(guī)劃修改配置文件判呕,修改集群內(nèi)一臺掉丽,然后將配置文件拷貝到其余主機上澄暮。讓整個集群內(nèi)的配置文件相同择懂。
hadoop的所有配置文件均在安裝目錄下的etc/hadoop中
先修改核心配置文件core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!-- hdfs的數(shù)據(jù)存放路徑 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hdfs/</value>
</property>
<!-- 配置hdfs網(wǎng)頁登錄時的靜態(tài)用戶為ovo -->
<!-- <property>
<name>hadoop.http.staticuser.user</name>
<value>ovo</value>
</property> -->
</configuration>
上面core-site.xml的配置中需要注意一點蜻直,被注釋的部分為“配置hdfs網(wǎng)頁登錄時的靜態(tài)用戶”耻陕,我注釋掉是因為這個要看你的實際需求劲阎。
正常使用任意用戶向hdfs上傳文件時绘盟,hdfs里的文件就所屬于上傳這個文件的用戶,其他用戶不能刪除這個用戶上傳的文件悯仙。正常不配置這里的話龄毡,使用ovo用戶啟動hadoop集群之后,網(wǎng)頁上是不可以刪除文件的锡垄,會報權限不足的錯誤沦零,如果不希望別人在網(wǎng)頁端刪除文件則不做配置即可。
如果配置了ovo用戶货岭,則ovo用戶上傳的文件可以在網(wǎng)頁端刪除路操。
然后是hdfs-site.xml,這里要注意下千贯,2NN的地址配置的是dfs.namenode.secondary.http-address
屯仗,是http,不是https搔谴,如果寫錯了魁袜,2NN將在啟動集群的那個節(jié)點上運行,配置就無效了敦第。
<configuration>
<!-- NameNode的web訪問地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:9870</value>
</property>
<!-- 2NN的地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
</configuration>
接下來是yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定mr走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 配置ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<!-- 環(huán)境變量的繼承慌核,據(jù)說是個bug,升級版的hadoop中不需要配置這個 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
還有mapred-site.xml
<configuration>
<!-- 讓mapreduce程序運行在yarn上申尼,讓其受yarn調(diào)度 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
最后是workers垮卓,這個文件要注意,它配置的是集群內(nèi)的主機域名师幕,每一行結(jié)尾都不能有空格粟按,也不允許有空行诬滩。
hadoop101
hadoop102
hadoop103
別忘了分發(fā)配置文件到集群內(nèi)所有主機上。
4.2 初始化NameNode
第一次啟動集群時灭将,需要在NameNode所在機器上執(zhí)行初始化命令疼鸟,該命令會生成新的集群ID,如果在集群運行中執(zhí)行初始化命令庙曙,會導致NameNode與DataNode的集群ID不一致空镜,從而造成集群找不到以往數(shù)據(jù)的嚴重問題。如果集群運行中出現(xiàn)故障捌朴,需要重新初始化吴攒,則必須先停止NameNode與DataNode進程,并且刪除所有機器的data與logs目錄砂蔽,然后再進行初始化洼怔。
初始化NameNode,注意左驾,要在規(guī)劃中namenode所在機器上執(zhí)行镣隶,不可以在其他機器上執(zhí)行。
[ovo@hadoop101 ~]$ hdfs namenode -format
4.3 啟動集群
這里我將hadoop的啟動用戶修改為了ovo诡右,我將hadoop的文件夾與data文件夾的權限都修改了安岂,整個初始化過程較長,不截圖和復制了帆吻,如果報錯會直接輸出在終端嗜闻。
然后啟動集群。注意桅锄,要用hadoop文件的所屬用戶去啟動集群。同時样眠,在任意一臺機器上執(zhí)行啟動命令都可以友瘤,與NameNode的初始化過程不同。
[ovo@hadoop101 sbin]$ pwd
/opt/hadoop-3.1.3/sbin
[ovo@hadoop101 sbin]$ ./start-dfs.sh
Starting namenodes on [hadoop101]
Starting datanodes
Starting secondary namenodes [hadoop103]
啟動集群過程中可能會報錯檐束,我在啟動時就報了一個找不到JAVA_HOME環(huán)境變量的錯誤辫秧,但實際上我的主機都配置好了jdk環(huán)境變量,只是hadoop無法獲取到被丧,經(jīng)過簡單的搜索之后發(fā)現(xiàn)缺少了一個配置盟戏。
需要修改/opt/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
文件中大約第54行,export JAVA_HOME=
后面的值甥桂,該行默認是注釋掉的柿究,而且等號后是空。將其取消注釋黄选,并改成你的JAVA_HOME的值蝇摸。
啟動hadoop集群后可以通過jps
命令查看到正在運行的hadoop進程婶肩。該命令使用-v
的參數(shù)可以查看java進程的全路徑。
hadoop101
[ovo@hadoop101 sbin]$ jps
7479 NameNode
7630 DataNode
7854 Jps
hadoop102
[ovo@hadoop102 hdfs]$ jps
5349 DataNode
5400 Jps
hadoop103
[ovo@hadoop103 hdfs]$ jps
4486 DataNode
4583 SecondaryNameNode
4617 Jps
4.4 啟動Yarn
接著需要啟動yarn貌夕,注意律歼,ResourceManager規(guī)劃在哪臺機器上,就要在哪臺機器上執(zhí)行啟動yarn的命令啡专,這與NameNode的初始化方式相同险毁,都必須在特定的機器上執(zhí)行。
[ovo@hadoop102 sbin]$ ./start-yarn.sh
Starting resourcemanager
Starting nodemanagers
[ovo@hadoop102 sbin]$ jps
6626 Jps
5349 DataNode
6185 ResourceManager
6314 NodeManager
使用jps命令查看其他節(jié)點的NodeManager是否啟動们童。
4.5 可視化網(wǎng)頁
啟動后的NameNode和Yarn都是可以在web頁面訪問的畔况,路徑就是配置文件中配置的。
NameNode訪問url:http://hadoop101:9870
Yarn的ResourceManager:http://hadoop102:8088
如下圖:
4.6 hdfs的web頁面
hdfs就是一個文件系統(tǒng)病附,你可以把他當做linux的文件系統(tǒng)那樣去理解问窃,他也包含文件和文件夾,也有對應的權限認證完沪。
注意域庇,之后的所有命令都要使用hadoop的安裝用戶去操作,hdfs的權限認證與linux的權限認證是有相關性的覆积。
下面就是創(chuàng)建文件夾听皿,并且上傳小文件與大文件的示例。
#創(chuàng)建文件夾
[ovo@hadoop101 hadoop]$ hadoop fs -mkdir /temp_input
[ovo@hadoop101 hadoop]$
#查看文件夾內(nèi)容
[ovo@hadoop101 hadoop]$ hadoop fs -ls /
Found 1 items
drwxr-xr-x - ovo supergroup 0 2021-11-22 14:55 /temp_input
[ovo@hadoop101 hadoop]$
#上傳小文件
[ovo@hadoop101 hadoop]$ hadoop fs -put /tmp/Heaven.txt /temp_input
2021-11-22 15:07:36,918 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
[ovo@hadoop101 hadoop]$
[ovo@hadoop101 hadoop]$ hadoop fs -ls /temp_input
Found 1 items
-rw-r--r-- 3 ovo supergroup 80 2021-11-22 15:07 /temp_input/Heaven.txt
[ovo@hadoop101 hadoop]$
#上傳大文件
[ovo@hadoop101 package]$ hadoop fs -put /opt/package/jdk-8u221-linux-x64.tar.gz /
2021-11-22 15:24:25,088 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2021-11-22 15:24:27,704 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
[ovo@hadoop101 package]$
上傳后可以在web頁面上查看到路徑下都有什么文件宽档。
4.7 hdfs的文件位置及yarn查看任務調(diào)度
現(xiàn)在我們知道了如何在web頁面查看文件尉姨,但文件本身還是存儲在服務器上的,如果想要查看文件的具體位置吗冤,則需要進到一下目錄查看又厉。
存儲文件的具體位置就在core-site.xml中配置的數(shù)據(jù)存放路徑下,但是真實文件存放的位置要更深一些椎瘟。
[root@hadoop101 subdir0]# pwd
/data/hdfs/dfs/data/current/BP-428193404-192.168.163.101-1637543150736/current/finalized/subdir0/subdir0
[root@hadoop101 subdir0]#
[root@hadoop101 subdir0]# ls
blk_1073741825 blk_1073741825_1001.meta blk_1073741826 blk_1073741826_1002.meta blk_1073741827 blk_1073741827_1003.meta
可以查看一下blk_1073741825這個文件覆致,會發(fā)現(xiàn)他就是我上傳到集群中的文本。
[root@hadoop101 subdir0]# cat blk_1073741825
Heaven
Heaven does not exist.
Over.
ps.Elohim, the scientist from the planet?
而另外兩個blk_1073741826和blk_1073741827其實就是上傳jdk壓縮包肺蔚,甚至可以拼成一個tar.gz的壓縮文件(拼湊的文件后綴必須和上傳時相同)煌妈,然后再解壓都行。
[root@hadoop101 subdir0]# ls
blk_1073741825 blk_1073741825_1001.meta blk_1073741826 blk_1073741826_1002.meta blk_1073741827 blk_1073741827_1003.meta
[root@hadoop101 subdir0]#
[root@hadoop101 subdir0]# cat blk_1073741826 >> jdk.tar.gz
[root@hadoop101 subdir0]# cat blk_1073741827 >> jdk.tar.gz
[root@hadoop101 subdir0]# tar -zxf jdk.tar.gz
[root@hadoop101 subdir0]# ls
blk_1073741825 blk_1073741825_1001.meta blk_1073741826 blk_1073741826_1002.meta blk_1073741827 blk_1073741827_1003.meta jdk1.8.0_221 jdk.tar.gz
還記得之前yarn的web頁面嗎宣羊,目前只是上傳和下載了文件璧诵,沒有對文件進行操作,所以不會有任務仇冯,web頁面上也不會有記錄之宿,此時再次執(zhí)行一下wordcount的命令,統(tǒng)計一下詞頻苛坚。
這次執(zhí)行命令時使用的是hdfs集群的方式澈缺,所以輸入路徑與輸出路徑都要寫hdfs的路徑坪创。
[ovo@hadoop101 ~]$ hadoop jar /opt/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /temp_input /temp_output
執(zhí)行成功后能看到輸出路徑下多了相應的文件與內(nèi)容。
同時還可以在yarn的任務調(diào)度頁面查看到這個任務姐赡。
這次頁面上就有任務了莱预,橫向拉倒最后有個需要注意的地方。
上圖的History是任務歷史项滑,這里暫時點不開依沮,因為沒有配置歷史服務器。
4.8 集群崩潰處理辦法
hadoop集群不論多少臺機器枪狂,多少個DateNode危喉,對于上傳的數(shù)據(jù)默認都是存儲三份做冗余,只要有一臺機器上的數(shù)據(jù)與DataNode都完好無損州疾,則集群可以對外提供服務辜限。如果A機器DataNode完好,但數(shù)據(jù)損壞严蓖,而B機器數(shù)據(jù)完好但DataNode未在運行薄嫡,則該文件不可下載。
但如果數(shù)據(jù)與DataNode全損颗胡,且數(shù)據(jù)不重要毫深,只需要集群立刻恢復功能的話,則可以停止集群所有進程毒姨,先停止yarn哑蔫,然后停止hdfs集群,再刪除集群內(nèi)所有機器上的弧呐,配置文件中配置的數(shù)據(jù)存儲路徑下的全部內(nèi)容闸迷,以及HDAOOP_HOME路徑中l(wèi)ogs的文件夾,然后重新在NameNode節(jié)點上執(zhí)行初始化命令俘枫,再啟動hdfs集群和yarn腥沽。
這樣這個集群就是全新的。
4.9 配置歷史服務器
修改mapred-site.xml
<configuration>
<!-- 讓mapreduce程序運行在yarn上崩哩,讓其受yarn調(diào)度 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 歷史服務器配置 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 歷史服務器web訪問地址 -->
<property>
<name>mapreduce.jobhistory.wabapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
配置中下面的web訪問地址才是我們在瀏覽器上輸入的地址。然后重新啟動yarn進程言沐。
[ovo@hadoop102 hadoop]$ /opt/hadoop-3.1.3/sbin/stop-yarn.sh
Stopping nodemanagers
hadoop103: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
hadoop102: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
Stopping resourcemanager
[ovo@hadoop102 hadoop]$ /opt/hadoop-3.1.3/sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
啟動后會發(fā)現(xiàn)并沒有history相關的進程邓嘹,是因為這個歷史服務器的進程需要手動開啟。
執(zhí)行命令:
[ovo@hadoop102 hadoop]$ mapred --daemon start historyserver
[ovo@hadoop102 hadoop]$ jps
12128 NodeManager
12787 JobHistoryServer
10537 DataNode
11998 ResourceManager
12846 Jps
然后之前點不開的那個History的按鈕就可以點開了险胰,頁面如下:
或者可以直接訪問瀏覽器頁面汹押。http://hadoop102:19888/
4.10 配置日志聚合
如果想查看任務執(zhí)行的日志,可以點擊如下位置查看起便,但在沒有配置日志聚集的情況下是無法在這里查看日志的棚贾。
為了查看任務執(zhí)行過程窖维,我們需要配置日志聚集,將分散在多個服務器上的日志收集到一起方便用戶查看妙痹。
需要修改yarn-site.xml配置文件铸史。在configuration標簽中添加以下內(nèi)容
<!-- 開啟日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 設置日志聚集服務器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 設置日志保留時間,單位秒 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
然后停止歷史服務器怯伊,并重啟yarn相關的所有進程琳轿。
[ovo@hadoop102 hadoop]$ mapred --daemon stop historyserver
[ovo@hadoop102 hadoop]$ /opt/hadoop-3.1.3/sbin/stop-yarn.sh
Stopping nodemanagers
hadoop102: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
Stopping resourcemanager
[ovo@hadoop102 hadoop]$ jps
14130 Jps
10537 DataNode
[ovo@hadoop102 hadoop]$ /opt/hadoop-3.1.3/sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
[ovo@hadoop102 hadoop]$ mapred --daemon start historyserver
舊任務的日志是沒有了,但是配置好之后的新任務會有日志耿芹,所以再次執(zhí)行一個wordcount的命令崭篡,讓其產(chǎn)生一個新的任務,然后再查看吧秕。這個命令上面執(zhí)行過兩次了琉闪,就不演示了,直接放任務的日志砸彬。
四颠毙、小知識
1.塊(block)
hadoop對數(shù)據(jù)的存儲有個單位,叫做“塊”(block)拿霉,默認情況下一個block的大小是128M吟秩。
當存儲的文件小于128M時,他占用的實際內(nèi)存就是文件大小绽淘,他只用了一個塊中的一部分涵防。
當存儲的文件大于128M時,他將先占用滿一個block沪铭,剩余部分再繼續(xù)占用另外一個塊壮池。
2.hadoop常用端口(均可自定義)
端口 | hadoop 2.X | hadoop 3.X |
---|---|---|
NameNode內(nèi)部通訊端口 | 8020/9000 | 8020/9000/9820 |
NameNode Web頁面端口 | 50070 | 9870 |
MapReduce查看任務執(zhí)行端口 | 8088 | 8088 |
歷史服務器通信端口 | 19888 | 19888 |
五、結(jié)語
hadoop的入門就到這里杀怠,簡單的使用與搭建部署就算入門了椰憋,之后還會有對各個部分具體詳細的文章,不過先讓我把入門的這部分練習好赔退,環(huán)境搭建和對配置文件的更改要多做多練習橙依,不然忘得很快的。