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

use*_*327 5 hadoop rdf reasoning

我想在Hadoop平台上使用Web规模的并行推理引擎(WebPIE)推理器.我已经使用两个Ubuntu虚拟机实现了Hadoop结构,并且运行良好.当我想使用WebPie对RDF文件进行推理时,由于需要序列文件格式,该过程失败.该WebPIE教程只字不提序列文件格式为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());
    }

}
Run Code Online (Sandbox Code Playgroud)

此代码生成带有一些RDF文件的正确序列文件格式,但不能100%正确工作,有时会生成损坏的文件.是否有任何解决方案从开始避免此代码,如果没有,我如何改进此代码以正确使用任何RDF文件作为输入?

Jos*_*lor 0

本教程基于在 Amazon EC2 上运行 WebPIE,因此配置可能存在一些差异。但请注意,根据教程,输入不是普通的 RDF 文件,而是 \xe2\x80\x9cgzipped 的 N-三元组格式的三元组压缩文件\xe2\x80\x9d(原文中强调):

\n
\n

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

\n
\n

该教程的第二部分\xe2\x80\x9c 第二步:在集群上上传输入数据\xe2\x80\x9d描述了如何实际将数据获取到系统中,看起来它也应该适用于 Amazon EC2作为您自己的 Hadoop 安装。我不想在这里简单地引用该部分的全部内容,但它们给出的命令顺序是:

\n
$ ./cmd-hadoop-cluster login webpie\n$ hadoop fs -ls /\n$ hadoop fs -mkdir /input\n$ ./cmd-hadoop-cluster push webpie input_triples.tar.gz\n
Run Code Online (Sandbox Code Playgroud)\n

不过,这只能将数据存入 HDFS。在\xe2\x80\x9c 第 3 步:压缩输入数据\xe2\x80\x9d

\n
\n

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

\n
hadoop jar webpie.jar jobs.FilesImportTriples /input /tmp /pool --maptasks 4 --reducetasks 2 --samplingPercentage 10 --samplingThreshold 1000\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 上面的命令可以理解为:启动压缩并将作业拆分为 4 个映射任务和 2 个化简任务,使用 10% 的数据对输入进行采样,并将出现更多的所有资源标记为流行在此样本中超过 1000 次。

\n

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

\n
\n

其余部分讨论推理、获取数据等等,我希望一旦您输入数据,这应该不是问题。

\n\n