原生態在hadoop上運行java程序

第一種:原生態運行jar

1,利用eclipse編寫Map-Reduce方法,通常引入hadoop-core-1.1.2.jar。注意這裏eclipse裏沒有安裝hadoop的插件,只是引入其匝包,該eclipse能夠安裝在windows或者linux中,若是是在windows中安裝的,且在其虛擬機安裝的linux,能夠經過共享文件夾來實現傳遞。java

2,編寫要測試的數據,如命名爲tempdatalinux

3,利用eclipseexport來打包已編寫好的,在利用eclipse打包jar的時候,只須要選擇src便可,通常只打包程序文件,而且須要選擇main class,將該jar放到如/home/hadoop/docum/Test.jarapache

4,將要分析的數據傳到hdfswindows

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

5,開始執行jarjvm

hadoop jar /home/hadoop/Docum/Test.jar  /user/hadoop/temperatur output分佈式

這是一種利用jar來運行的。ide

這裏Test.jar在本地,jar不必上傳到hdfsoop

參數依次爲測試

本地mapred程序,hdfs的測試數據即輸入文件,輸出文件夾。

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

注意:這裏能夠不須要指定類的名稱,而輸出的文件夾outputpath不能事先已經存在。

第二種:僞分佈式下運行WordCount

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都行

第三種Hadoop直接執行Class文件

能夠事先在eclipse中編譯好class,而後直接利用hadoop來執行該class文件

Hadoop集羣中運行做業的時候,必需要將程序打包爲jar文件。

Hadoop本地和僞分佈中能夠運行jar文件,也能夠直接運行class文件,注意直接運行class文件,必須是沒有mapreducer的,直接獲取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中將hadoopjar加入classpath中,而後直接run


第四種 Hadoopeclipse環境的搭建

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.提交jobJobTracker上並監視運行狀況


執行hadoop jar的時候,jar不須要放到hdfs中,通常hadoop是到本地中尋找jar的,若是用戶此時在jar目錄下,能夠直接寫jar名。

對於輸入文件夾和輸出文件夾也不須要寫上hadoop的內置路徑名,默認是在/user/hadoop/這個目錄下的,hadoop命令後能夠不用加根路徑。

相關文章
相關標籤/搜索