mahout贝叶斯分类例子运行及测试异常处理
2012-01-31 11:16
393 查看
运行贝叶斯20news分类例子
测试抛出异常,已经解决,希望各位指教!
同样参照https://cwiki.apache.org/confluence/display/MAHOUT/Twenty+Newsgroups的步骤,其中关于hadoop与mahout的配置启动之类的以前的文章都记录过,此处直接在mahout-0.4上运行例子过程(当然也在mahot-0.3上进行了测试,一切正常)。
首先,下载数据集20news-bydate.tar.gz,在$MAHOUT_HOME下的examples/bin/下建立work文件夹(mkdir /home/hadoop/mahout-distribution-0.4/examples/bin/work/)将下载的数据集解压tar 20news-bydate.tar.gz,之后放到work文件夹下。
其次,产生Input数据集,即对训练数据集进行预处理,数据准备阶段,将各类中的数据进行分词处理,去掉标点及副词等,同时将各类中的文件读入到一个大文件中,使得每类最后只有一个文件包含起初所有的文件,mahout下处理的文件必须是SequenceFile格式的,还需要把txtfile转换成sequenceFile。等处理完看结果时就明白了,命令为$MAHOUT_HOME/bin/./mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups
\
-p /home/hadoop/mahout-distribution-0.4/examples/bin/work/20news-bydate-train \
-o /home/hadoop/mahout-distribution-0.4/examples/bin/work/bayes-train-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
完毕后将work下的bayes-train-input放到hadoop的分布式文件系统上的 20news-input,在hadoop/hadoop-0.20.2/bin输入命令hadoop dfs -put /home/hadoop/mahout-distribution-0.4/examples/bin/work/bayes-train-input 20news-input
第三,用处理好的训练数据集进行训练得出分类模型即中间结果,模型保存在分布式文件系统上,在mahout的目录下输入命令$MAHOUT_HOME/bin/ ./mahout trainclassifier \
-i 20news-input \
-o newsmodel \
-type bayes \
-ng 3 \
-source hdfs
当然可以查看newsmodel里的内容时,先查看其里面都有什么,命令:hadoop fs -lsr /user/hadoop/newsmodel
将其导入到本地txt格式,进行查看,例如命令:./mahout seqdumper -s /user/hadoop/newsmodel/trainer-tfIdf//trainer-tfIdf/part-00000 -o /home/hadoop/out/part-1
最后,用模型进行测试,输入命令$MAHOUT_HOME/bin/ ./mahout testclassifier \
-m newsmodel \
-d 20news-input \
-type bayes \
-ng 3 \
-source hdfs \
-method mapreduce
这里说明下自己理解的参数ng的设置,ng就是作为属性的单词个数,默认为1,就是单个单词作为属性,这里设置为3,但是训练和测试时此参数的值要设置一样。
我运行测试时抛出了异常,如下:
[hadoop@sc706-26 bin]$ ./mahout testclassifier -m newsmodel -d 20news-input -type bayes -ng 3 -source hdfs -method mapreduce
Running on hadoop, using HADOOP_HOME=/home/hadoop/hadoop-0.20.2
HADOOP_CONF_DIR=/home/hadoop/hadoop-0.20.2/conf
10/12/04 11:47:44 INFO common.HadoopUtil: Deleting 20news-input-output
10/12/04 11:47:44 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
10/12/04 11:47:45 INFO mapred.FileInputFormat: Total input paths to process : 20
10/12/04 11:47:46 INFO mapred.JobClient: Running job: job_201012040906_0022
10/12/04 11:47:47 INFO mapred.JobClient: map 0% reduce 0%
10/12/04 11:52:13 INFO mapred.JobClient: Task Id : attempt_201012040906_0022_m_000000_0, Status : FAILED
java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:354)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.Child.main(Child.java:170)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
... 5 more
Caused by: java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:34)
... 10 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
... 13 more
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapCharBuffer.<init>(HeapCharBuffer.java:39)
at java.nio.CharBuffer.allocate(CharBuffer.java:312)
at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:760)
at org.apache.hadoop.io.Text.decode(Text.java:350)
at org.apache.hadoop.io.Text.decode(Text.java:327)
at org.apache.hadoop.io.Text.toString(Text.java:254)
at org.apache.mahout.common.StringTuple.readFields(StringTuple.java:143)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1836)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1876)
at org.apache.mahout.classifier.bayes.io.SequenceFileModelReader.loadFeatureWeights(SequenceFileModelReader.java:99)
at org.apache.mahout.classifier.bayes.io.SequenceFileModelReader.loadModel(SequenceFileModelReader.java:52)
at org.apache.mahout.classifier.bayes.datastore.InMemoryBayesDatastore.initialize(InMemoryBayesDatastore.java:80)
at org.apache.mahout.classifier.bayes.model.ClassifierContext.initialize(ClassifierContext.java:47)
at org.apache.mahout.classifier.bayes.mapreduce.bayes.BayesClassifierMapper.configure(BayesClassifierMapper.java:135)
... 18 more
出错原因:java.lang.OutOfMemoryError: Java heap space内存溢出
解决方法:在hadoop-0.20.2/conf/mapred-site.xml里设置一下hadoop的mapred.child.java.opts,将其设定为你计算机内存的一半就可以啦,(linux查看内存的命令是:free -m)我的是1G的,设成512M,<name>mapred.child.java.opts</name>
<value>-Xmx512M</value>,没设之前查看日志我的默认是200M。再有种方法是换个大点的内存,设置完后测试正常,在终端直接就可以看见结果,如下图是我测试时的结果:
当然我们可以用web接口方式查看job运行时的情况有无异常等,http://localhost:50030/jobtracker.jsp。
测试抛出异常,已经解决,希望各位指教!
同样参照https://cwiki.apache.org/confluence/display/MAHOUT/Twenty+Newsgroups的步骤,其中关于hadoop与mahout的配置启动之类的以前的文章都记录过,此处直接在mahout-0.4上运行例子过程(当然也在mahot-0.3上进行了测试,一切正常)。
首先,下载数据集20news-bydate.tar.gz,在$MAHOUT_HOME下的examples/bin/下建立work文件夹(mkdir /home/hadoop/mahout-distribution-0.4/examples/bin/work/)将下载的数据集解压tar 20news-bydate.tar.gz,之后放到work文件夹下。
其次,产生Input数据集,即对训练数据集进行预处理,数据准备阶段,将各类中的数据进行分词处理,去掉标点及副词等,同时将各类中的文件读入到一个大文件中,使得每类最后只有一个文件包含起初所有的文件,mahout下处理的文件必须是SequenceFile格式的,还需要把txtfile转换成sequenceFile。等处理完看结果时就明白了,命令为$MAHOUT_HOME/bin/./mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups
\
-p /home/hadoop/mahout-distribution-0.4/examples/bin/work/20news-bydate-train \
-o /home/hadoop/mahout-distribution-0.4/examples/bin/work/bayes-train-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
完毕后将work下的bayes-train-input放到hadoop的分布式文件系统上的 20news-input,在hadoop/hadoop-0.20.2/bin输入命令hadoop dfs -put /home/hadoop/mahout-distribution-0.4/examples/bin/work/bayes-train-input 20news-input
第三,用处理好的训练数据集进行训练得出分类模型即中间结果,模型保存在分布式文件系统上,在mahout的目录下输入命令$MAHOUT_HOME/bin/ ./mahout trainclassifier \
-i 20news-input \
-o newsmodel \
-type bayes \
-ng 3 \
-source hdfs
当然可以查看newsmodel里的内容时,先查看其里面都有什么,命令:hadoop fs -lsr /user/hadoop/newsmodel
将其导入到本地txt格式,进行查看,例如命令:./mahout seqdumper -s /user/hadoop/newsmodel/trainer-tfIdf//trainer-tfIdf/part-00000 -o /home/hadoop/out/part-1
最后,用模型进行测试,输入命令$MAHOUT_HOME/bin/ ./mahout testclassifier \
-m newsmodel \
-d 20news-input \
-type bayes \
-ng 3 \
-source hdfs \
-method mapreduce
这里说明下自己理解的参数ng的设置,ng就是作为属性的单词个数,默认为1,就是单个单词作为属性,这里设置为3,但是训练和测试时此参数的值要设置一样。
我运行测试时抛出了异常,如下:
[hadoop@sc706-26 bin]$ ./mahout testclassifier -m newsmodel -d 20news-input -type bayes -ng 3 -source hdfs -method mapreduce
Running on hadoop, using HADOOP_HOME=/home/hadoop/hadoop-0.20.2
HADOOP_CONF_DIR=/home/hadoop/hadoop-0.20.2/conf
10/12/04 11:47:44 INFO common.HadoopUtil: Deleting 20news-input-output
10/12/04 11:47:44 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
10/12/04 11:47:45 INFO mapred.FileInputFormat: Total input paths to process : 20
10/12/04 11:47:46 INFO mapred.JobClient: Running job: job_201012040906_0022
10/12/04 11:47:47 INFO mapred.JobClient: map 0% reduce 0%
10/12/04 11:52:13 INFO mapred.JobClient: Task Id : attempt_201012040906_0022_m_000000_0, Status : FAILED
java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:354)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.Child.main(Child.java:170)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
... 5 more
Caused by: java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:34)
... 10 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
... 13 more
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapCharBuffer.<init>(HeapCharBuffer.java:39)
at java.nio.CharBuffer.allocate(CharBuffer.java:312)
at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:760)
at org.apache.hadoop.io.Text.decode(Text.java:350)
at org.apache.hadoop.io.Text.decode(Text.java:327)
at org.apache.hadoop.io.Text.toString(Text.java:254)
at org.apache.mahout.common.StringTuple.readFields(StringTuple.java:143)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1836)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1876)
at org.apache.mahout.classifier.bayes.io.SequenceFileModelReader.loadFeatureWeights(SequenceFileModelReader.java:99)
at org.apache.mahout.classifier.bayes.io.SequenceFileModelReader.loadModel(SequenceFileModelReader.java:52)
at org.apache.mahout.classifier.bayes.datastore.InMemoryBayesDatastore.initialize(InMemoryBayesDatastore.java:80)
at org.apache.mahout.classifier.bayes.model.ClassifierContext.initialize(ClassifierContext.java:47)
at org.apache.mahout.classifier.bayes.mapreduce.bayes.BayesClassifierMapper.configure(BayesClassifierMapper.java:135)
... 18 more
出错原因:java.lang.OutOfMemoryError: Java heap space内存溢出
解决方法:在hadoop-0.20.2/conf/mapred-site.xml里设置一下hadoop的mapred.child.java.opts,将其设定为你计算机内存的一半就可以啦,(linux查看内存的命令是:free -m)我的是1G的,设成512M,<name>mapred.child.java.opts</name>
<value>-Xmx512M</value>,没设之前查看日志我的默认是200M。再有种方法是换个大点的内存,设置完后测试正常,在终端直接就可以看见结果,如下图是我测试时的结果:
当然我们可以用web接口方式查看job运行时的情况有无异常等,http://localhost:50030/jobtracker.jsp。
相关文章推荐
- 极限测试之Matlab与Forcal的错误(异常)处理
- “Web请求在未运行测试的情况下成功完成。”的处理方法。
- 问题:运行时出现以下错误:出现未处理的“System.Xml.XmlException”类型的异常出现在 system.xml.dll 中
- Android SurfaceView运行机制剖析--处理切换到后台再重新进入程序时的异常
- Java的一些高级特性(五)——测试和异常处理
- 存储过程错误异常处理例子 --> DECLARE EXIT HANDLER FOR SQLEXCEPTION (转)
- [WinForm]只能运行一个实例以及全局异常处理
- 运行dxp.exe运行时,软件出现:应用程序发生异常 未知的软件异常 (0x0eedfade),位置为 0x7c812afb的处理方法
- 程序集引用异常 处理 app.config内控制runtime运行时应用的程序集版本指向 assemblyBinding结点 bindingRedirect
- mahout中k-means例子的运行
- Intel和Microsoft C++编译器在矩阵乘法测试例子中运行时间的差异
- WinForm的Program.cs处理:全局异常&单例运行
- Java千百问_04异常处理(006)_常见的Java异常有哪些(运行时)
- SURFACEVIEW运行机制详解—剖析BACK与HOME按键及切入后台等异常处理
- 在Spring中异常处理机制实例测试
- “基于 Apache Mahout 构建社会化推荐引擎”一文例子运行纪实(引用)
- AppDomain的两个小技巧(程序运行完毕和未处理异常的处理) 捕获未处理异常
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到
- Android运行异常处理: You cannot combine custom titles with other title features
- 常见的运行时异常(RuntimeException) 和 复制中的异常处理