無需密碼自動登陸,系統用戶名 shiyanlouhtml
本實驗環境採用帶桌面的 Ubuntu Linux 環境,實驗中會用到桌面上的程序:前端
使用Vim編輯器輸入實驗所需的代碼,而後使用Xfce終端命令行環境進行編譯運行,查看運行結果,運行後能夠截圖並分享本身的實驗報告,實驗報告中的數據能夠真實有效證實您已經完成了實驗。node
實驗報告頁面能夠在「個人主頁」中查看,其中含有每次實驗的截圖及筆記,以及每次實驗的有效學習時間(指的是在實驗桌面內操做的時間,若是沒有操做,系統會記錄爲發呆時間)。這些都是您學習的真實性證實。linux
本實驗參考下列文檔內容製做:apache
core-site.xml
:$ sudo gvim /usr/local/hadoop/etc/hadoop/core-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> </property> </configuration>
經常使用配置項說明:vim
fs.default.name
這是一個描述集羣中NameNode結點的URI(包括協議、主機名稱、端口號),集羣裏面的每一臺機器都須要知道NameNode的地址。DataNode結點會先在NameNode上註冊,這樣它們的數據才能夠被使用。獨立的客戶端程序經過這個URI跟DataNode交互,以取得文件的塊列表。hadoop.tmp.dir
是hadoop文件系統依賴的基礎配置,不少路徑都依賴它。若是hdfs-site.xml中不配置namenode和datanode的存放位置,默認就放在/tmp/hadoop-${user.name}
這個路徑中更多說明請參考core-default.xml,包含配置文件全部配置項的說明和默認值。瀏覽器
hdfs-site.xml
:$ sudo gvim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
經常使用配置項說明:安全
dfs.replication
它決定着系統裏面的文件塊的數據備份個數。對於一個實際的應用,它應該被設爲3(這個數字並無上限,但更多的備份可能並無做用,並且會佔用更多的空間)。少於三個的備份,可能會影響到數據的可靠性(系統故障時,也許會形成數據丟失)dfs.data.dir
這是DataNode結點被指定要存儲數據的本地文件系統路徑。DataNode結點上的這個路徑沒有必要徹底相同,由於每臺機器的環境極可能是不同的。但若是每臺機器上的這個路徑都是統一配置的話,會使工做變得簡單一些。默認的狀況下,它的值爲file://${hadoop.tmp.dir}/dfs/data
這個路徑只能用於測試的目的,由於它極可能會丟失掉一些數據。因此這個值最好仍是被覆蓋。dfs.name.dir
這是NameNode結點存儲hadoop文件系統信息的本地系統路徑。這個值只對NameNode有效,DataNode並不須要使用到它。上面對於/temp類型的警告,一樣也適用於這裏。在實際應用中,它最好被覆蓋掉。更多說明請參考hdfs-default.xml,包含配置文件全部配置項的說明和默認值。數據結構
mapred-site.xml
:$ sudo cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml $ sudo gvim /usr/local/hadoop/etc/hadoop/mapred-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
經常使用配置項說明:編輯器
mapred.job.tracker
JobTracker的主機(或者IP)和端口。更多說明請參考mapred-default.xml,包含配置文件全部配置項的說明和默認值
yarn-site.xml
:<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
經常使用配置項說明:
yarn.nodemanager.aux-services
經過該配置,用戶能夠自定義一些服務更多說明請參考yarn-default.xml,包含配置文件全部配置項的說明和默認值
hadoop-env.sh
:$ sudo vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
修改 JAVA_HOME 以下:
這樣簡單的僞分佈式模式就配置好了。
在使用hadoop前,必須格式化一個全新的HDFS安裝,經過建立存儲目錄和NameNode持久化數據結構的初始版本,格式化過程建立了一個空的文件系統。因爲NameNode管理文件系統的元數據,而DataNode能夠動態的加入或離開集羣,所以這個格式化過程並不涉及DataNode。同理,用戶也無需關注文件系統的規模。集羣中DataNode的數量決定着文件系統的規模。DataNode能夠在文件系統格式化以後的很長一段時間內按需增長。
$ su hadoop
$ hadoop namenode -format
會輸出以下信息,則表格式化HDFS成功:
DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = [你的主機名]/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.4.1 ... ... INFO util.ExitUtil: Exiting with status 0 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at [你的主機名]/127.0.0.1 ************************************************************/
$ hadoop-daemon.sh start namenode $ hadoop-daemon.sh start datanode
或者一次啓動
$ start-dfs.sh
輸出以下(能夠看出分別啓動了namenode, datanode, secondarynamenode,由於咱們沒有配置secondarynamenode,因此地址爲0.0.0.0):
Starting namenodes on [] hadoop@localhost's password: localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-G470.out hadoop@localhost's password: localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-G470.out localhost: OpenJDK 64-Bit Server VM warning: You have loaded library /usr/local/hadoop/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now. localhost: It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'. Starting secondary namenodes [0.0.0.0] hadoop@0.0.0.0's password: 0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-G470.out
$ yarn-daemon.sh start resourcemanager $ yarn-daemon.sh start nodemanager
或者一次啓動:
$ start-yarn.sh
打開瀏覽器
http://localhost:8088
進入ResourceManager管理頁面http://localhost:50070
進入HDFS頁面啓動僞分佈後,若是活躍節點顯示爲零,說明僞分佈沒有真正的啓動。緣由是有的時候數據結構出現問題會形成沒法啓動datanode。若是使用hadoop namenode -format
從新格式化仍然沒法正常啓動,緣由是/tmp
中的文件沒有清除,則須要先清除/tmp/hadoop/*
再執行格式化,便可解決hadoop datanode沒法啓動的問題。具體步驟以下所示:
# 刪除hadoop:/tmp $ hadoop fs -rmr /tmp # 中止hadoop $ stop-all.sh # 刪除/tmp/hadoop* $ rm -rf /tmp/hadoop* # 格式化 $ hadoop namenode -format # 啓動hadoop $ start-all.sh
測試驗證仍是使用上一節的 WordCount。
不一樣的是,此次是僞分佈模式,使用到了 hdfs,所以咱們須要把文件拷貝到 hdfs 上去。
首先建立相關文件夾(要一步一步的建立):
$ hadoop dfs -mkdir /user $ hadoop dfs -mkdir /user/hadoop $ hadoop dfs -mkdir /user/hadoop/input
先將文件拷貝到 hdfs 上:
$ hadoop dfs -put /etc/protocols /user/hadoop/input
# 若是存在上一次測試生成的output,因爲hadoop的安全機制,直接運行可能會報錯,因此請手動刪除上一次生成的output文件夾 $ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.6.0-sources.jar org.apache.hadoop.examples.WordCount input output
執行過程截圖(部分):
$ hadoop dfs -cat /user/hadoop/output/*
輸入命令
$ hadoop-daemon.sh stop namenode $ hadoop-daemon.sh stop datanode $ yarn-daemon.sh stop resourcemanager $ yarn-daemon.sh stop nodemanager
或者
$ stop-dfs.sh $ stop-yarn.sh
最後一步:點擊屏幕上方的「實驗截圖」將上述命令執行後的截圖保存並分享給朋友們吧,這是你學習Hadoop安裝的證實。
本實驗講解如何在單機模式下繼續部署Hadoop爲僞分佈模式。
僞分佈模式和單機模式配置上的區別主要是哪些?是否能夠推論出如何部署真實的分佈式Hadoop環境?