分布式系统中语义Web的推理

时间:2013-01-21 15:16:44

标签: hadoop rdf reasoning

我想在Hadoop平台上使用Web-scale Parallel Inference Engine (WebPIE)推理器。我已经使用两个Ubuntu虚拟机实现了Hadoop结构,并且运行良好。当我想使用WebPie对RDF文件进行推理时,由于需要序列文件格式,该过程失败。 WebPIE tutorial没有提到序列文件格式作为在Hadoop中推理的先决条件。 为了生成Sequence文件格式,我编写了以下代码:

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 个答案:

答案 0 :(得分:0)

The tutorial基于在Amazon EC2上运行WebPIE,因此配置可能会有所不同。但请注意,根据教程,输入不是普通的RDF文件,而是“以N-Triples格式压缩三元组的压缩文件”(重点是原文):

  

在我们启动推理器之前,我们需要将输入数据上传到HDFS文件系统并以合适的格式压缩它。输入数据必须包含N-Triples格式的 gzip压缩文件三元组。尝试将文件保持为相似的大小,并且拥有比cpu核心更多的文件,因为每个文件将由一台机器处理。

该教程的第二部分“第二步:上传集群上的输入数据”描述了如何将数据实际存入系统,并且它看起来像一样它应该适用于Amazon EC2以及您自己的Hadoop安装。我不想在这里简单地引用该部分,但它们给出的命令序列是:

$ ./cmd-hadoop-cluster login webpie
$ hadoop fs -ls /
$ hadoop fs -mkdir /input
$ ./cmd-hadoop-cluster push webpie input_triples.tar.gz

但这只能将数据传输到HDFS中。在“第3步:压缩输入数据”

  

推理器以压缩格式处理数据。我们使用以下命令压缩数据:

hadoop jar webpie.jar jobs.FilesImportTriples /input /tmp /pool --maptasks 4 --reducetasks 2 --samplingPercentage 10 --samplingThreshold 1000
     

...上面的命令可以理解为:启动压缩并在4个地图任务和2个减少任务之间拆分作业,使用10%的数据对输入进行采样并标记为流行的所有显示超过1000的资源这个样本中的时间。

     

这个工作完成后,我们在目录/池中有压缩的输入数据,我们可以继续推理。

其他部分讨论推理,获取数据等等,一旦你有了数据,这应该不是问题,我希望。

答案 1 :(得分:0)

输入数据必须包含N-Triples格式的三元组压缩文件例如(triplePart1.gz,triplePart2.gz ....),所以我们有:input_triples.tar。 gz包含N-triples的压缩文件(triplePart1.gz,triplePart2.gz ....)。

  1. 解压缩tar文件并将内容复制到HDFS

    --- / hadoop $ tar zxvf /tmp/input_triples.tar.gz / tmp / input_triples。

    --- / hadoop $ bin / hadoop fs -copyFromLocal / tmp / input-files / input。

  2. 压缩输入数据

    --- / hadoop $ bin / hadoop jar webpie.jar jobs.FilesImportTriples / input / tmp / pool --maptasks 4 --reducetasks 2 --samplingPercentage 10 --samplingThreshold 1000

  3. 推理

    --- / hadoop $ bin / hadoop jar webpie.jar jobs.Reasoner / pool --fragment owl --rulesStrategy fixed --reducetasks 2 --samplingPercentage 10 --samplingThreshold 1000

  4. 继续here: - )