天天看點

原生态在hadoop上運作java程式

1,利用eclipse編寫Map-Reduce方法,一般引入hadoop-core-1.1.2.jar。注意這裡eclipse裡沒有安裝hadoop的插件,隻是引入其匝包,該eclipse可以安裝在windows或者linux中,如果是在windows中安裝的,且在其虛拟機安裝的linux,可以通過共享檔案夾來實作傳遞。

2,編寫要測試的資料,如命名為tempdata

3,利用eclipse的export來打包已編寫好的,在利用eclipse打包jar的時候,隻需要選擇src即可,一般隻打包程式檔案,并且需要選擇main class,将該jar放到如/home/hadoop/docum/Test.jar

4,将要分析的資料傳到hdfs上

hadoop fs -put /home/hadoop/myhadoopdata/tempdata  ./testdata/

5,開始執行jar

hadoop jar /home/hadoop/Docum/Test.jar  /user/hadoop/temperatur output

這是一種利用jar來運作的。

這裡Test.jar在本地,jar沒必要上傳到hdfs上

參數依次為

本地mapred程式,hdfs的測試資料即輸入檔案,輸出檔案夾。

hadoop jar /home/hadoop/Temperature.jar inputpath outputpath

注意:這裡可以不需要指定類的名稱,而輸出的檔案夾outputpath不能事先已經存在。

1,拷貝源代碼

cp /usr/local/hadoop1.1.2/src/examples/org/apache/hadoop/examples/WordCount.java  ~/ygch/hadoop/

2,編譯源代碼,放到指定的檔案夾如這裡的class下

javac

-classpath /usr/local/hadoop1.1.2/hadoop-core1.1.2.jar:

/usr/local/hadoop1.1.2/lib/commons-cli-1.2.jarWordCount.java  -d class,

利用-classpath選項指定WordCount需要的jar包。hadoop目錄下存放jar包的位置有兩個:根目錄和/lib目錄。然後我們可以通過jar tvf  *.jar檢視jar包内容,進而可以知道WordCount需要的是哪幾個jar包。

-d選項指定生成的類檔案的位置,在編譯的時候這個選項必須重新指定,不能讓class檔案生成在目前目錄下。

3,将class檔案打包成一個jar包:

jar cvf WordCount.jar -C classes/  .

注意不要忘記最後有一個點.,這個點點必須和前面要有空格,否則jar指令報錯。該點訓示jar指令的檔案清單,表示指定目錄下的所有檔案。

4,生成input檔案:

由于運作hadoop時指定的輸入檔案隻能是HDFS檔案系統中的檔案,是以我們必須将要進行wordcount的檔案從本地檔案系統拷貝到HDFS檔案系統中。

hadoop fs -mkdir input

hadoop fs -put testfile input

5. 運作jar包:

hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output

在運作指令中由于WordCount.java中包括package資訊,是以我們在指定類時要包含package的完整資訊。

6. 檢視結果

在hadoop程式運作完後,結果會放在output目錄下,該目錄是自動生成的。檢視指令為:

hadoop fs -cat output/part-r-00000

使用-cat或者-text都行

可以事先在eclipse中編譯好class,然後直接利用hadoop來執行該class檔案

在Hadoop叢集中運作作業的時候,必須要将程式打包為jar檔案。

在Hadoop本地和僞分布中可以運作jar檔案,也可以直接運作class檔案,注意直接運作class檔案,必須是沒有map和reducer的,直接擷取FileSystem來進行操作。

如果類有包名,拷貝的時候也要将其包名拷貝,然後

hadoopwhut/structfile/SequenceFileWriteDemo numbers.seq

利用Hadoop指令和Java指令都可以執行class檔案,前者可以将Hadoop庫檔案路徑加入到類路徑中來,同時也能擷取Hadoop的配置檔案。

一般都需要提前設定一個HADOOP_CLASSPATH環境變量用于添加應用程式類的路徑,注意這裡的路徑是使用者本地的檔案路徑,不是hdfs中的路徑。

具體的如下:

export   HADOOP_CLASSPATH=/home/hadoop/hadoopclass

hadoop FileSystemCat hdfs://localhost:9000/user/hadoop/inputdata/iodata.txt

也可以直接在IDE中将hadoop的jar加入classpath中,然後直接run

第四種 Hadoop與eclipse環境的搭建

hadoop jar 運作的實質是:

1.利用hadoop這個腳本啟動一個jvm程序;

2.jvm程序去運作org.apache.hadoop.util.RunJar這個java類;

3.org.apache.hadoop.util.RunJar解壓Temperature.jar

到hadoop.tmp.dir/hadoop-unjar*/目錄下;

4.org.apache.hadoop.util.RunJar動态的加載并運作MainClass或參數中指定的Class;

5.MainClass或參數中指定的Class中設定Job的各項屬性

6.送出job到JobTracker上并監視運作情況

執行hadoop jar的時候,jar不需要放到hdfs中,一般hadoop是到本地中尋找jar的,如果使用者此時在jar目錄下,可以直接寫jar名。

對于輸入檔案夾和輸出檔案夾也不需要寫上hadoop的内置路徑名,預設是在/user/hadoop/這個目錄下的,hadoop指令後可以不用加根路徑。

本文轉自 zhao_xiao_long 51CTO部落格,原文連結:http://blog.51cto.com/computerdragon/1260871