Hadoop及Hadoop偽分布式配置(Ubuntu)

Hadoop簡(jiǎn)介

Hadoop是分布式系統(tǒng)的基礎(chǔ)架構(gòu),它是根據(jù)Google公司發(fā)表的MapReduce和Google文件系統(tǒng)的論文自行實(shí)現(xiàn)而成。所有的Hadoop模塊都有一個(gè)基本假設(shè),即硬件故障是常見情況,應(yīng)該由框架自動(dòng)處理。Hadoop實(shí)現(xiàn)了名為MapReduce的編程范式:應(yīng)用程序被分割成許多小部分,而每個(gè)部分都能在集群中的任意節(jié)點(diǎn)上運(yùn)行或重新運(yùn)行。此外,Hadoop還提供了分布式文件系統(tǒng),用以存儲(chǔ)所有計(jì)算節(jié)點(diǎn)的數(shù)據(jù),這為整個(gè)集群帶來(lái)了非常高的帶寬。MapReduce和分布式文件系統(tǒng)的設(shè)計(jì),使得整個(gè)框架能夠自動(dòng)處理節(jié)點(diǎn)故障。它使應(yīng)用程序與成千上萬(wàn)的獨(dú)立計(jì)算的電腦和PB級(jí)的數(shù)據(jù)連接起來(lái)。

主要子項(xiàng)目

  • Hadoop Common:在0.20及以前的版本中,包含HDFS、MapReduce和其他項(xiàng)目公共內(nèi)容,從0.21開始HDFS和MapReduce被分離為獨(dú)立的子項(xiàng)目,其余內(nèi)容為Hadoop Common
  • HDFS:Hadoop分布式文件系統(tǒng)(Distributed File System)-HDFS(Hadoop Distributed File System)
  • MapReduce:并行計(jì)算框架,0.20前使用org.apache.hadoop.mapred舊接口,0.20版本開始引入org.apache.hadoop.mapreduce的新API

Hadoop的配置分為三種:?jiǎn)螜C(jī)模式,偽分布式,分布式。對(duì)于個(gè)人來(lái)說(shuō),搭建Hadoop分布式還是需要一點(diǎn)代價(jià)的,至少你需要一個(gè)強(qiáng)大的內(nèi)存去供應(yīng)幾臺(tái)虛擬機(jī)的運(yùn)行。從學(xué)習(xí)的層面上考慮,玩一玩Hadoop的單機(jī)或者偽分布式還是不難的。本文將詳細(xì)介紹一下Ubuntu環(huán)境下Hadoop偽分布式的配置。


環(huán)境

  • 64位的Ubuntu操作系統(tǒng)
  • JDK1.8
  • Hadoop-2.7.1

Hadoop的安裝一般是在Linus下完成的,對(duì)于新手來(lái)說(shuō),Ubuntu操作系統(tǒng)是個(gè)十分不錯(cuò)的選擇。它既提供了可視化的界面,又能夠使用Linus的必備神器——終端。無(wú)論是使用Linus操作系統(tǒng)還是使用虛擬機(jī)中的Ubuntu都無(wú)關(guān)緊要。
Hadoop的運(yùn)行是基于Java環(huán)境的基礎(chǔ)上的,因此少不了JDK的安裝與配置。目前JDK的版本中兼容性最高的還是JDK1.8,新版本的JDK并不支持Hadoop等一系列產(chǎn)品。
再者就是Hadoop的版本選擇。這里有一個(gè)大大的坑。如果小伙伴們只想嘗試一下Hadoop這一個(gè)應(yīng)用程序,那對(duì)于版本就沒(méi)必要太多的要求。但是如果想要更多的嘗試,諸如:Hadoop,HBase,Hive,ZooKeeper等,那么版本選擇一定要慎之又慎。因?yàn)镠adoop的相關(guān)產(chǎn)品之間的版本并不完全相容。如果版本選擇不當(dāng),那么后續(xù)操作中最大的問(wèn)題就是版本沖突造成的。為了兼容后續(xù)安裝的HBase,我這里選擇了兼容性比較高的Hadoop-2.7.1。


偽分布式的配置

JAVA環(huán)境的安裝和配置

  1. 首先從Oracle官網(wǎng)下載Linus版本的JDK1.8,如圖1-1
1-1-1

Oracle官網(wǎng)下載似乎需要注冊(cè)一個(gè)Oracle賬戶,而且加載速度還非常非常慢,這真的很讓人受不了。這里提供一個(gè)百度網(wǎng)盤下載的地址,提取碼:zh62。

  1. 轉(zhuǎn)到JDK下載包目錄下,用tar命令將其解壓到當(dāng)前目錄下。

我的JDK包下載在自定義的目錄下:
JDK包下載目錄:~/Downloads/JDK
JDK包將要安裝到目錄:/usr/lib/JDK
如果你沒(méi)有設(shè)置過(guò)下載目錄,瀏覽器默認(rèn)下載在~/Downloads下(~表示宿主目錄,即你的用戶名目錄下),使用以下命令將JDK解壓到指定目錄($表示普通管理員權(quán)限,即用戶自己):

$ sudo tar -zxvf ~/Downloads/JDK/jdk-8u221-linus-x64.tar.gz
1-2-1

(備注:代碼部分是在宿主目錄下執(zhí)行的,而截圖是在hadoop壓縮包所在目錄下執(zhí)行的,注意區(qū)分。./表示當(dāng)前目錄下)
將解壓后的JDK包移動(dòng)到/usr/lib目錄下:

$ sudo mv /usr/lib/jdk-8u221-linus-x64/jdk1.8.0_221 /usr/lib

(備注:如果以上兩部出現(xiàn)問(wèn)題,也可以使用鼠標(biāo)手動(dòng)執(zhí)行)

將轉(zhuǎn)移的名為jdk1.8.0_221的解壓包重命名為JDK

$ sudo mv /usr/lib//jdk1.8.0_221 /usr/lib/JDK
1-2-2

跳轉(zhuǎn)到/usr/lib目錄下就可以發(fā)現(xiàn)重命名的JDK文件夾了,進(jìn)入該文件夾,用ls命令可以查看該文件夾的文件,如圖2-2所示。

  1. 配置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安裝目錄,也就是剛剛移動(dòng)到/usr/lib目錄下的那個(gè)解壓包目錄

1-3-1

保存之后關(guān)閉.bashrc配置文件,使用source使配置文件重新加載:

$ source ~/.bashrc

然后小伙伴們就可以嘗試輸入java -version來(lái)測(cè)試一下JDK是否配置完畢了

$ java -version
1-3-2

當(dāng)看到以上界面時(shí),說(shuō)明你的JDK已經(jīng)配置完成了(這里會(huì)輸出JDK的版本信息,還是建議小伙伴們使用JDK1.8)。


SSH環(huán)境的安裝和配置

集群、單節(jié)點(diǎn)模式都需要SSH登陸(類似于遠(yuǎn)程登陸,你可以登陸某臺(tái)Linus主機(jī)),Ubuntu默認(rèn)已經(jīng)安裝了SSH client,此外還需要安裝SSH server。可以使用apt-get的方式進(jìn)行安裝:

$ sudo apt-get install openssh-server

安裝完成后,使用以下命令登陸本機(jī):

$ ssh localhost

首次登陸時(shí)需要輸入密碼的,如圖2-0-1所示。

2-0-1

按照上方提示,輸入自己的用戶登錄密碼就可以了(也就是開機(jī)密碼)。當(dāng)看到以下界面表明已經(jīng)成功登陸本機(jī)了:

2-0-2

你以為這樣就完了嗎?其實(shí)沒(méi)有。此時(shí)是登錄成功了,但是每次登陸都需要輸入密碼,不煩嗎?如果你覺(jué)得不煩,那么當(dāng)我沒(méi)說(shuō)。因?yàn)閯傞_始我也是這么認(rèn)為的。結(jié)果啟動(dòng)Hadoop的時(shí)候,我就后悔了。如果此時(shí)沒(méi)有設(shè)置免密碼登陸,那么在啟動(dòng)Hadoop時(shí),每啟動(dòng)一個(gè)節(jié)點(diǎn)就需要輸入一次密碼。大約每次啟動(dòng)Hadoop都需要輸入三次密碼,這確實(shí)很不方便??!我后來(lái)也是花了很大的功夫才解決這個(gè)問(wèn)題。如果你這都忍受,那我也就無(wú)言以對(duì)了。你可以直接配置Hadoop了。但是還是建議大家在此配置免密碼登陸??梢允褂靡韵旅钤O(shè)置:

$ cd ~/.ssh/                             # 若沒(méi)有該目錄,請(qǐng)先執(zhí)行一次ssh localhost
$ ssh-keygen -t rsa                      # 提示按回車就可以
$ cat ./id_rsa.pub >> ./authorized_keys  # 加入授權(quán)
2-0-3
2-0-4

此時(shí)就方便多了。然后我們又可以繼續(xù)往下走了。


偽分布式模式的配置

  1. Hadoop官網(wǎng)下載Hadoop壓縮包。
3-1-1

這里再?gòu)?qiáng)調(diào)一遍:因?yàn)镠adoop與其他產(chǎn)品,如HBase等,存在版本兼容性問(wèn)題(只玩Hadoop的自行略過(guò)),因此Hadoop版本選擇一定要慎重。這里我選擇了Hadoop-2.7.1,與HBase-2.0.6是兼容的,親測(cè)有效。
(備注:高版本的Hadoop與HBase(我曾以Hadoop-2.8.3+與HBase-2.0.6搭配測(cè)試過(guò))會(huì)出現(xiàn)問(wèn)題,比如在開啟HBase之后,HMaster會(huì)莫名其妙的掛掉,又或者stop-hbase.sh命令無(wú)法關(guān)閉HRegionServer等。)

3-1-1

下面的步驟就與安裝JDK時(shí)差不多了。

  1. 轉(zhuǎn)到Hadoop下載包目錄下,用tar命令將其解壓到當(dāng)前目錄下。

我的Hadoop包下載在自定義的目錄下:
Hadoop包下載目錄:~/Downloads/Hadoop
Hadoop包將要安裝到目錄:/usr/local/Hadoop
使用以下命令將Hadoop下載包解壓到指定目錄

$ sudo tar -zxvf ~/Downloads/Hadoop/hadoop-2.7.1.tar.gz -C /usr/local

(此步驟支持手動(dòng))

3-2-1

/usr/local目錄下的hadoop-2.7.1重命名為Hadoop,使用命令如下:

$ sudo mv /usr/local/hadoop-2.7.1 /usr/local/Hadoop

然后就可以轉(zhuǎn)到/usr/local目錄下查看Hadoop文件夾了:

3-2-2

這個(gè)時(shí)候在/usr/local/Hadoop/bin目錄下,我們就可以使用hadoop version命令查看Hadoop是否安裝成功了。但是為了方便使用,我們還是要配置環(huán)境變量,這樣直接在宿主目錄下就可以使用相關(guān)命令。
為了避免在后續(xù)操作中因?yàn)閷?duì)文件的權(quán)限問(wèn)題而導(dǎo)致部分命令無(wú)法正確執(zhí)行,在此處我們用chmod命令賦予用戶對(duì)文件的權(quán)限:

$ sudo chmod -R a+w /usr/local/Hadoop
  1. 配置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
3-3-1

然后重新加載配置文件:

$ source ~/.bashrc

這時(shí)候如果不出意外的話,我們?cè)谒拗髂夸浵螺斎?code>hadoop version是可以查看到版本信息的:

$ hadoop version
3-3-2

當(dāng)看到以上界面時(shí),表明Hadoop安裝成功了。但不要高興的太早,我們還沒(méi)有開始配置偽分布式。下面開始配置偽分布式。

  1. 配置Hadoop偽分布式

Hadoop偽分布式的搭建需要修改兩份配置文件:core-site.xmlhdfs-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

你會(huì)發(fā)現(xiàn)該文件除了注釋內(nèi)容之外,只有兩行內(nèi)容:

<configuration>
</configuration>
3-4-1

我們需要將其修改為:

<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>
3-4-2

上面的文本中<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>
3-4-3

我們需要將其修改為:

<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>
3-4-4

與上面相同,注意修改兩處<value>file:/usr/local/Hadoop/tmp/dfs/data</value>路徑部分。
至此,Hadoop偽分布式的配置就完成了。下面開始測(cè)試一下你的Hadoop搭建成功了沒(méi)有?

  1. 初始化Hadoop,并開啟Hadoop

配置完成后,我們對(duì)Hadoop進(jìn)行初始化,在/usr/local/Hadoop目錄下,執(zhí)行以下命令(已經(jīng)配置了環(huán)境變量的,可以直接在宿主目錄下進(jìn)行):

./bin/hdfs namenode -format
3-5-1

這一步可能需要等一小會(huì)兒,當(dāng)看見以下字樣,說(shuō)明初始化成功:

3-5-2

進(jìn)行到這里,基本上就沒(méi)有什么大問(wèn)題了。我們可以試著啟動(dòng)Hadoop了,使用start-dfs.sh來(lái)啟動(dòng)Hadoop:

$ start-dfs.sh

第一次啟動(dòng)Hadoop的時(shí)候,會(huì)出現(xiàn)SSH登陸提示,輸入yes/Y即可(具體看提示)??梢允褂?code>jps命令查看已運(yùn)行的活動(dòng)及其所占用的端口,如圖3-5-3所示:

3-5-3

我們可以使用stop-dfs.sh命令關(guān)閉已經(jīng)啟動(dòng)的Hadoop:

$ stop-dfs.sh
3-5-4

OK!到此為止,恭喜你的Hadoop偽分布式搭建成功!小伙伴們可以使用Hadoop運(yùn)行一些簡(jiǎn)單的實(shí)例,過(guò)過(guò)癮。

本文的主題內(nèi)容到此就結(jié)束了。希望我的博客能對(duì)你有一些幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容