究Mahout平台第三天
来源:互联网 发布:ubuntu 修改用户密码 编辑:程序博客网 时间:2024/05/22 00:43
研究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( "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。
今日总结:
尝试新的版本总会带来新的问题。
- 究Mahout平台第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 第三天
- 指针总结---很好很全面很强大(指针类型转换)
- 关于带Tab的Android应用
- 预编译头的使用【转】
- spring定时器
- database in messaging
- 究Mahout平台第三天
- 猜数字
- JVM类加载初始化学习笔记(转载)
- poj 2749 & hdu 1815 Building roads(2-SAT + 二分,好题)
- http500.21解决办法
- 大小段序 判断
- js计算
- [又一血的教训]No JNI_OnLoad found in libpocketsphinx_jni.so
- 【备份】Facebook IPS