hadoop 1.2.1 Eclipse mapreduce hello word 學習筆記

在 hadoop 1.2.1成功配置了爲分佈式環境,通過了十一長假,該繼續學習了,html

此次要在eclipse下運行一個hadoop 應用java

 開發環境apache

操做系統:CentOS Linux release 6.0 (Final)vim

eclipse4.3app

java version "1.7.0_25"
eclipse

第一步 運行 start-all.sh 能夠參照上一篇文章,啓動守護線程分佈式

發現啓動有問題,原來是ip地址衝突了而個人xml配置中設置的ip地址沒有生效,沒辦法改一下ipide

DEVICE="eth0"
BOOTPROTO=static
IPADDR=192.168.2.88
此處改爲沒有被佔用的ipoop

/etc/rc.d/init.d/network restart 使修改生效
學習

生效後修改vim core-site.xml
  vim mapred-site.xml   設置的ip (若是設置成 localhost 就不用改了)

配置eclipse插件

獲取插件

參考:http://f.dataguru.cn/thread-187770-1-1.html  能夠本身生成 也能夠直接下載使用

安裝完從新打開eclipse後

在showview裏面能夠考到選項若是



wKiom1NnKOHBwld2AAFKr4sXkC4625.jpg


選擇讓其顯示在控制檯旁邊


wKioL1NnKNqQjF9HAACUK8YeygU608.jpg


右鍵新建一個

如圖

wKioL1NnKPaBGKUyAAEtSl8TQFE953.jpg


master 處填寫 mapred-site.xml ip和端口  dfs master 處填寫 core-site.xml ip和端口

設置hadoop的安裝路徑 如圖


wKiom1NnKUPhtYTQAADKFDumJpc410.jpg


設置完後能夠看到 資源目錄下如圖


wKiom1NnKVvSWwYzAADg04AAbaE732.jpg


咱們能夠在這裏經過右鍵對dfs文件進行操做 (增刪 上傳 下載)


建立helloword工程


File -> New -> Project 選擇「Map/Reduce Project」,而後輸入項目名稱,建立項目。插件會自動把hadoop根目錄和lib目錄下的全部jar包導入

如圖


wKioL1NnKUmwPhclAAGxzXtUWkI650.jpg


第一個例子準備運行文檔中的實例

打開http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html

點擊如圖



wKiom1NnKYrw4pSnAAEVqGYk4ik957.jpg


按照例子 創建package 和 class 將代碼複製


package org.myorg; 
import java.io.IOException;
import java.util.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;
public class WordCount {
       public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
         private final static IntWritable one = new IntWritable(1);
         private Text word = new Text();
                          
         public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
           String line = value.toString();
           StringTokenizer tokenizer = new StringTokenizer(line);
           while (tokenizer.hasMoreTokens()) {
             word.set(tokenizer.nextToken());
             output.collect(word, one);
           }
         }
       }
                          
       public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
         public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
           int sum = 0;
           while (values.hasNext()) {
             sum += values.next().get();
           }
           output.collect(key, new IntWritable(sum));
         }
       }   
       public static void main(String[] args) throws Exception {
         JobConf conf = new JobConf(WordCount.class);
         conf.setJobName("wordcount");
                          
         conf.setOutputKeyClass(Text.class);
         conf.setOutputValueClass(IntWritable.class);
                          
         conf.setMapperClass(Map.class);
         conf.setCombinerClass(Reduce.class);
         conf.setReducerClass(Reduce.class);
                          
         conf.setInputFormat(TextInputFormat.class);
         conf.setOutputFormat(TextOutputFormat.class);
                          
         FileInputFormat.setInputPaths(conf, new Path(args[0]));
         FileOutputFormat.setOutputPath(conf, new Path(args[1]));
                          
         JobClient.runJob(conf);
       }
    }
                         


直接運行會報錯 報錯了 (須要兩個參數)  參考文檔

wKioL1NnKbvxFf55AACoz8blKx8849.jpg


須要傳入 輸入目錄 和 輸出目錄

能夠根據根據DFS 中的目錄 進行設置  也能夠直接寫 絕對目錄 如圖



wKiom1NnKgXRfHO6AALYfAqkldQ648.jpg


點擊運行成功

經過

hadoop dfs -cat /home/hadoop-1.2.1/output/part-00000 能夠查看輸出  也能夠在eclipse中dfs目錄進行查看

相關文章
相關標籤/搜索