Hadoop入門

Hadoop是一個大數(shù)據(jù)的框架偎蘸,當代大數(shù)據(jù)的痛點在于大量數(shù)據(jù)的采集、存儲與計算瞬内。Hadoop解決了后兩個問題迷雪,主要提供海量數(shù)據(jù)的存儲與計算功能撩满,所以備受青睞剿干。


hadoop的Logo

一、大數(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生態(tài)圈

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包含NameNodeDataNode,分布式存儲時需要有一個節(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
如下圖:

NameNode訪問頁

ResourceManager訪問頁

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頁面上查看到路徑下都有什么文件宽档。


web頁面查看文件1

web頁面查看文件2
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)容。


輸出內(nèi)容

同時還可以在yarn的任務調(diào)度頁面查看到這個任務姐赡。


任務調(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/
歷史服務器web頁面

4.10 配置日志聚合

如果想查看任務執(zhí)行的日志,可以點擊如下位置查看起便,但在沒有配置日志聚集的情況下是無法在這里查看日志的棚贾。


任務執(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)境搭建和對配置文件的更改要多做多練習橙依,不然忘得很快的。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硕旗,一起剝皮案震驚了整個濱河市窗骑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漆枚,老刑警劉巖创译,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異墙基,居然都是意外死亡软族,警方通過查閱死者的電腦和手機刷喜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來立砸,“玉大人掖疮,你說我怎么就攤上這事⊙銮荩” “怎么了氮墨?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吐葵。 經(jīng)常有香客問我规揪,道長,這世上最難降的妖魔是什么温峭? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任猛铅,我火速辦了婚禮,結(jié)果婚禮上凤藏,老公的妹妹穿的比我還像新娘奸忽。我一直安慰自己,他們只是感情好揖庄,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布栗菜。 她就那樣靜靜地躺著,像睡著了一般蹄梢。 火紅的嫁衣襯著肌膚如雪疙筹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天禁炒,我揣著相機與錄音而咆,去河邊找鬼。 笑死幕袱,一個胖子當著我的面吹牛暴备,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播们豌,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼涯捻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了望迎?” 一聲冷哼從身側(cè)響起障癌,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擂煞,沒想到半個月后混弥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趴乡,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡对省,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年蝗拿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒿涎。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡哀托,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劳秋,到底是詐尸還是另有隱情仓手,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布玻淑,位于F島的核電站嗽冒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏补履。R本人自食惡果不足惜添坊,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箫锤。 院中可真熱鬧贬蛙,春花似錦、人聲如沸谚攒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馏臭。三九已至野蝇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間位喂,已是汗流浹背浪耘。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留塑崖,地道東北人七冲。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像规婆,于是被迫代替她去往敵國和親澜躺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容