歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Hadoop之測試KMeans

新學Hadoop,測試了hello word級別的程序WordCount,打算用hadoop做聚類分析,這次測試KMeans,二維的數據,這裡詳細的介紹一下我的測試過程(偽分布式),以供參考,源代碼下載。

下載在Linux公社的1號FTP服務器裡,下載地址:

FTP地址:ftp://www.linuxidc.com

用戶名:www.linuxidc.com

密碼:www.muu.cc

在 2013年LinuxIDC.com\5月\Hadoop之測試KMeans

下載方法見 http://www.linuxidc.net/thread-1187-1-1.html

--------------------------------------------------------------------

Step1:  配置好eclipse和hadoop,具體可以參考網上一些操作。

Step2:  新建一個Project --> Map/Reduce Project工程,命名為KMeans,這裡記得要選擇Map/Reduce Project工程,否則把代碼加進來會出現import錯誤

Step3: 用tinycui提供的網址下載KMeans的源代碼,把src和bin文件覆蓋到自己新建的工程中,並在eclipse中刷新KMeans工程

Step4: 在DFS中新建兩個文件夾center, cluster, 並在center文件夾中上傳一個空的文件center以存放每次迭代的center值,在cluter文件夾中上傳cluster的文件,這個文件中是輸入數據,數據格式為:(20,30) (50,61) (20,32) (50,64) (59,67) (24,34) (19,39) (20,32) (50,65) (50,77) (20,30) (20,31) (20,32) (50,64) (50,67)

Step5: 配置main的輸入參數,Run --> Run Configurations中的Arguments中配置main的三個參數:輸入路徑,存放KMeans的中心的路徑,輸出路徑,中間空格隔開。

分別為

hdfs://192.168.56.171:9000/cluster

hdfs://192.168.56.171:9000/center

hdfs://192.168.56.171:9000/ouput

這裡的IP可以填寫自己的IP地址或者localhost

Step6: 修改部分配置代碼,具體代碼可以參考如下:

主程序KMeans.java

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class KMeans {
 
 public static void main(String[] args) throws Exception
 {
  CenterInitial centerInitial = new CenterInitial();
  centerInitial.run(args);
  int times=0;
  double s = 0,shold = 0.0001;
  do {
   Configuration conf = new Configuration();
   conf.set("fs.default.name", "hdfs://192.168.56.171:9000");
   Job job = new Job(conf,"KMeans");
   job.setJarByClass(KMeans.class);
   job.setOutputKeyClass(Text.class);
   job.setOutputValueClass(Text.class);
   job.setMapperClass(KMapper.class);
   job.setMapOutputKeyClass(Text.class);
   job.setMapOutputValueClass(Text.class);
   job.setReducerClass(KReducer.class);
   FileSystem fs = FileSystem.get(conf);
   fs.delete(new Path(args[2]),true);
   FileInputFormat.addInputPath(job, new Path(args[0]));
   FileOutputFormat.setOutputPath(job, new Path(args[2]));
   job.waitForCompletion(true);
   if(job.waitForCompletion(true))
   {
    NewCenter newCenter = new NewCenter();
    s = newCenter.run(args);
    times++;
   }
  } while(s > shold);
  System.out.println("Iterator: " + times); 
 }

}

Copyright © Linux教程網 All Rights Reserved