我想在hadoop平台上使用web级并行推理机(webpie)推理器。我已经用两个ubuntu虚拟机实现了hadoop结构,并且运行良好。当我想用webpie对rdf文件进行推理时,由于需要序列文件格式,这个过程失败了。webpie教程没有提到序列文件格式是hadoop推理的先决条件。为了生成序列文件格式,我编写了以下代码:
public static void main(String[] args) {
FileInputStream fis = null;
SequenceFile.Writer swriter = null;
try {
Configuration conf = new Configuration();
File outputDirectory = new File("output");
File inputDirectory = new File("input");
File[] files = inputDirectory.listFiles();
for (File inputFile : files) {
//Input
fis = new FileInputStream(inputFile);
byte[] content = new byte[(int) inputFile.length()];
fis.read(content);
Text key = new Text(inputFile.getName());
BytesWritable value = new BytesWritable(content);
//Output
Path outputPath = new Path(outputDirectory.getAbsolutePath()+"/"+inputFile.getName());
FileSystem hdfs = outputPath.getFileSystem(conf);
FSDataOutputStream dos = hdfs.create(outputPath);
swriter = SequenceFile.createWriter(conf, dos, Text.class,
BytesWritable.class, SequenceFile.CompressionType.BLOCK, new DefaultCodec());
swriter.append(key, value);
}
fis.close();
swriter.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
这段代码使用一些rdf文件生成正确的序列文件格式,但不能100%正确地工作,有时还会生成损坏的文件。从一开始是否有任何解决方案可以避免此代码,如果没有,我如何改进此代码以正确地使用任何rdf文件作为输入?
2条答案
按热度按时间hrirmatl1#
例如,输入数据必须由n-triples格式的gzip压缩文件组成(triplepart1.gz,triplepart2.gz….),因此我们有:input_triples.tar.gz,它包含n-triples压缩文件(triplepart1.gz,triplepart2.gz….)。
解压缩tar文件并将内容复制到hdfs
---/hadoop$tar zxvf/tmp/input\u triples.tar.gz/tmp/input\u triples。
---/hadoop$bin/hadoop fs-copyfromlocal/tmp/input files/input。
压缩输入数据
---/hadoop$bin/hadoop jar webpie.jar jobs.filesmimporttriples/input/tmp/pool--maptasks 4--reducetasks 2--samplingpercentage 10--samplingthreshold 1000
推理
---/hadoop$bin/hadoop jar webpie.jar jobs.reasoner/pool--fragment owl--rulessstrategy fixed--reducetasks 2--samplingpercentage 10--samplingthreshold 1000
在此继续:-)
irtuqstp2#
本教程基于在amazonec2上运行webpie,因此在配置上可能会有一些差异。但是,请注意,根据教程,输入的不是普通的rdf文件,而是“n-triples格式的gzip压缩的triples文件”(原文强调):
在启动reasoner之前,我们需要将输入数据上传到hdfs文件系统并以适当的格式压缩它。输入数据必须由n-triples格式的gzip压缩文件组成。尽量将文件保持在相似的大小,并且拥有比cpu内核更多的文件,因为每个文件都将由一台机器处理。
该教程的第二部分“第2步:在集群上上传输入数据”描述了如何将数据实际地导入系统,看起来它应该应用于amazonec2以及您自己的hadoop安装。我不想在这里简单地引用这一节的全部内容,但它们给出的命令顺序是:
不过,这只能将数据输入hdfs。在“第三步:压缩输入数据”中,
推理器以压缩格式处理数据。我们使用以下命令压缩数据:
…上面的命令可以理解为:启动压缩并将作业分为4个map任务和2个reduce任务,使用10%的数据对输入进行采样,并将此示例中出现超过1000次的所有资源标记为popular。
完成这项工作后,我们在目录/池中有压缩的输入数据,我们可以继续推理。
剩下的部分将讨论推理、获取数据等等,这应该不是问题,我想,一旦您获得了数据。