由於要使用iozone和dd對HDFS作個簡單的測試,因此須要將HDFS掛載到本地,掛載過程不復雜,但中間出現了各類各樣的錯誤,弄了有半個星期,終於測試完畢。現將整個掛載及解決錯誤的過程記錄下來,你們共同窗習討論。java
1、FUSE安裝node
安裝步驟很簡單web
一、解壓 $ tar zxvf fuse-2.9.3.tar.gz
apache
二、進入fuse目錄 $ cd /usr/local/fuse-2.9.3
ubuntu
三、$ ./configure
瀏覽器
四、$ make
多線程
五、$ make install
dom
六、$ modprobe fuse (自動載入fuse模塊)
異步
2、HDFS掛載async
一、增長系統配置
$ sudo vi /etc/profile
增長以下內容
重啓集羣,發現全部的datanode都在啓動後的幾秒鐘內掛掉了,查看日誌,發現報錯:
FATAL ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Shutting down. Incompatible version or revision.DataNode version '1.2.1' and revision '1503152' and NameNode version '1.2.2-SNAPSHOT' and revision ' and hadoop.relaxed.worker.version.check is not enabled and hadoop.skip.worker.version.check is not enabled
版本不匹配,還覺得是ant編譯過程當中使用的包的版本問題,結果使用ant clean命令把以前編譯的都清除了。覺得這下應該恢復正常了,結果更糟糕的問題出現了。集羣能夠正常啓動了,經過命令行hadoop dfsadmin -report可以看到每一個節點都處於正常狀態,可是就是不能經過瀏覽器查看。
3、iozone測試
iozone測試比較簡單,iozone主要用來測試操做系統文件系統性能的測試工具,該工具所測試的範圍主要有,Write , Re-write, Read, Re-Read, Random Read, Random Write, Random Mix, Backwards Read, Record Rewrite, Strided Read, Fwrite, Frewrite, Fread, Freread, Mmap, Async I/O。使用iozone能夠在多線程、多cpu,並指定cpu cache空間大小以及同步或異步I/O讀寫模式的狀況下進行測試文件操做性能。
命令爲:iozone –s 128k –i 0 –i 1 –i 2 –i 3 –i 4 –i 5 –i 8 –t 8 –r 1m –B > test.txt
參數解釋:0=write/rewrite, 1=read/re-read, 2=random-read/write 3=Read-backwards, 4=Re-write-record, 5=stride-read, 6=fwrite/re-fwrite, 7=fread/Re-fread, 8=random mix, 9=pwrite/Re-pwrite, 10=pread/Re-pread, 11=pwritev/Re-pwritev, 12=preadv/Re-preadv). =pread/Re-pread, 11=pwritev/Re-pwritev, 12=preadv/Re-preadv,-t表示線程數,-r block size 指定一次寫入/讀出的塊大小,-s file size 指定測試文件的大小,-f filename 指定測試文件的名字,完成後會自動刪除(這個文件必須指定你要測試的那個硬盤中),-F file1 file2... 指定多線程下測試的文件名,-B或-b指定到輸出文件。iozone參數不少,能夠根據使用需求具體學習某個參數。
4、dd測試
dd測試並非標準的磁盤和文件系統讀寫測試工具,只是Linux系統的一個磁盤命令,但dd命令實現的磁盤拷貝功能,能夠間接地反映磁盤的讀寫能力,所以,在測試磁盤和文件系統的讀寫性能時,也經常經過dd命令進行測試。dd測試讀寫命令分開,
寫入操做:dd if=/dev/zero of=/tmp/hdfs/zerofiles bs=4M count=1240 conv=fdatasync
讀取操做:dd if=/tmp/hdfs/zerofiles of=/dev/null bs=4M count=1240
其中,if表示input file,即輸入文件;of表示output file,即輸出文件;bs表示一次讀取或寫入的塊大小;count表示寫入或讀取多少塊;conv表示用指定的參數轉換文件。實際使用時,能夠根據本身的需求進行調整。
5、總結
最後,簡單總結一下遇到了幾個問題及解決辦法
一、FUSE編譯出錯: ./configure後出現error
解決辦法:在Ubuntu12.04LTS環境下,使用fuse-2.7.4或fuse-2.8.5兩個版本都會出現各類各樣的問題,但換用fuse-2.9.3後,再也不報錯,其餘版本沒有進行嘗試;
二、版本不匹配:使用ant對hadoop的模塊fuse-dfs編譯後,datanode不能啓動,且報版本不匹配錯誤
解決辦法:在hadoop/conf/core-site.xml配置文件中增長配置信息(每一個節點都要修改)
<property>
<name>hadoop.relaxed.worker.version.check</name>
<value>true</value>
</property>
<property>
<name>hadoop.skip.worker.version.check</name>
<value>true</value>
</property>
因爲默認配置中這兩個屬性值都爲false,集羣啓動時會檢查版本,不匹配時datanode就會拒絕鏈接到
namenode上,形成集羣中節點個數爲0,也就是datanode沒有啓動;
三、不能經過瀏覽器查看集羣狀態:
緣由:ant clean以後,以前編譯過的模塊都被清除了,猜想清除的模塊可能涉及到瀏覽器顯示這一部分的實現
解決辦法:從新將FUSE模塊編譯回來,不要輕易清除編譯模塊
四、測試文件不能寫入HDFS
緣由:普通ubuntu用戶對hadoop hdfs沒有寫入權限
解決辦法:開放hadoop目錄的權限,命令爲: hadoop fs -chmod 777 /user/hadoop