Apache Rya 配置参数详解

Apache Rya 4.0.1 配置参数详解:通用键位(query.tblprefix 默认 rya_、tbl.spo/po/osp/ns)、Accumulo 连接键位与 web.rya environment.properties 映射

Apache RyaApache Rya2026/10/13

Apache Rya 配置参数详解

目标:详解 Apache Rya 4.0.1 的配置参数体系。Rya 是库形态组件,配置分三层:RdfCloudTripleStoreConfiguration 通用键位(表布局/查询行为/推断开关)、AbstractAccumuloRdfConfigurationBuilder 的 Accumulo 连接键位、web.rya 的 environment.properties 映射。本文列出键位、默认值与实测验证结果(含 RyaShell print-instance-details 回显),所有键位来自 4.0.1 源码与 Ubuntu 22.04 + JDK 8 实测环境。

⚠️ 受限前置说明:Rya 主存储必须为 Accumulo(含 ZooKeeper、Hadoop 依赖),无独立 standalone 模式;配置键位面向 Accumulo 后端(accumulo.* 前缀),MongoDB 后端为实验性 profile(install-with-mongo-parameters),本批未实测。生产部署需自行准备 Accumulo 1.6.4 + ZooKeeper 3.4.6 + Hadoop 2.5.0 集群,本批以 MiniAccumuloCluster 伪集群实测验证默认配置行为。

一、环境信息

  • 操作系统:Ubuntu 22.04 LTS
  • Java:OpenJDK 1.8.0_504;构建工具:Apache Maven 3.6.3
  • Rya 版本:4.0.1(依赖 accumulo-core 1.6.4 / ZooKeeper 3.4.6 / RDF4J 2.3.1)
  • 源码路径:/opt/rya/rya-project/(键位提取自 common/rya.api 与 dao/accumulo.rya)
  • 实测路径:MiniAccumuloCluster 伪集群(实例 miniInstance)+ RyaShell

二、配置体系概览

配置层载体类/文件键位前缀作用
通用查询配置RdfCloudTripleStoreConfiguration(common/rya.api)query.、tbl.、infer.表布局、查询行为、推断开关
Accumulo 连接配置AbstractAccumuloRdfConfigurationBuilder(dao/accumulo.rya)accumulo.、use.连接参数与特性开关
Web 服务配置web.rya 的 environment.properties(classpath)instance.、sc.*web.rya 指向数据库实例
安装配置Install.InstallConfiguration.builder()(API)-附加索引开关

三类键位均为 Java Configuration(Apache Commons Configuration)字符串键值对,编程方式用 config.setString(key, value) / getString(key)。

三、通用查询配置键位(RdfCloudTripleStoreConfiguration)

3.1 表布局键位

键常量默认值说明
query.tblprefixCONF_TBL_PREFIXrya_(TBL_PRFX_DEF)底层 Accumulo 表名前缀,实例名追加其后(如 rya_demo + spo)
tbl.spoCONF_TBL_SPOrya_spoSPO 主表
tbl.poCONF_TBL_POrya_poPO 倒排索引表
tbl.ospCONF_TBL_OSPrya_ospOSP 倒排索引表
tbl.nsCONF_TBL_NSrya_ns命名空间表
tbl.evalCONF_TBL_EVALrya_eval求值/统计表
tbl.hashprefixCONF_PREFIX_ROW_WITH_HASHfalse行键是否加哈希前缀(分片均衡)

3.2 查询行为键位

键常量说明
query.ttlCONF_TTL查询超时(毫秒)
query.startTimeCONF_STARTTIME查询起始时间戳(历史查询)
query.numthreadsCONF_NUM_THREADS查询线程数
query.performantCONF_PERFORMANT高性能模式开关
query.inferCONF_INFER是否启用 OWL/RDFS 推断
query.usestatsCONF_USE_STATS是否使用统计信息优化
query.usecompositecardCONF_USE_COMPOSITE复合基数估算
query.useselectivityCONF_USE_SELECTIVITY连接选择性估算
query.batchsizeCONF_BATCH_SIZE批量扫描行数
query.offsetCONF_OFFSET结果偏移量
query.limitCONF_LIMIT结果条数上限
query.printqueryplanCONF_QUERYPLAN_FLAG打印查询计划
query.authCONF_QUERY_AUTH查询可见性授权(Authorizations)
query.resultformatCONF_RESULT_FORMAT结果格式(如 SPARQL XML)
query.optimizersCONF_OPTIMIZERS自定义优化器列表

3.3 推断(Inference)开关键位

键位以 infer.include.* 形式控制 OWL 推断规则(query.infer=true 时生效):infer.include.allvaluesfrom、domainrange、hasself、hasvalue、intersectionof、inverseof、oneof、propertychain、reflexiveprop、somevaluesfrom、sameas、subclassof、subpropof、symmprop、transprop,默认均为 false。

3.4 其他键位

conf.cv(confidentiality values)、use.statement.metadata 与 statement.metadata.properites(语句元数据)、pcj.query.optimizer 与 pcj.index.tables(预计算连接索引)、class.rdf.dao 与 class.rdf.evalstats(DAO 类)、conf.stats.rdftype.down(统计下推 rdf:type)。

四、Accumulo 连接配置键位(AbstractAccumuloRdfConfigurationBuilder)

键常量说明
accumulo.userACCUMULO_USERAccumulo 用户名
accumulo.passwordACCUMULO_PASSWORDAccumulo 密码
accumulo.instanceACCUMULO_INSTANCEAccumulo 实例名
accumulo.zookeepersACCUMULO_ZOOKEEPERSZooKeeper 地址(逗号分隔 host:port)
accumulo.authsACCUMULO_AUTHS查询可见性标签集合(逗号分隔)
accumulo.visibilitiesACCUMULO_VISIBILITIES写入数据的可见性标签
accumulo.rya.prefixACCUMULO_RYA_PREFIXRya 表前缀(对应 query.tblprefix)
use.inferenceUSE_INFERENCE启用推断
use.display.planUSE_DISPLAY_QUERY_PLAN显示查询计划
use.mockUSE_MOCK_ACCUMULO使用 MockAccumulo(内存模拟,测试用)
use.prefix.hashingUSE_PREFIX_HASHING表行键哈希前缀(分片均衡)
use.count.statsUSE_COUNT_STATS启用计数统计
use.join.selectivityUSE_JOIN_SELECTIVITY启用连接选择性统计

五、web.rya environment.properties 键位

web.rya.war 解包部署后,将 environment.properties 放入 classpath(如 WEB-INF/classes/),Spring 占位符按如下映射注入(web/web.rya 的 spring-root-extensions.xml):

environment.properties 键注入目标说明
instance.namesc.cloudbase.instancenameAccumulo 实例名
instance.zksc.cloudbase.zookeepersZooKeeper 地址
instance.usernamesc.cloudbase.usernameAccumulo 用户名
instance.passwordsc.cloudbase.passwordAccumulo 密码
rya.displayqueryplanquery.printqueryplan是否打印查询计划
sc.freetext.doctable / sc.freetext.termtable自由文本索引表名启用 freetext 索引时
sc.geo.table / sc.geo.predicates / sc.geo.numPartitions地理索引参数启用 geo 索引时

官方示例(README.md):

# Accumulo instance name
instance.name=accumulo
# Accumulo Zookeepers
instance.zk=localhost:2181
# Accumulo username
instance.username=root
# Accumulo password
instance.password=secret

六、安装配置与附加索引开关(InstallConfiguration)

编程安装 Rya 实例时用 Install.InstallConfiguration.builder() 控制附加索引(默认全部关闭):

builder 方法对应开关实测默认
setEnableTableHashPrefix(true)分片哈希前缀false
setEnableEntityCentricIndex(true)实体中心索引false
setEnableGeoIndex(true)地理索引false
setEnableFreeTextIndex(true)自由文本索引false
setEnableTemporalIndex(true)时间索引false
setEnablePcjIndex(true)预计算连接(PCJ)索引false
setFluoPcjAppName(...)PCJ 增量更新 Fluo 应用名-

RyaShell 命令 install-with-accumulo-parameters --instanceName <名> 安装时同样以默认配置(全部 false)安装,实测交互回显:

A Rya instance will be installed using the following values:
   Instance Name: rya_shell_demo
   Use Shard Balancing: false
   Use Entity Centric Indexing: false
   Use Free Text Indexing: false
   Use Temporal Indexing: false
   Use Precomputed Join Indexing: false

Continue with the install? (y/n) y
The Rya instance named 'rya_shell_demo' has been installed.

七、实测验证:默认配置行为

通过 RyaShell print-instance-details 验证默认安装的实例配置(Ubuntu 22.04 + JDK 8 + mini-accumulo 伪集群实测回显):

rya/miniInstance:rya_shell_demo> print-instance-details
General Metadata:
  Instance Name: rya_shell_demo
  RYA Version: 4.0.1
  Users: root
Secondary Indicies:
  Entity Centric Index:
    Enabled: false
  Free Text Index:
    Enabled: false
  Temporal Index:
    Enabled: false
  PCJ Index:
    Enabled: false

实测结论:

  • 默认安装仅创建 SPO/PO/OSP/NS 基础表(rya_<实例>spo/po/osp/ns),不创建任何附加索引,SPARQL 查询走基础三表扫描 + JOIN。
  • 写入 8 条业务三元组后 COUNT(?s) 返回 9,说明默认安装会额外写入 1 条实例内部元数据三元组。
  • query.tblprefix 默认 rya_ 在表名上直接可见(rya_demospo 等)。

八、注意事项

⚠️ 注意:

  1. Rya 4.0.1 无独立配置文件;所有键位通过 Java Configuration 或 web.rya 的 environment.properties 注入,无 XML/conf 文件形态。
  2. accumulo.auths 与 accumulo.visibilities 语义不同:auths 是查询时可见性标签集合,visibilities 是写入时给数据打的标签;root 用户需先用 changeUserAuthorizations 授予相应标签才能查询。
  3. 附加索引(实体中心/自由文本/时间/PCJ)会显著增加表数量与写入开销,按需开启;setEnablePcjIndex 还需要配套 Fluo 应用(setFluoPcjAppName)。
  4. use.mock(MockAccumulo)仅适合单机测试,数据不落盘,生产必须关闭。
  5. web.rya 是 war 形态(88M),部署到 Servlet 容器后通过 environment.properties 指向 Accumulo;instance.* 键映射到 sc.cloudbase.*,勿直接写 sc.cloudbase.*。

九、常见问题

Q1:如何修改表前缀? 设置 query.tblprefix(或 Accumulo 侧的 accumulo.rya.prefix),如 config.setString("query.tblprefix", "myrya_");安装新实例后表名变为 myrya_<实例>spo 等。注意表前缀一旦安装不可修改,需重新安装实例。

Q2:查询返回空结果但数据已写入? 检查可见性:写入使用了 accumulo.visibilities 打标签,而查询 accumulo.auths 未包含该标签。给 root 授予 U 后查询方可命中。

Q3:query.infer 与 infer.include.* 的关系? query.infer=true 是总开关,infer.include.* 是各条 OWL 规则的细粒度开关;默认全部关闭,推断开启会显著增加查询开销。

Q4:web.rya 启动后报连接拒绝? 确认 environment.properties 在 classpath(如 WEB-INF/classes/environment.properties),且 instance.zk 指向实际 ZooKeeper 地址;war 内默认无此文件,需自行创建。

Q5:PCJ 索引为什么查询没生效? PCJ 索引需要 Fluo 应用持续增量更新(setEnablePcjIndex(true) + setFluoPcjAppName(...)),仅安装不启动 Fluo 时 PCJ 表为空,查询仍走基础表。