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文件作为输入?
本教程基于在 Amazon EC2 上运行 WebPIE,因此配置可能存在一些差异。但请注意,根据教程,输入不是普通的 RDF 文件,而是 \xe2\x80\x9cgzipped 的 N-三元组格式的三元组压缩文件\xe2\x80\x9d(原文中强调):
\n\n\n在启动 Reasoner 之前,我们需要将输入数据上传到 HDFS 文件系统并以合适的格式压缩。输入数据必须由N-Triples 格式的三元组 gzip 压缩文件组成。尝试保持文件大小相似,并且文件数量多于 CPU 核心数,因为每个文件将由一台机器处理。
\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\nRun Code Online (Sandbox Code Playgroud)\n不过,这只能将数据存入 HDFS。在\xe2\x80\x9c 第 3 步:压缩输入数据\xe2\x80\x9d,
\n\n\n推理器以压缩格式处理数据。我们使用以下命令压缩数据:
\nRun Code Online (Sandbox Code Playgroud)\nhadoop jar webpie.jar jobs.FilesImportTriples /input /tmp /pool --maptasks 4 --reducetasks 2 --samplingPercentage 10 --samplingThreshold 1000\n\xe2\x80\xa6 上面的命令可以理解为:启动压缩并将作业拆分为 4 个映射任务和 2 个化简任务,使用 10% 的数据对输入进行采样,并将出现更多的所有资源标记为流行在此样本中超过 1000 次。
\n完成此工作后,我们在目录 /pool 中拥有压缩的输入数据,我们可以继续推理。
\n
其余部分讨论推理、获取数据等等,我希望一旦您输入数据,这应该不是问题。
\n\n