Centos7環(huán)境 – Hadoop單機(jī)模式部署
正文開始@Assassin
接上一篇博客 點(diǎn)我跳轉(zhuǎn)到虛擬機(jī)搭建,配置好虛擬機(jī)環(huán)境后進(jìn)行hadoop單機(jī)模式的部署,我的云計(jì)算課程中只要求了簡單的單機(jī)模式部署,如果有精力的話,應(yīng)該會把偽分布式部署也簡單地記錄一下
1. Hadoop介紹:
Apache Hadoop 項(xiàng)目為可靠,可擴(kuò)展的分布式計(jì)算開發(fā)開源軟件;Hadoop軟件庫是一個(gè)計(jì)算框架,可以使用簡單的編程模型以集群的方式對大型數(shù)據(jù)集進(jìn)行分布式處理;
Apache Hadoop 軟件庫是一個(gè)框架,它允許使用簡單的編程模型跨計(jì)算機(jī)集群分布式處理大型數(shù)據(jù)集。它旨在從單個(gè)服務(wù)器擴(kuò)展到數(shù)千臺機(jī)器,每臺機(jī)器都提供本地計(jì)算和存儲。庫本身不是依靠硬件來提供高可用性,而是設(shè)計(jì)用于檢測和處理應(yīng)用層的故障,因此在計(jì)算機(jī)集群之上提供高可用性服務(wù),每臺計(jì)算機(jī)都可能容易出現(xiàn)故障。
2. Hadoop發(fā)展史及生態(tài)圈:
時(shí)間線 | 具體事件 |
---|---|
2006年2月 | 成為一套完整而獨(dú)立的軟件,并被命名為Hadoop |
2008年1月 | Hadoop成為Apache頂級項(xiàng)目 |
2009年7月 | MapReduce和HDFS成為Hadoop的獨(dú)立子項(xiàng)目 |
2010年5月 | Avro脫離Hadoop項(xiàng)目,成為Apache頂級項(xiàng)目 |
2010年5月 | HBase脫離Hadoop項(xiàng)目,成為Apache頂級項(xiàng)目 |
2010年9月 | Hive脫離Hadoop項(xiàng)目,成為Apache頂級項(xiàng)目 |
2010年9月 | Pig脫離Hadoop項(xiàng)目,成為Apache頂級項(xiàng)目 |
2011年1月 | Hadoop 1.0.0 版本發(fā)布 |
2012年10月 | Impala加入Hadoop生態(tài)圈 |
2013年10月 | Hadoop 2.0.0 版本發(fā)布 |
2014年2月 | Spark成為Apache頂級項(xiàng)目 |
2017年12月 | Hadoop 3.0.0 版本發(fā)布 |
2020年7月 | Hadoop 3.3.0 版本發(fā)布 |
3. Hadoop核心功能及優(yōu)勢:
- Hadoop Common:支持其他 Hadoop 模塊的通用實(shí)用程序
- Hadoop 分布式文件系統(tǒng) (HDFS):一種分布式文件系統(tǒng),可提供對應(yīng)用程序數(shù)據(jù)的高吞吐量訪問;是Hadoop生態(tài)系統(tǒng)中的核心項(xiàng)目之一,也是分布式計(jì)算中數(shù)據(jù)存儲管理的基礎(chǔ)
- Hadoop YARN:作業(yè)調(diào)度和集群資源管理的框架;可以為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,為集群的資源利用率、統(tǒng)一管理、數(shù)據(jù)共享等方面提供了便利
- Hadoop MapReduce:基于 YARN 的系統(tǒng),用于并行處理大型數(shù)據(jù)集;Map階段處理后形成鍵值對形式的中間結(jié)果;Reduce對中間結(jié)果相同的 " 鍵 " 對應(yīng)的 " 值 " 進(jìn)行處理,得到最終結(jié)果
特點(diǎn) | 具體含義 |
---|---|
擴(kuò)容能力 (Scalable) | 顧名思義hadoop作為分布式存儲和計(jì)算的框架平臺是在計(jì)算機(jī)集群內(nèi)分配數(shù)據(jù)并行完成計(jì)算任務(wù),而集群可以隨時(shí)擴(kuò)展到成百上千個(gè)節(jié)點(diǎn)上 |
低成本 (Economical) | Hadoop通過普通且廉價(jià)的機(jī)器組成服務(wù)器集群來分發(fā)以及處理數(shù)據(jù),以至于成本很低 |
高效率 (Efficient) | Hadoop可以在節(jié)點(diǎn)之間動態(tài)并行的移動數(shù)據(jù),速度非常之快 |
可靠性 (Rellable) | 能自動維護(hù)數(shù)據(jù)的多份復(fù)制,并且可以在任務(wù)失敗后能自動的重新部署(redeploy)計(jì)算任務(wù),所以說Hadoop的按位存儲和處理數(shù)據(jù)的能力值得信賴 |
高容錯(cuò)性 (High fault tolerance) | Hadoop能夠自動保存數(shù)據(jù)的多個(gè)副本,并且能夠自動將失敗的任務(wù)重新分配 |
4. 部署方式介紹:
-
① 單機(jī)模式(standalone mode):
單機(jī)模式是最簡單(默認(rèn))的安裝模式,因?yàn)镠adoop本身是基于Java編寫的,所以只要配置好Java的環(huán)境變量就可以運(yùn)行了;在這種部署方式中我們不需要修改任何的配置文件,也不需要啟動任何的服務(wù),只需要解壓縮、配置環(huán)境變量即可。雖然配置很簡單,所以說能做的事情也是很少的,因?yàn)闆]有各種守護(hù)進(jìn)程,所以分布式數(shù)據(jù)存儲以及資源調(diào)度等等服務(wù)都是不能使用的,但是我們可以很方便的測試MapReduce程序 -
② 偽分布模式(Pseudo-Distributed mode):
偽分布模式是學(xué)習(xí)階段最常用的模式,可以將進(jìn)程都運(yùn)行在同一臺機(jī)器上。在這種模式下,可以模擬全分布模式下的運(yùn)行狀態(tài),基本上可以完成全分布模式下的所有操作,偽分布模式是全分布模式的一個(gè)特例 -
③ 全分布模式(cluster mode):
在全分布模式下,會在配置文件中體現(xiàn)出主節(jié)點(diǎn)與分節(jié)點(diǎn),可以指定哪些機(jī)器上運(yùn)行哪些服務(wù)以達(dá)到的成本與效率的平衡。在企業(yè)中主要采用的都是全分布式模式,節(jié)點(diǎn)從數(shù)十個(gè)到上百個(gè)不等。在學(xué)習(xí)階段,如果個(gè)人PC的性能足夠強(qiáng)勁,也可以使用多臺虛擬機(jī)代替
5. hadoop及jdk下載:
5.1 hadoop安裝包下載:
在搜索引擎中直接搜索hadoop即可,注意二級域名是apache.org
進(jìn)入到 Apache Hadoop 官方下載頁面:Apache Hadoop Download
現(xiàn)在基本上使用的是開源社區(qū)版,目前的主流版本為2.x.x和3.x.x,這里就選用穩(wěn)定性較好的 2.10.1 進(jìn)行下載;頁面中有 Source download 和 Binary download 兩種,其中Source為源碼,Binary為我們所需要的軟件包,點(diǎn)擊對應(yīng)版本的Binary進(jìn)入下載界面:
這里直接放出 2.10.1 Binary 版本的下載鏈接:hadoop 2.10.1下載鏈接
hadoop安裝包下載完成:
5.2 jdk安裝包下載:
在配置Hadoop前,需要先配置好JDK,在安裝應(yīng)先檢查之前是否安裝過jdk歷史版本,如果安裝過jdk,需卸載歷史版本;接下來需下載jdk,在搜索引擎中搜索jdk:注意二級域名是 apache.com
現(xiàn)在企業(yè)中主流的jdk版本是 jdk1.8,所以這里我自然選擇 jdk1.8 進(jìn)行下載,jdk1.8下載鏈接
進(jìn)入界面后根據(jù)列表的信息選擇所需要的版本,32位系統(tǒng)對應(yīng)x86,64位系統(tǒng)對應(yīng)x64:這里選擇 x64 Compressed Archive
點(diǎn)擊右側(cè)的下載鏈接,然后勾選接受網(wǎng)絡(luò)許可協(xié)議就可以下載了:
這里還得配合oracle的賬號來進(jìn)行下載:
等不及的小伙伴可以通過百度網(wǎng)盤的鏈接進(jìn)行下載:
jdk1.8-linux
提取碼:1pva
jdk下載完成,一切準(zhǔn)備就緒了~~
6. 安裝及環(huán)境配置:
我的電腦不是很好,開虛擬機(jī)內(nèi)存占用太大了,所以使用 xshell 連接虛擬機(jī),接下來的操作全都在 xshell 中進(jìn)行:
xshell ssh 遠(yuǎn)程連接虛擬機(jī)成功
6.1 jdk環(huán)境配置:
- ① 查詢jdk歷史版本:
[ninghai@centos ~]$ rpm -qa | grep jdk
[ninghai@centos ~]$ rpm -qa | grep java
將查詢出來的文件刪除,如果沒有歷史版本則進(jìn)行下一步
- ② 卸載歷史版本(root或者sudo):
[ninghai@centos ~]$ sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
[ninghai@centos ~]$ sudo rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps tzdata-java-2020a-1.el7.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
[ninghai@centos ~]$ sudo rpm -e --nodeps copy-jdk-configs-3.3-10.el7_5.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
卸載完成后執(zhí)行以下指令,若出現(xiàn)如下結(jié)果則說明卸載歷史版本成功:
[ninghai@centos ~]$ rpm -qa | grep jdk
[ninghai@centos ~]$ rpm -qa | grep java
[ninghai@centos ~]$ java -version
- ③ 將文件傳輸?shù)教摂M機(jī)中:
使用lrzsz工具或者xftp進(jìn)行文件傳輸考慮到文件較大,這里改為使用xftp進(jìn)行文件傳輸,速率較快:
ls -l 指令查看一下傳輸完成后的文件列表:
- ④ 解壓縮jdk安裝包:
[ninghai@centos ~]$ tar -zvxf jdk-8u251-linux-x64.tar.gz
- ⑤ 配置環(huán)境變量:
注:配置環(huán)境變量有兩種方式,一種是直接配置系統(tǒng)環(huán)境變量,也就是全局環(huán)境變量;另一種是配置用戶環(huán)境變量,也就是本地用戶環(huán)境變量;系統(tǒng)環(huán)境變量在 /etc/profile
中進(jìn)行配置,該配置可作用于全局,無論哪個(gè)用戶都可以正常使用;用戶環(huán)境變量在 ~/.bash_profile
中進(jìn)行配置,該配置只可作用于當(dāng)前用戶,其他用戶不可正常使用;部署hadoop各模式時(shí)要確保jdk環(huán)境與hadoop配置環(huán)境要作用于同一用戶,也就是說java -version
跟hadoop version
需同時(shí)在一個(gè)用戶下起作用,所以說這里我比較推薦jdk配置用系統(tǒng)變量(全局變量),hadoop的配置使用本地用戶變量(本地局部變量),這樣既不用考慮用戶作用域的問題,也隔離了可以使用hadoop的用戶,也就是保證hadoop由專有的用戶來管理(工作中基本上采用這種模式)
本文中為了跟實(shí)驗(yàn)報(bào)告保持一致,均采用了配置當(dāng)前用戶 ~/.bash_profile
的方法,故也不存在作用域的問題,(jdk和hadoop的配置都在當(dāng)前用戶)
如果在工作中部署hadoop可能會新建hadoop用戶來操作,這時(shí)候就得考慮作用域是否一致的問題了!!
這里以當(dāng)前普通用戶進(jìn)行配置 (jdk配置只在當(dāng)前ninghai用戶生效),root 用戶使用 vim /etc/profile
可以進(jìn)行全局配置
[ninghai@centos ~]$ vim ~/.bash_profile
在 ~/.bash_profile 文件中追加如下信息:
JAVA_HOME=/home/ninghai/jdk1.8.0_251 #這里填自己jdk的解壓路徑
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export JAVA_HOME
由于配置的jdk主要是為了讓hadoop能夠正常調(diào)用,所以 CLASSPATH
的部分在此省略~~
使其如下圖所示:
最后刷新一下環(huán)境變量:
[ninghai@centos ~]$ source ~/.bash_profile
使用如下命令行進(jìn)行測試:
[ninghai@centos ~]$ java -version
可以發(fā)現(xiàn)該命令沒有報(bào)錯(cuò),且對應(yīng)的信息為 java version " 1.8.0_251 ",意味著操作成功:
還是把 root 的相關(guān)配置也簡單記錄一下:vim /etc/profile
;
系統(tǒng)環(huán)境變量中JAVA_HOME
的路徑一般選擇放在 PATH
路徑中,建議選擇 /opt
;
# 在文件結(jié)尾添加以下內(nèi)容
# 注:JAVA_HOME填的是jdk的安裝路徑,不一定跟我的一樣
JAVA_HOME=/opt/jdk1.8.0_251 #jdk解壓目錄
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin #拼接原有PATH,同時(shí)添加jdk的bin及jre/bin
#執(zhí)行export導(dǎo)出,提升為全局
export JAVA_HOME
export PATH
配置完成后用 root 用戶測試 jdk 同樣適用,上述兩種方法可任選一種進(jìn)行配置;
6.2 hadoop環(huán)境配置:
- ① 解壓縮hadoop安裝包:
[ninghai@centos ~]$ tar -zxvf hadoop-2.10.1.tar.gz
- ② 配置hadoop環(huán)境變量:
注:配置環(huán)境變量有兩種方式,一種是直接配置系統(tǒng)環(huán)境變量,也就是全局環(huán)境變量;另一種是配置用戶環(huán)境變量,也就是本地用戶環(huán)境變量;系統(tǒng)環(huán)境變量在 /etc/profile
中進(jìn)行配置,該配置可作用于全局,無論哪個(gè)用戶都可以正常使用;用戶環(huán)境變量在 ~/.bash_profile
中進(jìn)行配置,該配置只可作用于當(dāng)前用戶,其他用戶不可正常使用;部署hadoop各模式時(shí)要確保jdk環(huán)境與hadoop配置環(huán)境要作用于同一用戶,也就是說java -version
跟hadoop version
需同時(shí)在一個(gè)用戶下起作用,所以說這里我比較推薦jdk配置用系統(tǒng)變量(全局變量),hadoop的配置使用本地用戶變量(本地局部變量),這樣既不用考慮用戶作用域的問題,也隔離了可以使用hadoop的用戶,也就是保證hadoop由專有的用戶來管理(工作中基本上采用這種模式)
本文中為了跟實(shí)驗(yàn)報(bào)告保持一致,均采用了配置當(dāng)前用戶 ~/.bash_profile
的方法,故也不存在作用域的問題,(jdk和hadoop的配置都在當(dāng)前用戶)
如果在工作中部署hadoop可能會新建hadoop用戶來操作,這時(shí)候就得考慮作用域是否一致的問題了?。?/strong>
一般來說,工作中部署hadoop時(shí)會新建一個(gè)hadoop用戶來進(jìn)行操作,這樣會顯得更規(guī)范,這里由于是簡單的單機(jī)模式就不再新建hadoop用戶了;(為了跟我的實(shí)驗(yàn)報(bào)告保持一致 [doge]
所以依舊是以當(dāng)前普通用戶為例,這里就不再演示 root 用戶了,跟jdk的配置大同小異;在此進(jìn)入 ~/.bash_profile 文件:
在其中添加如下信息:
HADOOP_HOME=/home/ninghai/hadoop-2.10.1
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME
使其信息如下圖所示:
最后刷新一下環(huán)境變量:
[ninghai@centos ~]$ source ~/.bash_profile
使用如下命令行進(jìn)行測試:
[ninghai@centos hadoop-2.10.1]$ hadoop version
可以發(fā)現(xiàn)該命令沒有報(bào)錯(cuò),且對應(yīng)的信息為 Hadoop 2.10.1,意味著操作成功:
至此hadoop單機(jī)模式部署就算基本完成了,接下來對MapReduce的一些經(jīng)典案例進(jìn)行測試~~
7. 測試MapReduce案例:
7.1 測試grep案例:
到這里便可以執(zhí)行一些例子來感受下 Hadoop 的運(yùn)行;Hadoop 附帶了豐富的例子,包括 wordcount,terasort,join,grep,pi 等;
在此選擇運(yùn)行 grep 例子 (云計(jì)算實(shí)驗(yàn)報(bào)告選擇的就是這個(gè) ,將 input 文件夾中的所有文件作為輸入,篩選當(dāng)中符合正則表達(dá)式 dfs[a-z.]+ 的單詞并統(tǒng)計(jì)出現(xiàn)的次數(shù),最后輸出結(jié)果到 output 文件夾中;
創(chuàng)建 input 文件夾,將 etc/hadoop 目錄下的 .xml 文件全部拷貝到 input 文件夾下:
[ninghai@centos hadoop-2.10.1]$ mkdir input
[ninghai@centos hadoop-2.10.1]$ cp etc/hadoop/*xml input
使用 hadoop-mapreduce-examples-2.10.1.jar 來運(yùn)行 grep:
[ninghai@centos hadoop-2.10.1]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar grep input output 'dfs[a-z.]+'
ls -l 查看輸出的結(jié)果:可以看到生成了 output 文件夾,文件夾中包含兩個(gè)文件,一個(gè)標(biāo)志狀態(tài)的文件 _SUCCESS,內(nèi)無任何內(nèi)容,success表示成功;另一個(gè)是輸出結(jié)果文件 part-r-00000;進(jìn)入到 output 文件夾中查看 part-r-00000 中的運(yùn)行結(jié)果:
7.2 測試WordCount案例:
切換路徑到 /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce
目錄下:
[ninghai@centos ~]$ cd /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce
在 mapreduce 下創(chuàng)建一個(gè)測試文件 data.txt:
good better best
never let it rest
till good is better
and better best
good good study
day day up
today is a good day
使用 hadoop jar 命令來運(yùn)行一個(gè)jar包,在jar包中可能存在多個(gè)可執(zhí)行的類,目前需要運(yùn)行的是其中的 wordcount;運(yùn)行時(shí)需要兩個(gè)參數(shù):
- 輸入路徑:數(shù)據(jù)源文件或目錄
- 輸出路徑:一個(gè)還不存在的目錄,會自動創(chuàng)建
輸入路徑就是剛剛創(chuàng)建的data.txt,而輸出路徑必須是一個(gè)不存在路徑,每次執(zhí)行完成后會自動創(chuàng)建該目錄,并生成一些結(jié)果文件:
[ninghai@centos mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.10.1.jar wordcount data.txt output
ls -l 查看生成的 output 目錄:
cd 進(jìn)入 output 文件夾 ,ls -l :
包含一個(gè)標(biāo)志狀態(tài)的文件 _SUCCESS,success表示成功,里面沒有任何內(nèi)容;另一個(gè)part-r-00000包含統(tǒng)計(jì)的結(jié)果,各單詞出現(xiàn)的次數(shù):
異常解決: 執(zhí)行上述命令時(shí)可能出報(bào)錯(cuò),如果在運(yùn)行過程中出現(xiàn)UnknownHostException: bogon: 未知的名稱或服務(wù)
異常,可以通過在 /etc/hosts 文件中添加本機(jī)映射解決;如:本機(jī)主機(jī)名為centos,則修改內(nèi)容如下(使用root用戶或者sudo操作):
7.3 測試pi案例:
切換路徑到 /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce
目錄下:
[ninghai@centos ~]$ cd /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce
使用 hadoop-mapreduce-examples-2.10.1.jar 計(jì)算圓周率,執(zhí)行如下命令:
[ninghai@centos mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.10.1.jar pi 10 100000000
其中 pi 后面的10是運(yùn)行10次map任務(wù),100000000是每個(gè)map任務(wù)投擲次數(shù),所以總投擲次數(shù)是 10 * 100000000 = 1000000000,總投擲次數(shù)越多,計(jì)算出來的 pi 值越準(zhǔn)確文章來源:http://www.zghlxwxcb.cn/news/detail-431769.html
執(zhí)行結(jié)果如下:
測試over~文章來源地址http://www.zghlxwxcb.cn/news/detail-431769.html
到了這里,關(guān)于【云計(jì)算平臺】Hadoop單機(jī)模式環(huán)境搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!