使用命令行編譯打包運行自己的MapReduce程序 Hadoop2.6.0


使用命令行編譯打包運行自己的MapReduce程序 Hadoop2.6.0

網上的 MapReduce WordCount 教程對於如何編譯 WordCount.java 幾乎是一筆帶過… 而有寫到的,大多又是 0.20 等舊版本版本的做法,即 javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java,但較新的 2.X 版本中,已經沒有 hadoop-core*.jar 這個文件,因此編輯和打包自己的MapReduce程序與舊版本有所不同。

本文以 Hadoop 2.6.0 單機模式環境下的 WordCount 實例來介紹 2.x 版本中如何編輯自己的 MapReduce 程序。

Hadoop 2.x 版本中的依賴 jar

Hadoop 2.x 版本中 jar 不再集中在一個 hadoop-core*.jar 中,而是分成多個 jar,如使用 Hadoop 2.6.0 運行 WordCount 實例至少需要如下三個 jar:

  • $HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar
  • $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar
  • $HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar

實際上,通過命令 hadoop classpath 我們可以得到運行 Hadoop 程序所需的全部 classpath 信息。

編譯、打包 Hadoop MapReduce 程序

我們將 Hadoop 的 classhpath 信息添加到 CLASSPATH 變量中,在 ~/.bashrc 中增加如下幾行:

export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH

別忘了執行 source ~/.bashrc 使變量生效,接着就可以通過 javac 命令編譯 WordCount.java 了(使用的是 Hadoop 源碼中的 WordCount.java,源碼在文本最后面):

  1. javac WordCount.java
Shell 命令

編譯時會有警告,可以忽略。編譯后可以看到生成了幾個 .class 文件。

使用Javac編譯自己的MapReduce程序使用Javac編譯自己的MapReduce程序

接着把 .class 文件打包成 jar,才能在 Hadoop 中運行:

  1. jar -cvf WordCount.jar ./WordCount*.class
Shell 命令

打包完成后,運行試試,創建幾個輸入文件:

  1. mkdir input
  2. echo "echo of the rainbow" > ./input/file0
  3. echo "the waiting game" > ./input/file1
Shell 命令

創建WordCount的輸入創建WordCount的輸入

如果讀者Hadoop的環境是單機模式,請跳過此步驟。如果讀者的Hadoop環境已經配置成偽分布式,那么讀者還需要進行執行下列操作命令:

  1. # 把本地文件上傳到偽分布式HDFS上
  2. /usr/local/hadoop/bin/hadoop fs -put ./input input
Shell 命令

開始運行。直接運行/usr/local/hadoop/bin/hadoop jar WordCount.jar WordCount input output,可能會出現找不到類的錯誤:
找不到類
這是因為我們在代碼中設置了package包名,這里也要寫全,正確的命令如下。

  1. /usr/local/hadoop/bin/hadoop jar WordCount.jar org/apache/hadoop/examples/WordCount input output
Shell 命令

正確運行后的結果如下:
WordCount 運行結果
偽分布式結果

 

查看結果

 


免責聲明!

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



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