Changes between Initial Version and Version 1 of waue/2010/0115-HelloHadoopV1


Ignore:
Timestamp:
Jan 19, 2010, 7:45:15 PM (14 years ago)
Author:
waue
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • waue/2010/0115-HelloHadoopV1

    v1 v1  
     1 = HelloHadoop V1 =
     2
     3{{{
     4!#java
     5import java.io.IOException;
     6
     7import org.apache.hadoop.conf.Configuration;
     8import org.apache.hadoop.fs.Path;
     9import org.apache.hadoop.io.LongWritable;
     10import org.apache.hadoop.io.Text;
     11import org.apache.hadoop.mapreduce.Job;
     12import org.apache.hadoop.mapreduce.Mapper;
     13import org.apache.hadoop.mapreduce.Reducer;
     14import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
     15import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
     16
     17//      HelloHadoop
     18//      說明:
     19//              hadoop的hello world程式
     20//              此程式可用來瞭解 hadoop的 <key , value> 為何值,並且練習hadoop api coding
     21//
     22//      測試方法:
     23//      將此程式運作在hadoop 0.20 平台上,執行:
     24//      ---------------------------
     25//      hadoop jar HelloHadoop.jar
     26//      ---------------------------
     27//
     28//      注意:
     29//      1.      在hdfs 上來源檔案的路徑為 "/user/$YOUR_NAME/input"
     30//              請注意必須先放資料到此hdfs上的資料夾內,且此資料夾內只能放檔案,不可再放資料夾
     31//              input資料內的檔案若個數超過1個,則運算結果將會以某一個為主
     32//      2.      運算完後,程式將執行結果放在hdfs 的輸出路徑為 "/user/$YOUR_NAME/output-hh1"
     33//              請注意此資料夾為運算之後才產生的,故運算之前不可有此資料夾
     34
     35public class HelloHadoop {
     36
     37        static public class HelloMapper extends
     38                        Mapper<LongWritable, Text, LongWritable, Text> {
     39
     40                public void map(LongWritable key, Text value, Context context)
     41                                throws IOException, InterruptedException {
     42                        // 將出入資料 原封不動的寫入 輸出
     43                        context.write((LongWritable) key, (Text) value);
     44                }
     45
     46        }
     47
     48        static public class HelloReducer extends
     49                        Reducer<LongWritable, Text, LongWritable, Text> {
     50                public void reduce(LongWritable key, Iterable<Text> values,
     51                                Context context) throws IOException, InterruptedException {
     52                        Text val = new Text();
     53                        // 取回 val 的資料
     54                        for (Text str : values) {
     55                                val.set(str.toString());
     56                        }
     57                        // 將取回的資料引入輸出
     58                        context.write(key, val);
     59                }
     60        }
     61
     62        public static void main(String[] args) throws IOException,
     63                        InterruptedException, ClassNotFoundException {
     64                // 引入 $HADOOP_HOME/conf 內控制檔內的資料
     65                Configuration conf = new Configuration();
     66                // 宣告job 取得conf 並設定名稱 Hadoop Hello World
     67                Job job = new Job(conf, "Hadoop Hello World");
     68                // 設定此運算的主程式
     69                job.setJarByClass(HelloHadoop.class);
     70                // 設定輸入路徑
     71                FileInputFormat.setInputPaths(job, "input");
     72                // 設定輸出路徑
     73                FileOutputFormat.setOutputPath(job, new Path("output-hh1"));
     74                // 指定定map class
     75                job.setMapperClass(HelloMapper.class);
     76                // 指定reduce class
     77                job.setReducerClass(HelloReducer.class);
     78                // 開使運算
     79                job.waitForCompletion(true);
     80
     81        }
     82}
     83
     84}}}