nutch抓取数据后,生成五个文件夹:crawldb、index、indexs、linkdb和segments,这五个文件夹具体存放什么内容,前面文章里有解释,每个文件夹下,最后就是data和index文件
看了一下将segment目录导出文本数据的源码SegmentReader.java,发现要用到MapFile类,而MapFile类中又要用到SequenceFile
MapFile.java类是创建data和index的类,它主要是用SequenceFile.java中的内部类和方法进行读写操作,所以理解SequenceFile类是很重要的
SequeceFile是Hadoop API提供的一种二进制文件支持。这种二进制文件直接将<key, value>对序列化到文件中。
1.nutch爬虫中产生的文件一般存放都是这种结构,按照key进行排序,value存放信息,直接以文本形式打不开,每个文件目录下,都对应一个index和data,这两个文件是必须一起用还是可以分开用呢?
答:为了方便查看nutch抓取数据结果,nutch提供了导出命令,在执行dump命令时,即将数据以文本形式导出:
查看crawldb数据库,导出数据:bin/nutch readdb output/crawldb/ -dump crawldb(导出的地址)
这时候只用到data,可以不用index,index文件就是一个索引,例如:bin/nutch readseg -get output/segments/20110727060701/ http://www.baidu.com/,这个命令是根据key(这里是http://www.baidu.com)获取value值,会直接将结果以文本形式打在终端,这个时候需要index,是根据它在data中查找value的
“index文件用来存放索引,但是这个索引文件也是一个有序的,这个里面存放的是key和位置信息,但是在data文件中出现的key在这个index中都能找到的,它为了节省空间,实施了每隔一段 key/value建立一条索引,这样在查找的时候,因为是有序的,所以采用2分查找,如果找不到,则返回最后时候的最小的位置信息,这个位置离我们要找的目标是相当近的,然后在data文件的这个位置向前找就可以很快找到了” ----详见参考资料1
nutch的导出命令详见参考资料3
2.因为nutch中产生的文件都是SequeceFile的,所以准备直接用它来作为输入,转成mahout的输入向量,用mahout提供的将SequeceFile文件转向量或导出文本时报错
把parse_text传到hdfs上,用mahout seq2sparse --input /user/temp --ouput /user/test/testdata 命令,提示报错,说找不到nutch.parse.parseText包
用mahout seqdumper -s /tmp/seq/data,也是提示没有nutch.parse.ParseText类,其中data是nutch的parse_text中的data
seqdumper是用来将SequenceFile格式转成可看的文本格式的
seq2sparse 是用来将SequeceFile文件转成mahout向量文件的
难道说,mahout输入向量的生成必须是mahout命令转化的SequeceFile文件才行?
3.mahout kmeans输入参数
前面弄错了一个问题,那就是mahout入门测试的例子中,用的是mahout-examples-0.4-job.jar,数据集直接用的uci上的synthetic_control.data
如果是将lucene索引转成向量后,这时候不能用mahout-examples-0.4-job.jar去运行mahout kmeans,格式不一致,此时可以手动运行mahout kmeans -i /user/test/testdata -o /user/test/output -c /user/test/output/cluster -x 5
-i:是输入向量路径
-o:是输出路径
-c:初始输入质心,如果k指定了,就随机从输入向量中选定
-x:是最大迭代次数
可问题是将索引转成向量后,聚类结果也是向量形式,根本不知道原始文本是怎么聚在一起的啊?
参考资料:
1.http://blog.csdn.net/forwen/article/details/4804733
2.SequenceFile介绍 :http://blog.163.com/jiayouweijiewj@126/blog/static/17123217720101121103928847/
3.http://blog.163.com/bit_runner/blog/static/53242218201141393943980/
4.http://blog.163.com/jiayouweijiewj@126/blog/static/171232177201011475716354/