Hadoop安裝教程_單機/僞分佈式配置_CentOS6.4/Hadoop2.6.0

Hadoop安裝教程_單機/僞分佈式配置_CentOS6.4/Hadoop2.6.0

本教程適合於在 CentOS 6.x 系統中安裝原生 Hadoop 2,適用於Hadoop 2.7.1, Hadoop 2.6.0 等版本,主要參考了官方安裝教程,步驟詳細,輔以適當說明,相信按照步驟來,都能順利在 CentOS 中安裝並運行 Hadoop。本 Hadoop 教程由給力星出品,轉載請註明。html

 

環境

本教程使用 CentOS 6.4 32位 做爲系統環境,請自行安裝系統。若是用的是 Ubuntu 系統,請查看相應的 Ubuntu安裝Hadoop教程java

本教程基於原生 Hadoop 2,在 Hadoop 2.6.0 (stable) 版本下驗證經過,可適合任何 Hadoop 2.x.y 版本,例如 Hadoop 2.7.1, Hadoop 2.4.1等。node

Hadoop版本

Hadoop 有兩個主要版本,Hadoop 1.x.y 和 Hadoop 2.x.y 系列,比較老的教材上用的多是 0.20 這樣的版本。Hadoop 2.x 版本在不斷更新,本教程都可適用。若是需安裝 0.20,1.2.1這樣的版本,本教程也能夠做爲參考,主要差異在於配置項,配置請參考官網教程或其餘教程。linux

新版是兼容舊版的,書上舊版本的代碼應該可以正常運行(我本身沒驗證,歡迎驗證反饋)。正則表達式

裝好了 CentOS 系統以後,在安裝 Hadoop 前還須要作一些必備工做。shell

建立hadoop用戶

若是你安裝 CentOS 的時候不是用的 「hadoop」 用戶,那麼須要增長一個名爲 hadoop 的用戶。apache

首先點擊左上角的 「應用程序」 -> 「系統工具」 -> 「終端」,首先在終端中輸入 su ,按回車,輸入 root 密碼以 root 用戶登陸,接着執行命令建立新用戶 hadoop:vim

  1. su # 上述提到的以 root 用戶登陸
  2. useradd -m hadoop -s /bin/bash # 建立新用戶hadoop
Shell 命令

以下圖所示,這條命令建立了能夠登錄的 hadoop 用戶,並使用 /bin/bash 做爲shell。瀏覽器

CentOS建立hadoop用戶CentOS建立hadoop用戶bash

接着使用以下命令修改密碼,按提示輸入兩次密碼,可簡單的設爲 「hadoop」(密碼隨意指定,若提示「無效的密碼,過於簡單」則再次輸入確認就行):

  1. passwd hadoop
Shell 命令

可爲 hadoop 用戶增長管理員權限,方便部署,避免一些對新手來講比較棘手的權限問題,執行:

  1. visudo
Shell 命令

以下圖,找到 root ALL=(ALL) ALL 這行(應該在第98行,能夠先按一下鍵盤上的 ESC 鍵,而後輸入 :98 (按一下冒號,接着輸入98,再按回車鍵),能夠直接跳到第98行 ),而後在這行下面增長一行內容:hadoop ALL=(ALL) ALL (當中的間隔爲tab),以下圖所示:

爲hadoop增長sudo權限爲hadoop增長sudo權限

添加好內容後,先按一下鍵盤上的 ESC 鍵,而後輸入 :wq (輸入冒號還有wq,這是vi/vim編輯器的保存方法),再按回車鍵保存退出就能夠了。

最後註銷當前用戶(點擊屏幕右上角的用戶名,選擇退出->註銷),在登錄界面使用剛建立的 hadoop 用戶進行登錄。(若是已是 hadoop 用戶,且在終端中使用 su 登陸了 root 用戶,那麼須要執行 exit 退出 root 用戶狀態)

準備工做

使用 hadoop 用戶登陸後,還須要安裝幾個軟件才能安裝 Hadoop。

CentOS 使用 yum 來安裝軟件,須要聯網環境,首先應檢查一下是否連上了網絡。以下圖所示,桌面右上角的網絡圖標若顯示紅叉,則代表還未聯網,應點擊選擇可用網絡。

檢查是否聯網檢查是否聯網

鏈接網絡後,須要安裝 SSH 和 Java。

安裝SSH、配置SSH無密碼登錄

集羣、單節點模式都須要用到 SSH 登錄(相似於遠程登錄,你能夠登陸某臺 Linux 主機,而且在上面運行命令),通常狀況下,CentOS 默認已安裝了 SSH client、SSH server,打開終端執行以下命令進行檢驗:

  1. rpm -qa | grep ssh
Shell 命令

若是返回的結果以下圖所示,包含了 SSH client 跟 SSH server,則不須要再安裝。

檢查是否安裝了SSH檢查是否安裝了SSH

若須要安裝,則能夠經過 yum 進行安裝(安裝過程當中會讓你輸入 [y/N],輸入 y 便可):

  1. sudo yum install openssh-clients
  2. sudo yum install openssh-server
Shell 命令

接着執行以下命令測試一下 SSH 是否可用:

  1. ssh localhost
Shell 命令

此時會有以下提示(SSH首次登錄提示),輸入 yes 。而後按提示輸入密碼 hadoop,這樣就登錄到本機了。

測試SSH是否可用測試SSH是否可用

但這樣登錄是須要每次輸入密碼的,咱們須要配置成SSH無密碼登錄比較方便。

首先輸入 exit 退出剛纔的 ssh,就回到了咱們原先的終端窗口,而後利用 ssh-keygen 生成密鑰,並將密鑰加入到受權中:

  1. exit # 退出剛纔的 ssh localhost
  2. cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
  3. ssh-keygen -t rsa # 會有提示,都按回車就能夠
  4. cat id_rsa.pub >> authorized_keys # 加入受權
  5. chmod 600 ./authorized_keys # 修改文件權限
Shell 命令
~的含義

在 Linux 系統中,~ 表明的是用戶的主文件夾,即 「/home/用戶名」 這個目錄,如你的用戶名爲 hadoop,則 ~ 就表明 「/home/hadoop/」。 此外,命令中的 # 後面的文字是註釋。

此時再用 ssh localhost 命令,無需輸入密碼就能夠直接登錄了,以下圖所示。

SSH無密碼登陸SSH無密碼登陸

安裝Java環境

Java 環境可選擇 Oracle 的 JDK,或是 OpenJDK,如今通常 Linux 系統默認安裝的基本是 OpenJDK,如 CentOS 6.4 就默認安裝了 OpenJDK 1.7。按 http://wiki.apache.org/hadoop/HadoopJavaVersions 中說的,Hadoop 在 OpenJDK 1.7 下運行是沒問題的。須要注意的是,CentOS 6.4 中默認安裝的只是 Java JRE,而不是 JDK,爲了開發方便,咱們仍是須要經過 yum 進行安裝 JDK,安裝過程當中會讓輸入 [y/N],輸入 y 便可:

  1. sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
Shell 命令

經過上述命令安裝 OpenJDK,默認安裝位置爲 /usr/lib/jvm/java-1.7.0-openjdk(該路徑能夠經過執行 rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac' 命令肯定,執行後會輸出一個路徑,除去路徑末尾的 「/bin/javac」,剩下的就是正確的路徑了)。OpenJDK 安裝後就能夠直接使用 java、javac 等命令了。

接着須要配置一下 JAVA_HOME 環境變量,爲方便,咱們在 ~/.bashrc 中進行設置(擴展閱讀: 設置Linux環境變量的方法和區別):

  1. vim ~/.bashrc
Shell 命令

在文件最後面添加以下單獨一行(指向 JDK 的安裝位置),並保存:

  1. export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk
Shell

以下圖所示:

設置JAVA_HOME環境變量設置JAVA_HOME環境變量

接着還須要讓該環境變量生效,執行以下代碼:

  1. source ~/.bashrc # 使變量設置生效
Shell 命令

設置好後咱們來檢驗一下是否設置正確:

  1. echo $JAVA_HOME # 檢驗變量值
  2. java -version
  3. $JAVA_HOME/bin/java -version # 與直接執行 java -version 同樣
Shell 命令

若是設置正確的話,$JAVA_HOME/bin/java -version 會輸出 java 的版本信息,且和 java -version 的輸出結果同樣,以下圖所示:

成功設置JAVA_HOME環境變量成功設置JAVA_HOME環境變量

這樣,Hadoop 所需的 Java 運行環境就安裝好了。

安裝 Hadoop 2

Hadoop 2 能夠經過 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下載,本教程選擇的是 2.6.0 版本,下載時請下載 hadoop-2.x.y.tar.gz 這個格式的文件,這是編譯好的,另外一個包含 src 的則是 Hadoop 源代碼,須要進行編譯纔可以使用。

下載時強烈建議也下載 hadoop-2.x.y.tar.gz.mds 這個文件,該文件包含了檢驗值可用於檢查 hadoop-2.x.y.tar.gz 的完整性,不然若文件發生了損壞或下載不完整,Hadoop 將沒法正常運行。

本文涉及的文件均經過瀏覽器下載,默認保存在 「下載」 目錄中(若不是請自行更改 tar 命令的相應目錄)。另外,若是你用的不是 2.6.0 版本,則將全部命令中出現的 2.6.0 更改成你所使用的版本。

  1. cat ~/下載/hadoop-2.6.0.tar.gz.mds | grep 'MD5' # 列出md5檢驗值
  2. # head -n 6 ~/下載/hadoop-2.7.1.tar.gz.mds # 2.7.1版本格式變了,能夠用這種方式輸出
  3. md5sum ~/下載/hadoop-2.6.0.tar.gz | tr "a-z" "A-Z" # 計算md5值,並轉化爲大寫,方便比較
Shell 命令

若文件不完整則這兩個值通常差異很大,能夠簡單對比下前幾個字符跟後幾個字符是否相等便可,以下圖所示,若是兩個值不同,請務必從新下載。

檢驗文件完整性檢驗文件完整性

咱們選擇將 Hadoop 安裝至 /usr/local/ 中:

  1. sudo tar -zxf ~/下載/hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中
  2. cd /usr/local/
  3. sudo mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改成hadoop
  4. sudo chown -R hadoop:hadoop ./hadoop # 修改文件權限
Shell 命令

Hadoop 解壓後便可使用。輸入以下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:

  1. cd /usr/local/hadoop
  2. ./bin/hadoop version
Shell 命令
相對路徑與絕對路徑的區別

請務必注意命令中的相對路徑與絕對路徑,本文後續出現的 ./bin/..../etc/... 等包含 ./ 的路徑,均爲相對路徑,以 /usr/local/hadoop 爲當前目錄。例如在 /usr/local/hadoop 目錄中執行 ./bin/hadoop version 等同於執行 /usr/local/hadoop/bin/hadoop version。能夠將相對路徑改爲絕對路徑來執行,但若是你是在主文件夾 ~ 中執行 ./bin/hadoop version,執行的會是 /home/hadoop/bin/hadoop version,就不是咱們所想要的了。

Hadoop單機配置(非分佈式)

Hadoop 默認模式爲非分佈式模式,無需進行其餘配置便可運行。非分佈式即單 Java 進程,方便進行調試。

如今咱們能夠執行例子來感覺下 Hadoop 的運行。Hadoop 附帶了豐富的例子(運行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 能夠看到全部例子),包括 wordcount、terasort、join、grep 等。

在此咱們選擇運行 grep 例子,咱們將 input 文件夾中的全部文件做爲輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞並統計出現的次數,最後輸出結果到 output 文件夾中。

  1. cd /usr/local/hadoop
  2. mkdir ./input
  3. cp ./etc/hadoop/*.xml ./input # 將配置文件做爲輸入文件
  4. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
  5. cat ./output/* # 查看運行結果
Shell 命令

若運行出錯,如出現以下圖提示:

運行Hadoop實例時可能會報錯運行Hadoop實例時可能會報錯

若出現提示 「WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable」,該 WARN 提示能夠忽略,不會影響 Hadoop 正常運行(可經過編譯 Hadoop 源碼解決,解決方法請自行搜索)。

若出現提示 「INFO metrics.MetricsUtil: Unable to obtain hostName java.net.UnknowHostException」,這須要執行以下命令修改 hosts 文件,爲你的主機名增長IP映射:

  1. sudo vim /etc/hosts
Shell 命令

主機名在終端窗口標題裏能夠看到,或執行命令 hostname 查看,以下圖所示,在最後面增長一行 「127.0.0.1 dblab」:

設置主機名的IP映射設置主機名的IP映射

保存文件後,從新運行 hadoop 實例,若執行成功的話會輸出不少做業的相關信息,最後的輸出信息以下圖所示。做業的結果會輸出在指定的 output 文件夾中,經過命令 cat ./output/* 查看結果,符合正則的單詞 dfsadmin 出現了1次:

Hadoop例子輸出結果Hadoop例子輸出結果

注意,Hadoop 默認不會覆蓋結果文件,所以再次運行上面實例會提示出錯,須要先將 ./output 刪除。

  1. rm -r ./output
Shell 命令

Hadoop僞分佈式配置

Hadoop 能夠在單節點上以僞分佈式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既做爲 NameNode 也做爲 DataNode,同時,讀取的是 HDFS 中的文件。

在設置 Hadoop 僞分佈式配置前,咱們還須要設置 HADOOP 環境變量,執行以下命令在 ~/.bashrc 中設置:

  1. gedit ~/.bashrc
Shell 命令

此次咱們選擇用 gedit 而不是 vim 來編輯。gedit 是文本編輯器,相似於 Windows 中的記事本,會比較方便。保存後記得關掉整個 gedit 程序,不然會佔用終端。在文件最後面增長以下內容:

  1. # Hadoop Environment Variables
  2. export HADOOP_HOME=/usr/local/hadoop
  3. export HADOOP_INSTALL=$HADOOP_HOME
  4. export HADOOP_MAPRED_HOME=$HADOOP_HOME
  5. export HADOOP_COMMON_HOME=$HADOOP_HOME
  6. export HADOOP_HDFS_HOME=$HADOOP_HOME
  7. export YARN_HOME=$HADOOP_HOME
  8. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  9. export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
Shell

保存後,不要忘記執行以下命令使配置生效:

  1. source ~/.bashrc
Shell 命令

這些變量在啓動 Hadoop 進程時須要用到,不設置的話可能會報錯(這些變量也能夠經過修改 ./etc/hadoop/hadoop-env.sh 實現)。

Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/ 中,僞分佈式須要修改2個配置文件 core-site.xmlhdfs-site.xml 。Hadoop的配置文件是 xml 格式,每一個配置以聲明 property 的 name 和 value 的方式來實現。

修改配置文件 core-site.xml (經過 gedit 編輯會比較方便: gedit ./etc/hadoop/core-site.xml),將當中的

  1. <configuration>
  2. </configuration>
XML

修改成下面配置:

  1. <configuration>
  2. <property>
  3. <name>hadoop.tmp.dir</name>
  4. <value>file:/usr/local/hadoop/tmp</value>
  5. <description>Abase for other temporary directories.</description>
  6. </property>
  7. <property>
  8. <name>fs.defaultFS</name>
  9. <value>hdfs://localhost:9000</value>
  10. </property>
  11. </configuration>
XML

一樣的,修改配置文件 hdfs-site.xml

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  13. </property>
  14. </configuration>
XML

配置完成後,執行 NameNode 的格式化:

  1. ./bin/hdfs namenode -format
Shell 命令

成功的話,會看到 「successfully formatted」 和 「Exitting with status 0」 的提示,若爲 「Exitting with status 1」 則是出錯。

執行NameNode格式化執行NameNode格式化

接着開啓 NaneNodeDataNode 守護進程:

  1. ./sbin/start-dfs.sh
Shell 命令

若出現以下 SSH 的提示 「Are you sure you want to continue connecting」,輸入 yes 便可。

首次啓動Hadoop時的SSH提示首次啓動Hadoop時的SSH提示

啓動時可能會有 WARN 提示 「WARN util.NativeCodeLoader…」 如前面提到的,這個提示不會影響正常使用。

啓動完成後,能夠經過命令 jps 來判斷是否成功啓動,若成功啓動則會列出以下進程: 「NameNode」、」DataNode」和SecondaryNameNode(若是 SecondaryNameNode 沒有啓動,請運行 sbin/stop-dfs.sh 關閉進程,而後再次嘗試啓動嘗試)。若是沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查以前步驟,或經過查看啓動日誌排查緣由。

經過jps查看啓動的Hadoop進程經過jps查看啓動的Hadoop進程

經過查看啓動日誌分析啓動失敗緣由

有時 Hadoop 沒法正確啓動,如 NameNode 進程沒有順利啓動,這時能夠查看啓動日誌來排查緣由,注意幾點:

  • 啓動時會提示形如 「dblab: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-dblab.out」,其中 dblab 對應你的主機名,但啓動的日誌信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-dblab.log 中,因此應該查看這個後綴爲 .log 的文件;
  • 每一次的啓動日誌都是追加在日誌文件以後,因此得拉到最後面看,看下記錄的時間就知道了。
  • 通常出錯的提示在最後面,也就是寫着 Fatal、Error 或者 Java Exception 的地方。
  • 能夠在網上搜索一下出錯信息,看可否找到一些相關的解決方法。

成功啓動後,能夠訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還能夠在線查看 HDFS 中的文件。

Hadopp的Web界面Hadopp的Web界面

運行Hadoop僞分佈式實例

上面的單機模式,grep 例子讀取的是本地數據,僞分佈式讀取的則是 HDFS 上的數據。要使用 HDFS,首先須要在 HDFS 中建立用戶目錄:

  1. ./bin/hdfs dfs -mkdir -p /user/hadoop
Shell 命令

接着將 ./etc/hadoop 中的 xml 文件做爲輸入文件複製到分佈式文件系統中,即將 /usr/local/hadoop/etc/hadoop 複製到分佈式文件系統中的 /user/hadoop/input 中。咱們使用的是 hadoop 用戶,而且已建立相應的用戶目錄 /user/hadoop ,所以在命令中就可使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:

  1. ./bin/hdfs dfs -mkdir input
  2. ./bin/hdfs dfs -put ./etc/hadoop/*.xml input
Shell 命令

複製完成後,能夠經過以下命令查看 HDFS 中的文件列表:

  1. ./bin/hdfs dfs -ls input
Shell 命令

僞分佈式運行 MapReduce 做業的方式跟單機模式相同,區別在於僞分佈式讀取的是HDFS中的文件(能夠將單機步驟中建立的本地 input 文件夾,輸出結果 output 文件夾都刪掉來驗證這一點)。

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

查看運行結果的命令(查看的是位於 HDFS 中的輸出結果):

  1. ./bin/hdfs dfs -cat output/*
Shell 命令

結果以下,注意到剛纔咱們已經更改了配置文件,因此運行結果不一樣。

Hadoop僞分佈式運行grep的結果Hadoop僞分佈式運行grep的結果

咱們也能夠將運行結果取回到本地:

  1. rm -r ./output # 先刪除本地的 output 文件夾(若是存在)
  2. ./bin/hdfs dfs -get output ./output # 將 HDFS 上的 output 文件夾拷貝到本機
  3. cat ./output/*
Shell 命令

Hadoop 運行程序時,輸出目錄不能存在,不然會提示錯誤 「org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists」 ,所以若要再次執行,須要執行以下命令刪除 output 文件夾:

  1. ./bin/hdfs dfs -rm -r output # 刪除 output 文件夾
Shell 命令
運行程序時,輸出目錄不能存在

運行 Hadoop 程序時,爲了防止覆蓋結果,程序指定的輸出目錄(如 output)不能存在,不然會提示錯誤,所以運行前須要先刪除輸出目錄。在實際開發應用程序時,可考慮在程序中加上以下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操做:

  1. Configuration conf = new Configuration();
  2. Job job = new Job(conf);
  3.  
  4. /* 刪除輸出目錄 */
  5. Path outputPath = new Path(args[1]);
  6. outputPath.getFileSystem(conf).delete(outputPath, true);
Java

若要關閉 Hadoop,則運行

  1. ./sbin/stop-dfs.sh
Shell 命令
注意

下次啓動 hadoop 時,無需進行 NameNode 的初始化,只須要運行 ./sbin/start-dfs.sh 就能夠!

啓動YARN

(僞分佈式不啓動 YARN 也能夠,通常不會影響程序執行)

有的讀者可能會疑惑,怎麼啓動 Hadoop 後,見不到書上所說的 JobTracker 和 TaskTracker,這是由於新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也稱爲 YARN,Yet Another Resource Negotiator)。

YARN 是從 MapReduce 中分離出來的,負責資源管理與任務調度。YARN 運行於 MapReduce 之上,提供了高可用性、高擴展性,YARN 的更多介紹在此不展開,有興趣的可查閱相關資料。

上述經過 ./sbin/start-dfs.sh 啓動 Hadoop,僅僅是啓動了 MapReduce 環境,咱們能夠啓動 YARN ,讓 YARN 來負責資源管理與任務調度。

首先修改配置文件 mapred-site.xml,這邊須要先進行重命名:

  1. mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
Shell 命令

而後再進行編輯,一樣使用 gedit 編輯會比較方便些 gedit ./etc/hadoop/mapred-site.xml

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. </configuration>
XML

接着修改配置文件 yarn-site.xml

  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. </configuration>
XML

而後就能夠啓動 YARN 了(須要先執行過 ./sbin/start-dfs.sh):

  1. ./sbin/start-yarn.sh $ 啓動YARN
  2. ./sbin/mr-jobhistory-daemon.sh start historyserver # 開啓歷史服務器,才能在Web中查看任務運行狀況
Shell 命令

開啓後經過 jps 查看,能夠看到多了 NodeManager 和 ResourceManager 兩個後臺進程,以下圖所示。

開啓YARN開啓YARN

啓動 YARN 以後,運行實例的方法仍是同樣的,僅僅是資源管理方式、任務調度不一樣。觀察日誌信息能夠發現,不啓用 YARN 時,是 「mapred.LocalJobRunner」 在跑任務,啓用 YARN 以後,是 「mapred.YARNRunner」 在跑任務。啓動 YARN 有個好處是能夠經過 Web 界面查看任務的運行狀況:http://localhost:8088/cluster,以下圖所示。

開啓YARN後能夠查看任務運行信息開啓YARN後能夠查看任務運行信息

但 YARN 主要是爲集羣提供更好的資源管理與任務調度,然而這在單機上體現不出價值,反而會使程序跑得稍慢些。所以在單機上是否開啓 YARN 就看實際狀況了。

不啓動 YARN 需重命名 mapred-site.xml

若是不想啓動 YARN,務必把配置文件 mapred-site.xml 重命名,改爲 mapred-site.xml.template,須要用時改回來就行。不然在該配置文件存在,而未開啓 YARN 的狀況下,運行程序會提示 「Retrying connect to server: 0.0.0.0/0.0.0.0:8032」 的錯誤,這也是爲什麼該配置文件初始文件名爲 mapred-site.xml.template。

一樣的,關閉 YARN 的腳本以下:

  1. ./sbin/stop-yarn.sh
  2. ./sbin/mr-jobhistory-daemon.sh stop historyserver
Shell 命令

自此,你已經掌握 Hadoop 的配置和基本使用了。

附加教程: 配置PATH環境變量

在這裏額外講一下 PATH 這個環境變量(可執行 echo $PATH 查看,當中包含了多個目錄)。例如咱們在主文件夾 ~ 中執行 ls 這個命令時,實際執行的是 /bin/ls 這個程序,而不是 ~/ls 這個程序。系統是根據 PATH 這個環境變量中包含的目錄位置,逐一進行查找,直至在這些目錄位置下找到匹配的程序(若沒有匹配的則提示該命令不存在)。

上面的教程中,咱們都是先進入到 /usr/local/hadoop 目錄中,再執行 ./sbin/hadoop,實際上等同於運行 /usr/local/hadoop/sbin/hadoop。咱們能夠將 Hadoop 命令的相關目錄加入到 PATH 環境變量中,這樣就能夠直接經過 start-dfs.sh 開啓 Hadoop,也能夠直接經過 hdfs 訪問 HDFS 的內容,方便平時的操做。

在前面咱們設置 HADOOP 環境變量時,咱們已經順便設置了 PATH 變量(即 「export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin」),那麼之後咱們在任意目錄中均可以直接經過執行 start-dfs.sh 來啓動 Hadoop 或者執行 hdfs dfs -ls input 查看 HDFS 文件了,讀者不妨如今就執行 hdfs dfs -ls input 試試看。

安裝Hadoop集羣

在平時的學習中,咱們使用僞分佈式就足夠了。若是須要安裝 Hadoop 集羣,請查看Hadoop集羣安裝配置教程

相關文章
相關標籤/搜索