Hadoop 測試例子運行詳解


一、軟件環境

Hadoop搭建系統環境:三台完全一樣的Centos6.5_64位系統,其中一個做Namenode和Datanode,另外兩個做Datanode。

Hadoop安裝目標版本:Hadoop2.2.0

二、運行步驟

2.1 新建輸入文件內容

在當前目錄新建一個文件夾叫input,在文件夾里新建三個文件f1.txt,f2.txt,f3.txt,並分別寫入一些內容。

mkdir -p input/{1..3}.txt     遞歸創建目錄和文件
echo "hello hadoop" > input/f1.txt'
echo "hello java" > input/f2.txt'
echo "hello world" > input/f3.txt'

2.2 在運行的hadoop中創建文件夾

注意在操作之前,一定要保證這個時候hadoop已經正常運行,datanode、jodtracker、namenode等必要信息均顯示正常。

使用如下的命令創建文件夾

hadoop fs -mkdir -p /home/hadoop/input
/*注意相對路徑,這里的/home/hadoop是我當前用戶的目錄,可根據自己具體情況進行改動 沒有-p參數會無法創建成功*/

然后查看我們在hadoop中是否已經成功創建了該文件夾:

[hadoop@master bin]$ hadoop fs -ls /home/hadoop/
Found 2 items
drwxr-xr-x   - hadoop supergroup  0 2014-03-05 19:00 /home/hadoop/input

如果我們能看到如上的字樣表明我們這一步已經成功了。

2.3 把文件復制到hadoop中的文件系統中(Hdfs)

[hadoop@master ~]$ hadoop fs -put input/*  /home/hadoop/input/

把(本地目錄)/home/hadoop/input/*下的所以文件復制到HDFS中的input目錄下

然后查看文件是否在hadoop中,並查看文件內容是否和輸入的一致:

hadoop fs -ls /home/hadoop/input
hadoop fs -cat /home/hadoop/input/f1.txt

注:我們可以 通過節點IP或節點主機名:50070/dfshealth.jsp來從瀏覽器中查看整個hdfs文件系統的目錄,打開namenode的鏈接,點擊其中的Browse the filesystem超級鏈接,就可以看到相應的目錄結構了。

2.4 運行example例子

我們要運行的例子在hadoop的安裝目錄下,名稱叫做hadoop-mapreduce-examples-2.2.0.jar。到了這一步,無疑是出錯率最高的時候,運行命令如下:

[hadoop@master bin]$ yarn jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount  /home/hadoop/dfs/input/ /home/hadoop/dfs/output/  

其中,output是輸出文件夾,必須不存在,它由程序自動創建,如果預先存在output文件夾,則會報錯。

在操作之前,請務必多次檢查如下內容:

  1. 自己的input目錄是否已經存入輸入內容;
  2. output文件夾是否存在;
  3. 運行的hadoop用jps查看一下是否所有應該運行的進程都存在;
  4. 如果之前開過hadoop運行,這不是第一次開的話。可以試試先./stop-all.sh,然后把core-site.xml中的hadoop.tmp.dir的value所在路徑,即/home/hadoop/tmp/hadoop_tmp刪除,然后重新建立一遍,如果你是新建的hadoop用戶,最好用chown指令再把文件的所屬更改一下。如上一樣的操作對hdfs-site.xml中的dfs.data.dir的value路徑做一遍。最好對所有datanode和namenode也做一遍,保險起見。因為,我就是這些小細節上出了問題,由於之前運行導致這些本應該空的文件夾中存在文件,而頻繁報錯。
  5. 如果之前運行過wordcount報錯記住還要用命令hadoop dfs -rmr output/*output為你的輸出文件夾路徑*/把output文件夾刪除。報錯內容如下:

 

2.5 查看運行結果

我們可以查看output文件夾的內容來檢查程序是否成功創建文件夾,通過查看output文件里面的part-r-00000文件的內容來檢查程序執行結果:

hadoop fs -cat /home/hadoop/output/part-r-00000

正常顯示結果會像如下樣式一樣:

hadoop 1
hello 3
jave 1
world 1

我們可以看到hadoop出現一次,hello出現3次,java出現一次,world出現一次,這跟預期是一樣的,說明執行成功。

 

 

錯誤筆記

1. 啟動時發現莫名其妙的datanode沒有啟動。

從logs日志中看到Incompatible namespaceIDs in /home/hadoop/tmp/hadoop_tmp,想起來這個文件夾是自己新建的,是不是偽分布式時在里面產生了垃圾?於是rm -rf然后mkdir重來了一次,想想不安全我再把其他的之前新建的文件夾全部重新按照這個方法操作了一次;最后-format然后./start-all.sh,搞定啦。Datanode、SecondaryNameNode、Jps、ResourceManager、NameNode全部啟動。

2. 其他N多錯誤

我在運行中也出現過其他很多方面的錯誤,最有效且最快找到出錯的方法就是查看log文件了,哪個地方沒有正常開啟,就去對應進程的.log文件查看。比較煩人的是.log文件內容是按照日期遞增順序進行寫入內容的,意思就是你每次要查看最新的運行信息必須要往下翻翻翻。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM