Linux系統Hadoop僞分佈式模式配置

一、修改配置文件

需要配置相關文件,才能夠讓Hadoop在僞分佈式模式下順利運行,Hadoop的配置文件位於/usr/local/hadoop/etc/hadoop/中,進行僞分佈式模式配置時,需要修改2個配置文件,即core-site.xml和hdfs-site.xml。

打開Linux終端,進入/usr/local/hadoop/etc/hadoop/目錄,使用vim編輯器打開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>

hadoop.tmp.dir參數用於保存臨時文件,若沒有配置hadoop.tmp.dir這個參數,則默認使用的臨時目錄爲/tmp/hadoo-hadoop,而這個目錄在Hadoop重啓時有可能被系統清理掉,導致一些意想不到的問題,因此,必須配置這個參數;

fs.defaultFS參數用於指定HDFS的訪問地址,其中9000是端口號。

同樣需要修改配置文件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>

dfs.replication參數用於指定副本的數量,因爲在分佈式文件系統HDFS中,數據會被冗餘存儲多份,以保證可靠性和可用性,在這裏,我們採用的是僞分佈式模式,只有一個節點,所以只可能有1個副本,設置dfs.replication參數的值爲1;

dfs.namenode.name.dir參數用於設定名稱節點的元數據的保存目錄

dfs.datanode.data.dir參數用於設定數據節點的數據保存目錄

需要注意的是,Hadoop的運行方式(如運行在單機模式下還是運行在僞分佈式模式下)是由配置文件決定的,啓動Hadoop時會讀取配置文件,然後根據配置文件來決定運行在什麼模式下,因此,如果需要從僞分佈式模式切換回單機模式,只需要刪除core-site.xml中的配置項即可

二、執行名稱節點格式化

進入/usr/local/hadoop/目錄,通過下列命令執行名稱節點的格式化:

./bin/hdfs namenode -format

如果格式化成功,會看到has been successfully formatted和Exiting with status 0的提示信息,如果出現Exiting with status 1的提示信息,則表示出現錯誤:
在這裏插入圖片描述
如果出現錯誤,也無需着急,仔細查看錯誤提示信息,如果有下列錯誤信息:

Error: JAVA_HOME is not set and could not be found

則說明在安裝Java環境時,設置JAVA_HOME環境變量沒有設置成功,需要重新設置環境變量,具體內容請參照:Linux系統安裝Java環境

三、啓動Hadoop

進入/usr/local/hadoop/目錄,通過下列命令啓動Hadoop:

./sbin/start-dfs.sh

如果出現如下SSH提示,輸入yes即可:
在這裏插入圖片描述
注意,在這裏需要確保你的Linux系統已安裝SSH服務端,安裝方法爲:

sudo apt-get install openssh-server

啓動Hadoop的過程中可能出現如下警告信息:

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

這個警告提示信息可以忽略,並不會影響Hadoop正常使用。

如果啓動Hadoop時遇到輸出非常多的“ssh: Could not resolve hostname xxx”的異常情況,這並不是SSH的問題,可以通過下列步驟設置Hadoop環境變量來解決:

①按Ctrl + C鍵中斷啓動過程;

②使用vim編輯器打開文件~/.bashrc,在文件最上邊的開始位置增加如下兩行內容(設置過程與JAVA_ HOME變量類似,其中,HADOOP_ HOME爲Hadoop的安裝目錄):

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/1ib/native

③保存文件以後,通過下列命令使環境變量設置生效:

source ~/.bashrc

④再次啓動Hadoop:

./sbin/start-dfs.sh

Hadoop啓動完成後,可以通過下列命令來判斷是否成功啓動:

jps

若成功啓動,則會列出如下進程:
在這裏插入圖片描述
如果看不到SecondaryNameNode進程,運行下列命令關閉Hadoop相關進程,然後再次嘗試啓動:

./sbin/stop-dfs.sh

如果看不到NameNode或DataNode進程,則表示配置不成功,仔細檢查之前的步驟,或通過查看啓動日誌排查原因。

啓動Hadoop成功以後,就可以運行MapReduce程序處理數據,此時是對HDFS進行數據讀寫,而不是對本地文件進行讀寫

四、Hadoop無法正常啓動的解決方法

一般可以通過查看啓動日誌來排查原因,啓動日誌信息記錄在下面這個文件中:

/usr/local/hadoop/logs/hadoop-hadoop-namenode-機器名稱.log

因爲每一次的啓動日誌都是追加在日誌文件之後,所以需要拉到日誌文件的最後面查看,根據日誌記錄的時間信息,就可以找到某次啓動的日誌信息。

當找到屬於本次啓動的一段日誌信息以後,出錯的提示信息一般會出現在最後面,通常是寫着Fatal、Error、Warning或者Java Exception的地方,可以在網上搜索一下出錯信息,尋找一些相關的解決方法。

如果啓動後執行jps命令後,找不到DataNode進程,則表示數據節點啓動失敗,可嘗試如下步驟(注意,這會刪除HDFS中原有的所有數據,如果原有的數據很重要,請不要這樣做,不過在第一次啓動時,通常不會有重要數據):

①關閉Hadoop:

./sbin/stop-dfs.sh

②刪除tmp文件,注意,這會刪除HDFS 中原有的所有數據:

rm -r ./tmp

③重新格式化名稱節點:

./bin/hdfs namenode -format

④重啓Hadoop:

./sbin/start-dfs.sh

五、使用Web界面查看HDFS信息:

Hadoop成功啓動後,可以在Linux系統中打開一個瀏覽器,在地址欄輸人地址:http://localhost:50070,就可以查看名稱節點和數據節點信息,還可以在線查看HDFS中的文件:
在這裏插入圖片描述

六、運行Hadoop僞分佈式實例

在單機模式中,實例讀取的都是本地數據,但在僞分佈式模式下,讀取的則是分佈式文件系統HDFS上的數據

在僞分佈式模式下運行grep實例

①進入/usr/local/hadoop/目錄,通過下列命令在HDFS中創建用戶目錄:

./bin/hdfs dfs -mkdir -p /user/當前登錄用戶的用戶名

②在HDFS中創建用戶對應的input目錄:

./bin/hdfs dfs -mkdir input

③把本地文件系統的/usr/local/hadoop/etc/hadoop/目錄中的所有xml文件作爲輸人文件,複製到分佈式文件系統HDFS中的/user/hadoop/input/目錄中:

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

④查看HDFS中input目錄下的文件列表:

./bin/hdfs dfs -ls input

⑤運行grep實例:

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

⑥查看HDFS中output文件夾中的運行結果:

./bin/hdfs dfs -cat output/*

執行結果如下:
在這裏插入圖片描述
需要注意的是,Hadoop默認不會覆蓋結果文件,因此再次運行上面實例時會提示出錯,如果要再次運行,需要先使用如下命令把output文件夾刪除

./bin/hdfs dfs -rm -r output

七、關閉Hadoop

進入/usr/local/hadoop/目錄,通過下列命令關閉Hadoop:

./sbin/stop-dfs.sh

需要注意的是,下次啓動Hadoop時,無須進行名稱節點的初始化(否則會出錯),也就是說,不要再次執行./bin/hdfs namenode -format命令,每次啓動Hadoop只需要直接運行./sbin/start-dfs.sh命令即可。

八、啓動YARN

YARN是Hadoop2.0以後新增的專門負責資源管理與任務調度的組件,MapReduce作業可以運行在YARN之上,由YARN負責爲MapReduce作業進行資源管理和任務調度。

但是YARN對於分佈式模式(真正由多臺機器構成的集羣環境)纔有意義,僞分佈式模式下,YARN無法真正發揮作用,因此僞分佈式模式下不需要藉助於YARN爲MapReduce作業進行資源管理和任務調度,而是可以直接藉助於Hadoop自身內置的mapred.LocalJobRunner來爲MapReduce作業進行資源管理和任務調度,也就是說,不啓動YARN,MapReduce程序也能夠正常運行。

不過,這裏仍然介紹一下僞分佈模式下如何配置和啓動YARN,讓YARN來負責資源管理與任務調度:

①進入/usr/local/hadoop/目錄,通過下列命令將配置文件/usr/local/hadoop/etc/hadoop/mapred-site.xml.template重命名爲mapred-site.xml:

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

②修改配置文件mapred-site.xml,修改後內容如下:

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

③修改配置文件/usr/local/hadoop/etc/hadoop/yarn-site.xml,修改後內容如下:

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

④啓動Hadoop:

./sbin/start-dfs.sh

⑤啓動YARN:

./sbin/start-yarn.sh

⑥通過下列命令開啓歷史服務器,在瀏覽器地址欄輸入地址:http://localhost:8088,即可在Web中查看任務運行情況:

./sbin/mr-jobhistory-daemon.sh start historyserver

⑦通過jps命令查看當前運行的進程,可以看到多了NodeManager和ResourceManager兩個後臺進程:
在這裏插入圖片描述
需要注意的是,啓動YARN之後,運行實例的方法和僞分佈式模式是一樣的,僅僅是資源管理、任務調度方式不同,觀察日誌信息可以發現,不啓用YARN時,是mapred.LocalJobRunner在跑任務,啓用YARN之後,是mapred.YARNRunner在跑任務

⑧關閉YARN:

./sbin/stop-yarn.sh

⑨關閉歷史服務器:

./sbin/mr-jobhistory-daemon.sh stop historyserver

⑩關閉Hadoop:

./sbin/stop-dfs.sh

需要注意的是,在經過上述步驟以後,如果以後在僞分佈式模式下啓動Hadoop的時候不想同時啓動YARN,則務必把配置文件mapred-site.xml重命名,改成mapred-site.xml.template,需要用時改回來即可,否則,如果該配置文件存在,使用./sbin/start-dfs.sh命令啓動Hadoop以後卻未開啓YARN,則運行程序時會提示“Retrying connect to server: 0. 0.0.0/0.0.0.0:8032"錯誤。

九、配置PATH變量

前面在啓動Hadoop時都要加上命令的路徑,例如./sbin/start-dfs.sh這個命令中就帶上了路徑,實際上通過設置PATH變量,可以在執行命令時不用帶上命令本身所在的路徑。

例如,打開一個Linux終端,在任何一個目錄下執行ls命令時,都沒有帶上ls命令的路徑,實際上執行ls命令時,之所以不需要帶上路徑,是因爲Linux系統已經把ls命令的路徑加入到PATH變量中了,當執行ls命令時,系統是根據PATH這個環境變量中包含的目錄位置,逐一進行查找,直至在這些目錄位置下找到匹配的程序(若沒有匹配的程序,則系統會提示該命令不存在)。

知道了這個原理以後,同樣可以把start-dfs.shstop-dfs.sh等命令所在的目錄/usr/local/hadoop/sbin/加入到環境變量PATH中,這樣以後在任何目錄下都可以直接使用命
start-dfs.sh啓動Hadoop而不用帶上命令路徑,具體操作方法是:

①使用vim編輯器打開~/.bashrc這個文件,然後在這個文件的最前面位置加入如下單獨一行:

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

在後面的學習過程中,如果要繼續把其他命令的路徑也加入到PATH變量中,也需要繼續修改~/.bashrc這個文件,當後面要繼續加入新的路徑時,只要用英文冒號“:”隔開,把新的路徑加到後面即可,例如,如果要繼續把/usr/local/hadoop/bin路徑增加到PATH中,只要繼續追加到後面,如下所示:

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

②執行下列命令使設置生效:

source ~/.bashrc

設置生效後,在任何目錄下啓動Hadoop,都只要直接輸入start-dfs.sh命令即可,同理,停止Hadoop也只需要在任何目錄下輸入stop-dfs.sh命令即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章