究Mahout平台第三天

7 篇文章 0 订阅
7 篇文章 0 订阅
研究Mahout平台第三天
   今天目标:
         研究k-means算法的调用方式和代码:
    1.首先建一个map/reduce工程。
    2.建一个包mahoutTest,在包下建一个类:kMeans.java。现在什么也没有。
    3.看看mahout的例子程序,找到源代码。
         3.1在工程下建一个包,将mahout-core-0.5-cdh3u6.jar,mahout-core-0.5-cdh3u6-job.jar,mahout-examples-0.5-cdh3u6.jar,mahout-examples-0.5-cdh3u6-job.jar,mahout-math-0.5-cdh3u6.jar,mahout-utils-0.5-cdh3u6.jar拷贝到lib文件夹中。配置到工程,并配置每个jar包的源代码。
       3.1.1 在配置 mahout-core-0.5-cdh3u6-job.jar的源代码时发现了以下问题: 
            1.com包和javax包下的类不能找到源代码?一个googole的源代码,一个是javax的源代码。还有thoutworks.xstream的源代码。
            2.只有 org.apache.mahout下的源代码可以在mahout包中的core的src下找到?
      3.1.2 在配置mahout-examples-0.5-cdh3u6-job.jar包的源代码时和3.1发现的问题一样,可能是打包时将所引用的包类自动打包到当前jar包导致。另外有很多不明白的问题:
            1.meta问价夹下有一个maven包。里面有很多的文件夹,都是一些公用程序包,包中有两个文件:
                1.pom.xml  xmlns指向了:http://maven.apache.org/POM/4.0.0
                2.pom.properties
            2.这个和maven有关,有机会学习一下!
       3.2.查看org.apache.mahout.clustering.syntheticcontrol.kmeans.Job的源代码:
            3.2.1 必须找出指定的haoop的地址代码段。
                  查看到以下代码:
        public  static  void  main(String[] args)  throws  Exception {
     if  (args.  length  > 0) {
       log .info(  "Running with only user-supplied arguments"  );
      ToolRunner. run( new  Configuration(),  new  Job(), args);
    }  else  {
      //先看没有参数的情况
       log .info(  "Running with default arguments"  );
       Path output =  new  Path( "output"  );
      //hadoop服务地址是在这里默认的
       Configuration conf =  new  Configuration();
      //删除已经生成的结果
       HadoopUtil. delete(conf, output);
      //运行k-means算法处理数据
         new  Job().run(conf,  new  Path( "testdata"  ), output, new  EuclideanDistanceMeasure(), 6, 0.5, 10);
     }
    }
       3.2.2 新建我自己的 KMeansJob类,将job中的代码粘贴!
          3.2.2.1 修改 Configuration  中的配置项。
             1.我先运行一下,看看错误!意料之中出现错误,但是是shell错误,可能是程序试图将haoop平台在本机启动起来。
             2.使用   conf.set(name,String )方法,设置配置项。   
                   String hostIp =  "191.168.2.26" ;
                  
                             conf.set( "hadoop.job.ugi" ,  "glw" );
                   conf.set(  "mapred.job.tracker" , hostIp +  ":9001"  );
                  conf.set(  "fs.default.name" ,  "hdfs://"  + hostIp +  ":9000" );
               试验!
出现了以下错误:
13/05/06 10:58:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ERROR security.UserGroupInformation:  PriviledgedActionException  as:Administrator (auth:SIMPLE)
               1.可能是服务器和客户端版本不对导致的问题,将程序包更换后发现不是这个问题。
               2.可能还是ip设置的问题,和以前写的程序进行比对,发现不是这个问题。
               3.注意第三个异常,
                  1.上网搜索,有说是因为直接使用ip的原因,试着修改为hostname,程序修改后没有解决问题。
               4.还是因为应用在本地执行导致的问题,如何将程序提交到服务器执行。
                  初步查看到代码的这一句:
                     log  .info( "Preparing Input" );
                     InputDriver. runJob (input, directoryContainingConvertedInput, "org.apache.mahout.math.RandomAccessSparseVector"  );
                    runJob方法中new了一个 Configuration里面没有Ip配置导致的问题。
    好吧!再运行一次,这次好了,看来就是代码的问题。

               5.如果我不管当前的问题,只是定义算法调用的webservice接口。可将当前问题规避过去。
                        6.我需要知道输入格式,和输出格式。如何将输出文件下载到本地。
7.使用wordcount 验证目前mahout程序。
        当前程序自动提取的用户名不对。 把本地windows的administrator提取到了? 
            使用以下代码:  conf.set( "hadoop.job.user" ,  "glw" );这一句在我的程序中不起作用。我通过这种代码暂时解决问题:                   Path output =  new  Path( "/user/glw/output"  );
     出现以下异常:
         java.lang.RuntimeException  :  java.lang.ClassNotFoundException : mahoutTest.WordCount1$TokenizerMapper
     应该是和这个警告有 关:
      13/05/06 15:13:51 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
      网上说增加一句代码:
  job.setJarByClass(WordCount1.  class );  就可以了,可是我的还是不行。
    解决方法: 先给自己的程序打成jar包,然后放到工程的根目录下,然后在代码中添加
          JobConf conf=new JobConf();
          conf.setJar("pr.jar");

异常 总算变了,变成了以下异常:
    java.lang.IllegalStateException  : No clusters found. Check your -c path.    
悲剧了,网上搜不到了。
   整个执行过程是这样的:
13/05/06 16:08:59 INFO mapreduce.Job: Running with default arguments
13/05/06 16:09:00 INFO mapreduce.Job: Preparing Input
13/05/06 16:09:00 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
13/05/06 16:09:01 INFO input.FileInputFormat: Total input paths to process : 1
13/05/06 16:09:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
13/05/06 16:09:01 WARN snappy.LoadSnappy: Snappy native library not loaded
13/05/06 16:09:02 INFO mapred.JobClient: Running job: job_201305052023_0010
13/05/06 16:09:03 INFO mapred.JobClient:  map 0% reduce 0%
13/05/06 16:09:11 INFO mapred.JobClient:  map 100% reduce 0%
13/05/06 16:09:11 INFO mapred.JobClient: Job complete: job_201305052023_0010
13/05/06 16:09:11 INFO mapred.JobClient: Counters: 17
13/05/06 16:09:11 INFO mapred.JobClient:   Job Counters
13/05/06 16:09:11 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=7197
13/05/06 16:09:11 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/05/06 16:09:11 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/05/06 16:09:11 INFO mapred.JobClient:     Launched map tasks=1
13/05/06 16:09:11 INFO mapred.JobClient:     Data-local map tasks=1
13/05/06 16:09:11 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=0
13/05/06 16:09:11 INFO mapred.JobClient:   FileSystemCounters
13/05/06 16:09:11 INFO mapred.JobClient:     HDFS_BYTES_READ=288495
13/05/06 16:09:11 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=56162
13/05/06 16:09:11 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=335470
13/05/06 16:09:11 INFO mapred.JobClient:   Map-Reduce Framework
13/05/06 16:09:11 INFO mapred.JobClient:     Map input records=600
13/05/06 16:09:11 INFO mapred.JobClient:     Physical memory (bytes) snapshot=36831232
13/05/06 16:09:11 INFO mapred.JobClient:     Spilled Records=0
13/05/06 16:09:11 INFO mapred.JobClient:     CPU time spent (ms)=260
13/05/06 16:09:11 INFO mapred.JobClient:     Total committed heap usage (bytes)=16056320
13/05/06 16:09:11 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=375001088
13/05/06 16:09:11 INFO mapred.JobClient:     Map output records=600
13/05/06 16:09:11 INFO mapred.JobClient:     SPLIT_RAW_BYTES=121
13/05/06 16:09:11 INFO mapreduce.Job: Running random seed to get initial clusters
13/05/06 16:09:11 INFO compress.CodecPool: Got brand-new compressor
13/05/06 16:09:11 INFO kmeans.RandomSeedGenerator: Wrote 6 vectors to /user/glw/output/clusters-0/part-randomSeed
13/05/06 16:09:11 INFO mapreduce.Job: Running KMeans
13/05/06 16:09:11 INFO kmeans.KMeansDriver: Input: /user/glw/output/data Clusters In: /user/glw/output/clusters-0/part-randomSeed Out: /user/glw/output Distance: org.apache.mahout.common.distance.EuclideanDistanceMeasure
13/05/06 16:09:11 INFO kmeans.KMeansDriver: convergence: 0.5 max Iterations: 10 num Reduce Tasks: org.apache.mahout.math.VectorWritable Input Vectors: {}
13/05/06 16:09:11 INFO kmeans.KMeansDriver: K-Means Iteration 1
13/05/06 16:09:11 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
13/05/06 16:09:12 INFO input.FileInputFormat: Total input paths to process : 1
13/05/06 16:09:13 INFO mapred.JobClient: Running job: job_201305052023_0011
13/05/06 16:09:14 INFO mapred.JobClient:  map 0% reduce 0%
13/05/06 16:09:22 INFO mapred.JobClient: Task Id : attempt_201305052023_0011_m_000000_0, Status : FAILED
java.lang.IllegalStateException  : No clusters found. Check your -c path.
      at org.apache.mahout.clustering.kmeans.KMeansMapper.setup( KMeansMapper.java:60 )
      at org.apache.hadoop.mapreduce.Mapper.run(  Mapper.java:142 )
      at org.apache.hadoop.mapred.MapTask.runNewMapper(  MapTask.java:648 )
      at org.apache.hadoop.mapred.MapTask.run(  MapTask.java:322 )
      at org.apache.hadoop.mapred.Child$4.run(  Child.java:266 )
      at java.security.AccessController.doPrivileged(  Native Method )
      at javax.security.auth.Subject.doAs(  Subject.java:396 )
      at org.apache.hadoop.security.UserGroupInformation.doAs( UserGroupInformation.java:1278 )
      at org.apache.hadoop.mapred.Child.main(  Child.java:260 )
可以看到,第一次迭代是成功的,但是算法处理结果的聚类个数为0。将程序在服务器本地运行,也是该问题。
难道是cdh3u6的bug?好吧,我换回来试试!
    果然是版本问题!

   我去:

插件崩溃了!找找原因!我需要使用插件源代码工程运行插件,这样我就能看到运行时的控制台了。
重新启动后看不到错误了,原因是由于导致该错误的文件夹已经不存在了,看来是插件的bug。

今日总结:
      尝试新的版本总会带来新的问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值