【轉】Hadoop安裝教程_單機/偽分散式配置_Hadoop2.6.0/Ubuntu14.04

来源:http://www.cnblogs.com/lr-ting/archive/2016/01/16/5136620.html
-Advertisement-
Play Games

原文鏈接:http://dblab.xmu.edu.cn/blog/install-hadoop/當開始著手實踐 Hadoop 時,安裝 Hadoop 往往會成為新手的一道門檻。儘管安裝其實很簡單,書上有寫到,官方網站也有 Hadoop 安裝配置教程,但由於對 Linux 環境不熟悉,書上跟官網上簡...


原文鏈接:http://dblab.xmu.edu.cn/blog/install-hadoop/

當開始著手實踐 Hadoop 時,安裝 Hadoop 往往會成為新手的一道門檻。儘管安裝其實很簡單,書上有寫到,官方網站也有 Hadoop 安裝配置教程,但由於對 Linux 環境不熟悉,書上跟官網上簡略的安裝步驟新手往往 Hold 不住。加上網上不少教程也甚是坑,導致新手摺騰老幾天愣是沒裝好,很是打擊學習熱情。

本教程由廈門大學資料庫實驗室出品,轉載請註明。本教程適合於原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要參考了官方安裝教程,步驟詳細,輔以適當說明,相信按照步驟來,都能順利安裝並運行Hadoop。另外有Hadoop安裝配置簡略版方便有基礎的讀者快速完成安裝。此外,希望讀者們能多去瞭解一些 Linux 的知識,以後出現問題時才能自行解決。

 

環境

本教程使用 Ubuntu 14.04 64位 作為系統環境(Ubuntu 12.04 也行,32位、64位均可),請自行安裝系統(可參考使用VirtualBox安裝Ubuntu)。

如果用的是 CentOS/RedHat 系統,請查看相應的CentOS安裝Hadoop教程_單機偽分散式配置

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

使用本教程請確保系統處於聯網狀態下,部分高校使用星網銳捷連接網路,可能導致虛擬機無法聯網,那麼建議您使用雙系統安裝ubuntu,然後再使用本教程!

Hadoop版本

Hadoop 有兩個主要版本,Hadoop 1.x.y 和 Hadoop 2.x.y 系列,比較老的教材上用的可能是 0.20 這樣的版本。Hadoop 2.x 版本在不斷更新,本教程均可適用。如果需安裝 0.20,1.2.1這樣的版本,本教程也可以作為參考,主要差別在於配置項,配置請參考官網教程或其他教程。

新版是相容舊版的,書上舊版本的代碼應該能夠正常運行(我自己沒驗證,歡迎驗證反饋)。

裝好了 Ubuntu 系統之後,在安裝 Hadoop 前還需要做一些必備工作。

創建hadoop用戶

如果你安裝 Ubuntu 的時候不是用的 “hadoop” 用戶,那麼需要增加一個名為 hadoop 的用戶。

首先按 ctrl+alt+t 打開終端視窗,輸入如下命令創建新用戶 :

  1. sudo useradd -m hadoop -s /bin/bash

這條命令創建了可以登陸的 hadoop 用戶,並使用 /bin/bash 作為 shell。

sudo命令

本文中會大量使用到sudo命令。sudo是ubuntu中一種許可權管理機制,管理員可以授權給一些普通用戶去執行一些需要root許可權執行的操作。當使用sudo命令時,就需要輸入您當前用戶的密碼.

密碼

在Linux的終端中輸入密碼,終端是不會顯示任何你當前輸入的密碼,也不會提示你已經輸入了多少字元密碼。而在windows系統中,輸入密碼一般都會以“*”表示你輸入的密碼字元

輸入法中英文切換

ubuntu中終端輸入的命令一般都是使用英文輸入。linux中英文的切換方式是使用鍵盤“shift”鍵來切換,也可以點擊頂部菜單的輸入法按鈕進行切換。

Ubuntu終端複製粘貼快捷鍵

在Ubuntu終端視窗中,複製粘貼的快捷鍵需要加上 shift,即粘貼是 ctrl+shift+v。

接著使用如下命令設置密碼,可簡單設置為 hadoop,按提示輸入兩次密碼:

  1. sudo passwd hadoop

可為 hadoop 用戶增加管理員許可權,方便部署,避免一些對新手來說比較棘手的許可權問題:

  1. sudo adduser hadoop sudo

最後註銷當前用戶(點擊屏幕右上角的齒輪,選擇註銷),返回登陸界面。在登陸界面中選擇剛創建的 hadoop 用戶進行登陸。

更新apt

用 hadoop 用戶登錄後,我們先更新一下 apt,後續我們使用 apt 安裝軟體,如果沒更新可能有一些軟體安裝不了。按 ctrl+alt+t 打開終端視窗,執行如下命令:

  1. sudo apt-get update

若出現如下 “Hash校驗和不符” 的提示,可通過更改軟體源來解決。若沒有該問題,則不需要更改。從軟體源下載某些軟體的過程中,可能由於網路方面的原因出現沒法下載的情況,那麼建議更改軟體源。在學習Hadoop過程中,即使出現“Hash校驗和不符”的提示,也不會影響Hadoop的安裝。

Ubuntu更新軟體源時遇到Hash校驗和不符的問題Ubuntu更新軟體源時遇到Hash校驗和不符的問題

後續需要更改一些配置文件,我比較喜歡用的是 vim(vi增強版,基本用法相同),建議安裝一下(如果你實在還不會用 vi/vim 的,請將後面用到 vim 的地方改為 gedit,這樣可以使用文本編輯器進行修改,並且每次文件更改完成後請關閉整個 gedit 程式,否則會占用終端):

  1. sudo apt-get install vim

安裝軟體時若需要確認,在提示處輸入 y 即可。

通過命令行安裝軟體通過命令行安裝軟體

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

集群、單節點模式都需要用到 SSH 登陸(類似於遠程登陸,你可以登錄某台 Linux 主機,並且在上面運行命令),Ubuntu 預設已安裝了 SSH client,此外還需要安裝 SSH server:

  1. sudo apt-get install openssh-server

安裝後,可以使用如下命令登陸本機:

  1. ssh localhost

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

SSH首次登陸提示SSH首次登陸提示

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

首先退出剛纔的 ssh,就回到了我們原先的終端視窗,然後利用 ssh-keygen 生成密鑰,並將密鑰加入到授權中:

  1. exit # 退出剛纔的 ssh localhost
  2. cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
  3. ssh-keygen -t rsa # 會有提示,都按回車就可以
  4. cat ./id_rsa.pub >> ./authorized_keys # 加入授權
~的含義

在 Linux 系統中,~ 代表的是用戶的主文件夾,即 “/home/用戶名” 這個目錄,如你的用戶名為 hadoop,則 ~ 就代表 “/home/hadoop/”。 此外,命令中的 # 後面的文字是註釋,只需要輸入前面命令即可。

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

SSH無密碼登錄SSH無密碼登錄

安裝Java環境

Java環境可選擇 Oracle 的 JDK,或是 OpenJDK,按http://wiki.apache.org/hadoop/HadoopJavaVersions中說的,新版本在 OpenJDK 1.7 下是沒問題的。為圖方便,這邊直接通過命令安裝 OpenJDK 7。

  1. sudo apt-get install openjdk-7-jre openjdk-7-jdk

通過上述命令安裝 OpenJDK,預設安裝位置為 /usr/lib/jvm/java-7-openjdk-amd64(32位系統則是 /usr/lib/jvm/java-7-openjdk-i386,該路徑可以通過執行 dpkg -L openjdk-7-jdk | grep '/bin/javac' 命令確定,執行後會輸出一個路徑,除去路徑末尾的 “/bin/javac”,剩下的就是正確的路徑了)。OpenJDK 安裝後就可以直接使用 java、javac 等命令了。

接著需要配置一下 JAVA_HOME 環境變數,為方便,我們在 ~/.bashrc 中進行設置(擴展閱讀: 設置Linux環境變數的方法和區別):

  1. vim ~/.bashrc

在文件最前面添加如下單獨一行(註意 = 號前後不能有空格),並保存:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

如下圖所示(該文件原本可能不存在,內容為空,這不影響):

配置JAVA_HOME變數配置JAVA_HOME變數

接著還需要讓該環境變數生效,執行如下代碼:

  1. source ~/.bashrc # 使變數設置生效

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

  1. echo $JAVA_HOME # 檢驗變數值
  2. java -version
  3. $JAVA_HOME/bin/java -version # 與直接執行 java -version 一樣

如果設置正確的話,$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 源代碼,需要進行編譯才可使用。

截止到2015年12月9日,Hadoop官方網站已經更新到2.7.1版本。對於2.6.0以上版本的Hadoop,仍可以參照此教程學習,可放心下載官網最新版本的Hadoop。請用虛擬機中的Ubuntu自帶firefox瀏覽器訪問本指南,再點擊下麵的地址,才能把hadoop文件下載虛擬機ubuntu中。

hadoop-2.7.1下載地址

下載時強烈建議也下載 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值,並轉化為大寫,方便比較

若文件不完整則這兩個值一般差別很大,可以簡單對比下前幾個字元跟後幾個字元是否相等即可,如下圖所示,如果兩個值不一樣,請務必重新下載。

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

我們選擇將 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 # 修改文件許可權

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

  1. cd /usr/local/hadoop
  2. ./bin/hadoop version
相對路徑與絕對路徑

請務必註意命令中的相對路徑與絕對路徑,本文後續出現的 ./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/* # 查看運行結果

執行成功後如下所示,輸出了作業的相關信息,輸出的結果是符合正則的單詞 dfsadmin 出現了1次

Hadoop單機模式運行grep的輸出結果Hadoop單機模式運行grep的輸出結果

註意,Hadoop 預設不會覆蓋結果文件,因此再次運行上面實例會提示出錯,需要先將 ./output 刪除。

  1. rm -r ./output

Hadoop偽分散式配置

Hadoop 可以在單節點上以偽分散式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。

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

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

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

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

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

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

  1. ./bin/hdfs namenode -format

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

執行namenode格式化執行namenode格式化

接著開啟 NaneNode 和 DataNode 守護進程。
  1. ./sbin/start-dfs.sh

若出現如下SSH提示,輸入yes即可。

啟動Hadoop時的SSH提示啟動Hadoop時的SSH提示

啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,並不會影響正常使用。

啟動完成後,可以通過命令 jps 來判斷是否成功啟動,若成功啟動則會列出如下進程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 沒有啟動,請運行 sbin/stop-dfs.sh 關閉進程,然後再次嘗試啟動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過查看啟動日誌排查原因。

通過jps查看啟動的Hadoop進程通過jps查看啟動的Hadoop進程

通過查看啟動日誌分析啟動失敗原因

有時 Hadoop 無法正確啟動,如 NameNode 進程沒有順利啟動,這時可以查看啟動日誌來排查原因,註意幾點:

  • 啟動時會提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 對應你的機器名,但其實啟動日誌信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以應該查看這個尾碼為 .log 的文件;
  • 每一次的啟動日誌都是追加在日誌文件之後,所以得拉到最後面看,看下記錄的時間就知道了。
  • 一般出錯的提示在最後面,通常是寫著 Fatal、Error 或者 Java Exception 的地方。
  • 可以在網上搜索一下出錯信息,看能否找到一些相關的解決方法。

成功啟動後,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還可以線上查看 HDFS 中的文件。

Hadoop的Web界面Hadoop的Web界面

運行Hadoop偽分散式實例

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

  1. ./bin/hdfs dfs -mkdir -p /user/hadoop

接著將 ./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

複製完成後,可以通過如下命令查看文件列表:

  1. ./bin/hdfs dfs -ls input

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

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

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

  1. ./bin/hdfs dfs -cat output/*

結果如下,註意到剛纔我們已經更改了配置文件,所以運行結果不同。

Hadoop偽分散式運行grep結果Hadoop偽分散式運行grep結果

我們也可以將運行結果取回到本地:

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

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 文件夾
運行程式時,輸出目錄不能存在

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

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

若要關閉 Hadoop,則運行

  1. ./sbin/stop-dfs.sh
註意

下次啟動 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

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

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

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

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        </property>
</configuration>

然後就可以啟動 YARN 了(需要先執行過 ./sbin/start-dfs.sh):

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

開啟後通過 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

自此,你已經掌握 Hadoop 的配置和基本使用了。安裝好的Hadoop項目中已經包含了第三章的HDFS,繼續學習第3章HDFS文件系統,請參考如下學習指南:
大數據技術原理與應用 第三章 學習指南

附加教程: 配置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 的內容,方便平時的操作。

同樣我們選擇在 ~/.bashrc 中進行設置(vim ~/.bashrc,與 JAVA_HOME 的設置相似),在文件最前面加入如下單獨一行:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

添加後執行 source ~/.bashrc 使設置生效,生效後,在任意目錄中,都可以直接使用 hdfs 等命令了,讀者不妨現在就執行 hdfs dfs -ls input 查看 HDFS 文件試試看。

安裝Hadoop集群

在平時的學習中,我們使用偽分散式就足夠了。如果需要安裝 Hadoop 集群,請查看Hadoop集群安裝配置教程

相關教程

參考資料


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是微服務 微服務應用的一個最大的優點是,它們往往比傳統的應用程式更有效地利用計算資源。這是因為它們通過擴展組件來處理功能瓶頸問題。這樣一來,開發人員只需要為額外的組件部署計算資源,而不需要部署一個完整的應用程式的全新迭代。最終的結果是有更多的資源可以提供給其它任務。 • 一種軟體架構模式 • 復...
  • 10th Anniversary of jQueryToday marks the 10th anniversary of the release of jQuery...[原文]今天是jQuery發佈十周年. 那時還在上大學,我在2006年紐約的BarCamp上宣佈的。難以想象它會發展到今天這種程...
  • 幾個重要概念,完全是自己的理解。 文件流操作。具體來講就是用createReadStream來代替readFile,這樣做的原因就是讀文件時先要讀入緩衝區buffer,如果文件過大那麼需要的緩衝去也就很大,所以用stream 來代替 。stream大概的工作原理是分成小塊,然後傳輸。 Stream:...
  • 最近在看《Head First Ajax》,雖然書里代碼給的已經夠詳細了,但在手過一遍代碼時還是引發了一些知識點的思考和擴展。書還沒看完,這篇文章我打算是對於那本書邊看邊總結。 Ajax代碼思路 創建請求對象 配置請求對象併發送到伺服器 伺服器應答請求對象(1) 創建請求對象,作為和伺服器進行通訊的...
  • 正則基礎1、元字元 [擁有特殊含義的元字元] \d -> 匹配一個0-9的數字,相當於[0-9],和它相反的是\D ->匹配一個除了0-9的任意字元 \w -> 匹配一個0-9、a-z、A-Z、_的數字或字元,相當於[0-9a-zA-Z_] \s -> 匹配一個空白字元(空格、製表符...)...
  • Android中進程生命周期的優先順序
  • Android系統集成了一個輕量級的資料庫:SQLite,所以Android對資料庫的支持很好,每個應用都可以方便的使用它。SQLite作為一個嵌入式的資料庫引擎,專門適用於資源有限的設備上適量數據存取,現在的主流移動設備像Android、iPhone等都使用SQLite作為複雜數據的存儲引擎,.....
  • 一、什麼是存儲過程簡單的說,就是一組SQL語句集,功能強大,可以實現一些比較複雜的邏輯功能,類似於JAVA語言中的方法;ps:存儲過程跟觸發器有點類似,都是一組SQL集,但是存儲過程是主動調用的,且功能比觸發器更加強大,觸發器是某件事觸發後自動調用;二、有哪些特性有輸入輸出參數,可以聲明變數,有if...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...