在 Ubuntu16.04 上搭建 Hadoop-2.8.0 偽分布式環(huán)境

學校有幾門課程的作業(yè)需要我們來寫個教程,好吧。

環(huán)境準備

軟件安裝

由于該系統(tǒng)是英文系統(tǒng),有可能對中文字符支持不友好,因此要安裝中文的UTF-8字符集。同時因為Hadoop是Java的杰出產(chǎn)物因此需要安裝Java,為了方便,在這里選用OpenJdk,版本Java8。而需要用到的vim、ssh等命令已內(nèi)置在Ubuntu16.04中,因此無需重復安裝。

sudo su
apt install -y language-pack-zh-hant language-pack-zh-hans
apt install -y openjdk-8-jre openjdk-8-jdk

創(chuàng)建用戶以及權(quán)限配置

本次實驗中我們創(chuàng)建一個hadoop用戶,而對hadoop的使用操作都通過hadoop用戶實現(xiàn)。同時為了方便hadoop操作中的ssh登錄,我們配置無密碼ssh登錄。

useradd -m hadoop -s /bin/bash
passwd hadoop
adduser hadoop sudo
su hadoop

此后,hadoop用戶便是運行hadoop程序的用戶,以下的操作便是以hadoop用戶的身份運行的。接下來生成密鑰用于無密碼登錄:

ssh-keygen -t rsa 
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

![Screen Shot 2017-05-03 at 10.30.57 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 10.30.57 PM.png)

配置完后即可通過ssh localhost命令無密碼登錄,需要注意的是要按提示輸入yes

![Screen Shot 2017-05-03 at 10.31.13 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 10.31.13 PM.png)

下載hadoop并放置到約定俗成的位置

這次實驗的hadoop版本是2.8.0,下載使用wget命令,軟件源為了快速選用國內(nèi)的清華源,同時將hadoop文件夾移到約定俗成的/usr/local目錄下。

wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
tar zxvf hadoop-2.8.0.tar.gz

![Screen Shot 2017-05-03 at 10.32.49 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 10.32.49 PM.png)

mv hadoop-2.8.0 hadoop
sudo mv hadoop /usr/local/
sudo chown -R hadoop /usr/local/hadoop
cd /usr/local/hadoop/

此后,/usr/local/hadoop這個目錄便是hadoop目錄,下面的操作都是在目錄下操作的。

配置Java和Hadoop的環(huán)境變量

需要在/etc/profile./etc/hadoop/hadoop-env.sh(目前在hadoop目錄下)這兩個文件的末尾加入以下變量:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
CLASSPATH=$CLASSPATH.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

修改第一個文件就是修改當前的環(huán)境變量,修改第二個文件就是修改ssh后的環(huán)境變量。

這些就是Java和Hadoop的環(huán)境變量,加載了這些環(huán)境變量即可在命令行運行特定命令,現(xiàn)在重新加載這配置文件:

. /etc/profile

配置偽分布式環(huán)境

初始化hdfs

編輯./etc/hadoop/core-site.xml和./etc/hadoop/hdfs-site.xml兩個文件

vim ./etc/hadoop/core-site.xml

修改里面配置,感興趣的可以查一下含義,主要是每一個property的name和value:

<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>
vim ./etc/hadoop/hdfs-site.xml

修改里面配置,指名name、data文件夾在這個服務(wù)器上的路徑(因為是偽分布式,所以都在這個服務(wù)器上):

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

以上就完成了偽分布式的配置,接下來就是格式化這些存儲節(jié)點

./bin/hdfs namenode -format

![Screen Shot 2017-05-03 at 11.20.51 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.20.51 PM.png)

中間太多了略過直接看末尾:

![Screen Shot 2017-05-03 at 11.21.37 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.21.37 PM.png)

在此看到Exiting status為0,結(jié)合大多數(shù)程序和系統(tǒng)腳本,結(jié)束狀態(tài)碼為0即為正常運行結(jié)束。

開啟 NameNode 和 DataNode 守護進程

運行./sbin/start-dfs.sh命令即可啟動

![Screen Shot 2017-05-03 at 11.23.40 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.23.40 PM.png)

注意本次運行以及以后的運行程序有可能出現(xiàn)以下WARN:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

該 WARN 提示可以忽略,并不會影響正常使用(該 WARN 可以通過編譯 Hadoop 源碼解決)。

而后即可通過 http://機器ip:50070 來訪問 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。

![Screen Shot 2017-05-03 at 10.44.18 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 10.44.18 PM.png)

在命令界面也可以通過jps來查看 NameNode 和 Datanode 信息是否在運行。

運行例子

命令查看

可以通過./bin/hdfs dfs -help命令來查看使用方法:

![Screen Shot 2017-05-03 at 11.24.41 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.24.41 PM.png)

例如查看hadoop版本的命令:

![Screen Shot 2017-05-03 at 11.19.25 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.19.25 PM.png)

在 HDFS 中創(chuàng)建用戶目錄

先通過./bin/hdfs dfs -mkdir -p /user/hadoop命令創(chuàng)建一個用戶目錄

例子一 解析配置文件

本次實驗可以就地取材,選擇hadoop的配置文件為材料,使用偽分布式hadoop平臺來解析。先用put命令把配置文件都放入hdfs的一個新建文件夾input:

./bin/hdfs dfs -mkdir /user/hadoop/input
./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input/
./bin/hdfs dfs -ls input

![Screen Shot 2017-05-03 at 11.08.16 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.08.16 PM.png)

然后運行例子,解析input里面的配置文件,并將解析結(jié)果放入output文件夾:

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input/* /user/hadoop/output 'dfs[a-z.]+'

![Screen Shot 2017-05-03 at 11.09.22 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.09.22 PM.png)

把output里面的解析結(jié)果通過cat命令輸出:

./bin/hdfs dfs -cat /user/hadoop/output/*

![Screen Shot 2017-05-03 at 11.09.52 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.09.52 PM.png)

把output里面的解析結(jié)果從hdfs中取出(這個操作是常用的,盡管在偽分布式里面沒什么意義,但是在真實環(huán)境下特別有用):

./bin/hdfs dfs -get /user/hadoop/output ./output

例子二 WordCount

wordcount是一個hadoop內(nèi)置的范例程序,用于統(tǒng)計單詞數(shù)量。

首先,要刪除例子一留下的實驗痕跡:

./bin/hdfs dfs -rm -r -f /user/hadoop/output /user/hadoop/input

![Screen Shot 2017-05-03 at 11.15.36 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.15.36 PM.png)

然后和實驗一一樣,創(chuàng)建hadoop的輸入文件夾,同時就地取材一個可讀文件:

./bin/hdfs dfs -mkdir /user/hadoop/input
./bin/hdfs dfs  -put LICENSE.txt  /user/hadoop/input/LICENSE.txt
./bin/hdfs dfs  -ls /user/hadoop/input

運行例子,結(jié)果放置在output文件夾:

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar wordcount /user/hadoop/input /user/hadoop/output
./bin/hdfs dfs -cat /user/hadoop/output/*

![Screen Shot 2017-05-03 at 11.16.23 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.16.23 PM.png)

可以看到,屏幕是被刷了好幾遍,因為輸出太多了,我們可以統(tǒng)計一下輸出了有多少行:

./bin/hdfs dfs -cat /user/hadoop/output/* | wc -l

![Screen Shot 2017-05-03 at 11.17.34 P](http://source.jianyujianyu.com/2017-05-04-Screen Shot 2017-05-03 at 11.17.34 PM.png)

噢,原來有2000多行的輸出呢!

結(jié)論

hadoop的思想已經(jīng)融入了我們很多分布式系統(tǒng)里面,熟悉hadoop的思想和操作有助于我們更宏觀地觀察這個現(xiàn)代化網(wǎng)絡(luò)世界。

若有錯誤之處請指出,更多地關(guān)注煎魚。

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

相關(guān)閱讀更多精彩內(nèi)容

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