Hadoop簡介
Hadoop是分布式系統(tǒng)的基礎(chǔ)架構(gòu)噪舀,它是根據(jù)Google公司發(fā)表的MapReduce和Google文件系統(tǒng)的論文自行實現(xiàn)而成篱瞎。所有的Hadoop模塊都有一個基本假設(shè)命锄,即硬件故障是常見情況,應(yīng)該由框架自動處理。Hadoop實現(xiàn)了名為MapReduce的編程范式:應(yīng)用程序被分割成許多小部分馅扣,而每個部分都能在集群中的任意節(jié)點上運行或重新運行。此外呆抑,Hadoop還提供了分布式文件系統(tǒng)岂嗓,用以存儲所有計算節(jié)點的數(shù)據(jù),這為整個集群帶來了非常高的帶寬鹊碍。MapReduce和分布式文件系統(tǒng)的設(shè)計厌殉,使得整個框架能夠自動處理節(jié)點故障。它使應(yīng)用程序與成千上萬的獨立計算的電腦和PB級的數(shù)據(jù)連接起來侈咕。
主要子項目
- Hadoop Common:在0.20及以前的版本中公罕,包含HDFS、MapReduce和其他項目公共內(nèi)容耀销,從0.21開始HDFS和MapReduce被分離為獨立的子項目楼眷,其余內(nèi)容為Hadoop Common
- HDFS:Hadoop分布式文件系統(tǒng)(Distributed File System)-HDFS(Hadoop Distributed File System)
- MapReduce:并行計算框架,0.20前使用org.apache.hadoop.mapred舊接口,0.20版本開始引入org.apache.hadoop.mapreduce的新API
Hadoop的配置分為三種:單機模式罐柳,偽分布式掌腰,分布式。對于個人來說张吉,搭建Hadoop分布式還是需要一點代價的齿梁,至少你需要一個強大的內(nèi)存去供應(yīng)幾臺虛擬機的運行。從學習的層面上考慮肮蛹,玩一玩Hadoop的單機或者偽分布式還是不難的勺择。本文將詳細介紹一下Ubuntu環(huán)境下Hadoop偽分布式的配置。
環(huán)境
- 64位的Ubuntu操作系統(tǒng)
- JDK1.8
- Hadoop-2.7.1
Hadoop的安裝一般是在Linus下完成的伦忠,對于新手來說省核,Ubuntu操作系統(tǒng)是個十分不錯的選擇。它既提供了可視化的界面昆码,又能夠使用Linus的必備神器——終端气忠。無論是使用Linus操作系統(tǒng)還是使用虛擬機中的Ubuntu都無關(guān)緊要。
Hadoop的運行是基于Java環(huán)境的基礎(chǔ)上的未桥,因此少不了JDK的安裝與配置笔刹。目前JDK的版本中兼容性最高的還是JDK1.8,新版本的JDK并不支持Hadoop等一系列產(chǎn)品冬耿。
再者就是Hadoop的版本選擇舌菜。這里有一個大大的坑。如果小伙伴們只想嘗試一下Hadoop這一個應(yīng)用程序亦镶,那對于版本就沒必要太多的要求日月。但是如果想要更多的嘗試,諸如:Hadoop缤骨,HBase爱咬,Hive,ZooKeeper等绊起,那么版本選擇一定要慎之又慎精拟。因為Hadoop的相關(guān)產(chǎn)品之間的版本并不完全相容。如果版本選擇不當虱歪,那么后續(xù)操作中最大的問題就是版本沖突造成的蜂绎。為了兼容后續(xù)安裝的HBase,我這里選擇了兼容性比較高的Hadoop-2.7.1笋鄙。
偽分布式的配置
JAVA環(huán)境的安裝和配置
- 首先從Oracle官網(wǎng)下載Linus版本的JDK1.8师枣,如圖1-1
Oracle官網(wǎng)下載似乎需要注冊一個Oracle賬戶,而且加載速度還非常非常慢萧落,這真的很讓人受不了践美。這里提供一個百度網(wǎng)盤下載的地址洗贰,提取碼:zh62。
- 轉(zhuǎn)到JDK下載包目錄下陨倡,用tar命令將其解壓到當前目錄下敛滋。
我的JDK包下載在自定義的目錄下:
JDK包下載目錄:~/Downloads/JDK
JDK包將要安裝到目錄:/usr/lib/JDK
如果你沒有設(shè)置過下載目錄,瀏覽器默認下載在~/Downloads
下(~表示宿主目錄玫膀,即你的用戶名目錄下)矛缨,使用以下命令將JDK解壓到指定目錄($表示普通管理員權(quán)限,即用戶自己):
$ sudo tar -zxvf ~/Downloads/JDK/jdk-8u221-linus-x64.tar.gz
(備注:代碼部分是在宿主目錄下執(zhí)行的帖旨,而截圖是在hadoop壓縮包所在目錄下執(zhí)行的,注意區(qū)分灵妨。./
表示當前目錄下)
將解壓后的JDK包移動到/usr/lib
目錄下:
$ sudo mv /usr/lib/jdk-8u221-linus-x64/jdk1.8.0_221 /usr/lib
(備注:如果以上兩部出現(xiàn)問題解阅,也可以使用鼠標手動執(zhí)行)
將轉(zhuǎn)移的名為jdk1.8.0_221
的解壓包重命名為JDK
$ sudo mv /usr/lib//jdk1.8.0_221 /usr/lib/JDK
跳轉(zhuǎn)到/usr/lib
目錄下就可以發(fā)現(xiàn)重命名的JDK
文件夾了,進入該文件夾泌霍,用ls
命令可以查看該文件夾的文件货抄,如圖2-2所示。
- 配置JDK環(huán)境變量
首先打開用戶配置文件朱转,添加JDK的安裝路徑:
$ gedit ~/.bashrc
向打開的.bashrc配置文件中添加jdk路徑:
export JAVA_HOME=/usr/lib/JDK
export JRE_HOME=/usr/lib/JDK/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
(備注:JAVA_HOME和JRE_HOME是你自己的JDK安裝目錄蟹地,也就是剛剛移動到/usr/lib目錄下的那個解壓包目錄)
保存之后關(guān)閉.bashrc
配置文件,使用source
使配置文件重新加載:
$ source ~/.bashrc
然后小伙伴們就可以嘗試輸入java -version
來測試一下JDK是否配置完畢了
$ java -version
當看到以上界面時藤为,說明你的JDK已經(jīng)配置完成了(這里會輸出JDK的版本信息怪与,還是建議小伙伴們使用JDK1.8)。
SSH環(huán)境的安裝和配置
集群缅疟、單節(jié)點模式都需要SSH登陸(類似于遠程登陸分别,你可以登陸某臺Linus主機),Ubuntu默認已經(jīng)安裝了SSH client存淫,此外還需要安裝SSH server耘斩。可以使用apt-get
的方式進行安裝:
$ sudo apt-get install openssh-server
安裝完成后桅咆,使用以下命令登陸本機:
$ ssh localhost
首次登陸時需要輸入密碼的括授,如圖2-0-1所示。
按照上方提示岩饼,輸入自己的用戶登錄密碼就可以了(也就是開機密碼)荚虚。當看到以下界面表明已經(jīng)成功登陸本機了:
你以為這樣就完了嗎?其實沒有忌愚。此時是登錄成功了曲管,但是每次登陸都需要輸入密碼,不煩嗎硕糊?如果你覺得不煩院水,那么當我沒說腊徙。因為剛開始我也是這么認為的。結(jié)果啟動Hadoop的時候檬某,我就后悔了撬腾。如果此時沒有設(shè)置免密碼登陸,那么在啟動Hadoop時恢恼,每啟動一個節(jié)點就需要輸入一次密碼民傻。大約每次啟動Hadoop都需要輸入三次密碼,這確實很不方便俺“摺漓踢!我后來也是花了很大的功夫才解決這個問題。如果你這都忍受漏隐,那我也就無言以對了喧半。你可以直接配置Hadoop了。但是還是建議大家在此配置免密碼登陸青责⊥荩可以使用以下命令設(shè)置:
$ cd ~/.ssh/ # 若沒有該目錄,請先執(zhí)行一次ssh localhost
$ ssh-keygen -t rsa # 提示按回車就可以
$ cat ./id_rsa.pub >> ./authorized_keys # 加入授權(quán)
此時就方便多了脖隶。然后我們又可以繼續(xù)往下走了扁耐。
偽分布式模式的配置
- 從Hadoop官網(wǎng)下載Hadoop壓縮包。
這里再強調(diào)一遍:因為Hadoop與其他產(chǎn)品产阱,如HBase等婉称,存在版本兼容性問題(只玩Hadoop的自行略過),因此Hadoop版本選擇一定要慎重心墅。這里我選擇了Hadoop-2.7.1酿矢,與HBase-2.0.6是兼容的,親測有效怎燥。
(備注:高版本的Hadoop與HBase(我曾以Hadoop-2.8.3+與HBase-2.0.6搭配測試過)會出現(xiàn)問題瘫筐,比如在開啟HBase之后,HMaster會莫名其妙的掛掉铐姚,又或者stop-hbase.sh命令無法關(guān)閉HRegionServer等策肝。)
下面的步驟就與安裝JDK時差不多了。
- 轉(zhuǎn)到Hadoop下載包目錄下隐绵,用tar命令將其解壓到當前目錄下之众。
我的Hadoop包下載在自定義的目錄下:
Hadoop包下載目錄:~/Downloads/Hadoop
Hadoop包將要安裝到目錄:/usr/local/Hadoop
使用以下命令將Hadoop下載包解壓到指定目錄
$ sudo tar -zxvf ~/Downloads/Hadoop/hadoop-2.7.1.tar.gz -C /usr/local
(此步驟支持手動)
將/usr/local
目錄下的hadoop-2.7.1
重命名為Hadoop
,使用命令如下:
$ sudo mv /usr/local/hadoop-2.7.1 /usr/local/Hadoop
然后就可以轉(zhuǎn)到/usr/local
目錄下查看Hadoop文件夾了:
這個時候在/usr/local/Hadoop/bin
目錄下依许,我們就可以使用hadoop version
命令查看Hadoop是否安裝成功了棺禾。但是為了方便使用,我們還是要配置環(huán)境變量峭跳,這樣直接在宿主目錄下就可以使用相關(guān)命令膘婶。
為了避免在后續(xù)操作中因為對文件的權(quán)限問題而導致部分命令無法正確執(zhí)行缺前,在此處我們用chmod命令賦予用戶對文件的權(quán)限:
$ sudo chmod -R a+w /usr/local/Hadoop
- 配置Hadoop的環(huán)境變量
與配置JDK環(huán)境變量相似,我們首先打開用戶配置文件.bashrc
文件:
$ gedit ~/.bashrc
向打開的.bashrc
配置文件中添加Hadoop解壓包的安裝路徑:
export HADOOP_HOME=/usr/local/Hadoop
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
然后重新加載配置文件:
$ source ~/.bashrc
這時候如果不出意外的話悬襟,我們在宿主目錄下輸入hadoop version
是可以查看到版本信息的:
$ hadoop version
當看到以上界面時衅码,表明Hadoop安裝成功了。但不要高興的太早脊岳,我們還沒有開始配置偽分布式逝段。下面開始配置偽分布式。
- 配置Hadoop偽分布式
Hadoop偽分布式的搭建需要修改兩份配置文件:core-site.xml
和hdfs-site.xml
割捅。
- 修改
core-site.xml
core-site.xml
目錄:/usr/local/Hadoop/etc/hadoop/core-site.xml
仍然使用gedit
方式打開該文件:
$ sudo gedit /usr/local/Hadoop/etc/hadoop/core-site.xml
你會發(fā)現(xiàn)該文件除了注釋內(nèi)容之外奶躯,只有兩行內(nèi)容:
<configuration>
</configuration>
我們需要將其修改為:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/Hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
上面的文本中<value>file:/usr/local/Hadoop/tmp</value>
是我的Hadoop的安裝目錄,此處需要自己修改一下棺牧。
- 修改
hdfs-site.xml
hdfs-site.xml
目錄:/usr/local/Hadoop/etc/hadoop/hdfs-site.xml
修改方法與前者相同巫糙,使用gedit
打開該文件:
$ sudo gedit /usr/local/Hadoop/etc/hadoop/hdfs-site.xml
文件的初始內(nèi)容也只有以下兩行:
<configuration>
</configuration>
我們需要將其修改為:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name> <value>file:/usr/local/Hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/Hadoop/tmp/dfs/data</value>
</property>
</configuration>
與上面相同,注意修改兩處<value>file:/usr/local/Hadoop/tmp/dfs/data</value>
路徑部分颊乘。
至此,Hadoop偽分布式的配置就完成了醉锄。下面開始測試一下你的Hadoop搭建成功了沒有乏悄?
- 初始化Hadoop,并開啟Hadoop
配置完成后恳不,我們對Hadoop進行初始化檩小,在/usr/local/Hadoop
目錄下,執(zhí)行以下命令(已經(jīng)配置了環(huán)境變量的烟勋,可以直接在宿主目錄下進行):
./bin/hdfs namenode -format
這一步可能需要等一小會兒规求,當看見以下字樣,說明初始化成功:
進行到這里卵惦,基本上就沒有什么大問題了阻肿。我們可以試著啟動Hadoop了,使用start-dfs.sh
來啟動Hadoop:
$ start-dfs.sh
第一次啟動Hadoop的時候沮尿,會出現(xiàn)SSH登陸提示丛塌,輸入yes/Y即可(具體看提示)⌒蠹玻可以使用jps
命令查看已運行的活動及其所占用的端口赴邻,如圖3-5-3所示:
我們可以使用stop-dfs.sh
命令關(guān)閉已經(jīng)啟動的Hadoop:
$ stop-dfs.sh
OK!到此為止啡捶,恭喜你的Hadoop偽分布式搭建成功姥敛!小伙伴們可以使用Hadoop運行一些簡單的實例团赁,過過癮变抽。
本文的主題內(nèi)容到此就結(jié)束了曙求。希望我的博客能對你有一些幫助趣些。