S2X环境搭建与示例运行

S2X环境搭建与示例运行

http://dbis.informatik.uni-freiburg.de/forschung/projekte/DiPoS/S2X.html

环境

  • Maven project
  • Built in Eclipse
    • Eclipse 3.8/4.2/4.3 (Juno & Kepler)
    • Juno https://www.eclipse.org/downloads/packages/release/juno/sr2
    • Kepler https://www.eclipse.org/downloads/packages/release/kepler/sr2
  • The Eclipse Plug-Ins M2E (Version 1.5.0)
  • Scala plugin from scala-ide.org (Version 3.0.3v-2_10...)
    • The 3.0.3 release is the third maintenance release of the 3.0 version.
    • It is available for Scala 2.10, on Eclipse 3.8/4.2/4.3 (Juno & Kepler).

依赖

根据 pom.xml 文件,S2X 主要有以下六个依赖包

  • https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10/1.2.0-cdh5.3.0
  • https://mvnrepository.com/artifact/org.apache.spark/spark-graphx_2.10/1.2.0-cdh5.3.0
  • https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client/2.5.0-mr1-cdh5.3.0
  • https://mvnrepository.com/artifact/org.apache.jena/jena-arq/2.11.2
  • https://mvnrepository.com/artifact/com.esotericsoftware.kryo/kryo/2.24.0
  • https://mvnrepository.com/artifact/junit/junit/4.11

结构

java文件名 引用包 功能
QueryExecutor.java log4j:一个打日志的包
spark:操作spark的包
jena:用于操作sparql的包
1. 将args交给 ArgumentParser 解析
2. 使用SparkFacade创建spark上下文
3. 使用SparkFacade加载 HDFS (实例层)文件
4. 处理查询语句
- 使用IntermediateResultsModel清理中间值
- 使用jena.query.QueryFactory解析并生成query对象、处理前缀、编译query
- 使用AlgebraTranslator从opRoot开始对query进行重写,并获得可执行序列
- 通过SparkOp.execute()开始执行顺序序列中元素
ArgumentParser.java cls:一个处理命令行的包
log4j:一个打日志的包
de.tf.uni.freiburg.sparkrdf.constants.Const:工程内另一个包
1. 解析命令行参数
2. 将参数传递至de.tf.uni.freiburg.sparkrdf.constants.Const中

环境搭建步骤

  1. 安装并配置好 jdk1.7jdk1.8
  2. 访问网站,下载并安装 Eclipse Kepler Package 并解压,建议选择 JavaEE 并使用国内镜像下载
  3. 配置 Maven 环境

    • 访问 http://maven.apache.org/download.cgi 下载 Maven
    • 新建环境变量 MAVEN_HOME ,并将 %MAVEN_HOME%\bin 加入 path
    • 修改 %MAVEN_HOME%\conf\settings.xml
      • 添加本地仓库:请选择一个非管理员目录
      • 添加远程仓库:可选择国内阿里镜像或其他可访问镜像
    • 配置 Eclipse 中 Maven
      • Window->preference->Maven->installations :选择上一步安装的 Maven
      • Window->preference->Maven->user settings :配置 Maven 设置
        • 选择 settings.xml
        • 更新 Local Repository
      • 可参考
        • https://www.cnblogs.com/pengyan-9826/p/7767070.html
        • https://jingyan.baidu.com/article/59703552cb9b988fc00740a4.html
  4. 配置scala环境

    • 访问 https://www.scala-lang.org/download/2.10.6.html 下载 Scala 2.10.6
      • 可下载 scala.msi 或 scala-2.10.6.zip ,但我还没弄明白这两个有什么区别
    • 配置 Eclipse 中 Scala
      • 访问 http://scala-ide.org/download/prev-stable.html
      • 选择对应版本 http://download.scala-ide.org/sdk/helium/e38/scala210/stable/site (我没弄明白应该用哪个版本,然后选了2.10.4的)
      • Help->Install New Software->粘贴->Add->下载安装
      • 下载 Scalastyle 插件
  5. 配置spark环境

    • 根据 pom.xml 中的信息,理论上应该下载基于 Scala 2.10Spark 1.2-CDH5.3.0版本,然而我并找不到。。暂时下载了spark-1.6.0-bin-hadoop2.6.tgz
    • 解压,并将 bin 目录加入 path
  6. 配置hadoop环境

    • 根据上一步,下载hadoop2.6.0
    • 解压,新建环境变量 HADOOP_HOME ,并填入解压目录(很关键)
    • 将 bin 目录加入 path
    • 开启 cmd,运行 spark-shell,若出现"java.lang.NullPointerException, not found: value sqlContext",请参考连接:https://blog.csdn.net/u011242657/article/details/53968135
    • 最后新建 cmd 窗口,运行 spark-shell,出现以下两句话,视为 spark 与 hadoop 环境配置成功,参考:Spark在Windows下的环境搭建
      • Spark context available as sc.
      • SQL context available as sqlContext.

关于 5、6 两步,官方推荐使用 Cloudera's Distribution of Hadoop CDH,我暂时也没有弄明白 CDH 是什么

运行项目

  1. 从 github 仓库 clone 项目
  2. 打开Eclipse Kepler,File->import->Existing Maven Project->选择仓库中src文件夹,一路确定,等待 Maven 自行下载所有包
  3. 准备好数据,我使用的是里海大学提供的可自动生成的数据集 LUBM1.nt 约包含 13 万条三元组数据。
  4. 如果是在windows上运行代码,需要修改几行代码:

    • 修改 args 参数
      • 由于在 Spark 上运行代码,需要将代码整理为 jar 包的形式,在测试时需要提前设置命令行参数,或者直接在 QueryExecutor.javamain 函数中第一行中修改 args 变量( -l 参数很关键 ):

        args=new String("-i c:/Users/chenyanji/Downloads/S2X_DATA/lubm1.nt " +
                        "-mem 2g " +
                        "-q c:/Users/chenyanji/Downloads/S2X_DATA/query3.new " +
                        "-t c:/Users/chenyanji/Downloads/S2X_DATA/Record.txt " +
                        "-p -l -jn chenyanjiTest").split(" ");
    • 修改 SparkFacade.java
      • 程序开始运行后,首先通过 SparkFacade.LoadGraph() 加载图,LoadGraph 需要先判断路径(父目录与参数目录进行拼接)下是否存在图(看起来使用的是相对父目录的路径),随后根据上一步的参数选择使用哪种方式读取图,这里将路径进行修改
      • 删去 fs.getHomeDirectory().toString()

运行结果:

...
18/10/23 10:00:43 INFO run.QueryExecutor: Started Graph loading
18/10/23 10:00:56 INFO run.QueryExecutor: Finished Graph Loading in 12958 ms
18/10/23 10:00:56 INFO run.QueryExecutor: Started query file: c:/Users/chenyanji/Downloads/S2X_DATA/query3.new
18/10/23 10:00:56 INFO run.QueryExecutor: Started BGP
18/10/23 10:01:05 INFO run.QueryExecutor: Finished BGP in 8713 ms
18/10/23 10:01:05 INFO run.QueryExecutor: Started Result
18/10/23 10:01:06 INFO run.QueryExecutor: Finished Result in 798 ms
18/10/23 10:01:06 INFO run.QueryExecutor: Started Projection
18/10/23 10:01:06 INFO run.QueryExecutor: Finished Projection in 6 ms
18/10/23 10:01:07 INFO run.QueryExecutor: Result count 6
?x

?x

?x

?x

?x

?x

待解决的问题

  1. -so 参数
    • GraphLoader 在加载图时,如果命令中存在 -so 参数,则最后将生成 verticeedge 信息对应的 object 文件,但是文件路径会有一个问题:操作系统中不能存在同名文件与文件夹,因此以本地模式运行代码时不能在参数中添加 -so

你可能感兴趣的:(S2X环境搭建与示例运行)