hadoop程序運行


hadoop命令的使用:

Usage: hadoop [--config confdir] COMMAND

這里COMMAND為下列其中一個:

<span style="font-size:16px;">namenode -format        格式化DFS文件系統  
secondarynamenode       運行DFS的第二個namenode  
namenode                    運行DFS的namenode  
datanode                    運行一個DFS的datanode  
dfsadmin            運行一個DFS的admin 客戶端  
fsck                運行一個DFS文件系統的檢查工具  
fs                  運行一個普通的文件系統用戶客戶端  
balancer            運行一個集群負載均衡工具  
jobtracker          運行MapReduce的jobTracker節點  
pipes               運行一個Pipes作業  
tasktracker     運行一個MapReduce的taskTracker節點  
job                 處理MapReduce作業  
version         打印版本  
jar <jar>       運行一個jar文件  
distcp <srcurl> <desturl>   遞歸地復制文件或者目錄  (采用分布式復制方法,一般用於兩個HDFS集群中)
archive -archiveName NAME <src>* <dest> 生成一個Hadoop檔案       (將har當作一個新的文件系統,《權威指南3.8節》)
daemonlog               獲取或設置每個daemon的log級別  
或CLASSNAME              運行名為CLASSNAME的類大多數命令會在使用w/o參數  
                        時打出幫助信息。</span>
  • hadoop程序的編譯:(我是用的hadoop版本為hadoop-0.20.203.0)

1.注意的是要將hadoop的core包加入到classpath中,命令如下:

javac -classpath ~/hadoop-0.20.203.0/hadoop-core-0.20.203.0.jar  FileSystemDoubleCat.java

(這里還有一個疑問:我用通配符添加jar包時一直失敗(使用 *.jar),提示找不到類??????)

  • 運行hadoop程序的方法如下:

1.直接使用hadoop CLASSNAME 【args】 運行,

    ( 注意此時需設置環境變量 HADOOP_CLASSPATH中包含當前類。其中當前目錄中應該包含.class文件,這個可以通過在eclipse中的bin文件下取得,或用上面的方法進行編譯)

如:hadoop FileSystemDoubleCat hdfs://localhost:9000/user/kqiao/uploadFile

2.將程序打包成jar包,然后使用hadoop jar命令運行。

     這只相當於將上面中的.class文件打包,然后運行該jar文件。(注意,如果以集群模式下運行hadoop,則只能使用這種方法,因為需要在各網絡節點上分發jar包)並且主程序中要有:

job.setJarByClass(MaxTemperature.class)這句,用於設定jar類

命令如下:jar -cvf FileSystemDoubleCat.jar FileSystemDoubleCat.class
                    hadoop jar FileSystemDoubleCat.jar FileSystemDoubleCat hdfs://localhost:9000/user/kqiao/uploadFile

3.安裝eclipse的hadoop插件,直接在eclipse中編輯程序,然后運行

     這應該算是最簡單的運行方法了吧。。。。

   在run configuration下完成配置,然后 run on hadoop即可。

-----------------------------------------------------------------------------------------------------------------------------------

  以后記錄我在運行中遇到的問題~

(1)-D mapred.reduce.tasks=2   或  job.setNumReduceTasks(2) 設置reducer的數量  

    (換了一個hadoop版本,不知道為什么,使用-D  選項設置reducer數量失敗了,沒有報錯,但是reducer保持為1,只能使用job.set來設置?未解決。。)

  (2)如果已經確定有某類的存在,卻一直提示找不到該類,一般是因為class_path的設置問題。

  (3)如果自定義的mapper類是主類的內部類時,一定記得將其定義為static。

  (4)hadoop程序,如果有運行錯誤,主要通過查看job或task的日志解決:看看拋出了什么樣的異常,在哪個階段,哪個任務拋出了異常。

   如果是運行結果與預期不符,則通過查看計數器判斷那部分出錯,另一方面可以在程序中加入輸出語句,System.out.println("****");然后在web頁面中的job下查看各個job的task日志,看看 stdout log, stderr log進行分析排序。


免責聲明!

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



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