blob: 31b61b9d90d97d496219929800a283bdfc70f3c3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.List;
import org.apache.hadoop.util.ToolRunner;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.rya.accumulo.AccumuloRdfConfiguration;
import org.apache.rya.accumulo.utils.ConnectorFactory;
import org.apache.rya.api.persist.RdfEvalStatsDAO.CARDINALITY_OF;
import org.apache.rya.prospector.mr.Prospector;
import org.apache.rya.prospector.service.ProspectorServiceEvalStatsDAO;
import org.apache.rya.sail.config.RyaSailFactory;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.eclipse.rdf4j.sail.Sail;
import org.eclipse.rdf4j.sail.SailConnection;
import com.google.common.collect.Lists;
/**
* Demonstrates how you can use the {@link Prospector} to count values that appear within an instance of Rya and
* then use the {@link ProspectorServiceEvalStatsDAO} to fetch those counts.
*/
public class ProspectorExample {
private static final Logger log = Logger.getLogger(RyaClientExample.class);
private static final ValueFactory VALUE_FACTORY = SimpleValueFactory.getInstance();
private static final IRI ALICE = VALUE_FACTORY.createIRI("urn:alice");
private static final IRI BOB = VALUE_FACTORY.createIRI("urn:bob");
private static final IRI CHARLIE = VALUE_FACTORY.createIRI("urn:charlie");
private static final IRI WORKS_AT = VALUE_FACTORY.createIRI("urn:worksAt");
private static final IRI ADMIRES = VALUE_FACTORY.createIRI("urn:admires");
private static final IRI LIVES_WITH = VALUE_FACTORY.createIRI("urn:livesWith");
private static final IRI BURGER_JOINT = VALUE_FACTORY.createIRI("urn:burgerJoint");
private static final IRI DONUT_SHOP= VALUE_FACTORY.createIRI("urn:donutShop");
public static void main(final String[] args) throws Exception {
setupLogging();
// Configure Rya to use a mock instance.
final AccumuloRdfConfiguration config = new AccumuloRdfConfiguration();
config.useMockInstance(true);
config.setTablePrefix("rya_");
config.setUsername("user");
config.setPassword("pass");
config.setInstanceName("accumulo");
// Load some data into Rya.
final List<Statement> statements = Lists.newArrayList(
VALUE_FACTORY.createStatement(ALICE, WORKS_AT, BURGER_JOINT),
VALUE_FACTORY.createStatement(ALICE, ADMIRES, BOB),
VALUE_FACTORY.createStatement(BOB, WORKS_AT, DONUT_SHOP),
VALUE_FACTORY.createStatement(CHARLIE, WORKS_AT, DONUT_SHOP),
VALUE_FACTORY.createStatement(CHARLIE, LIVES_WITH, BOB),
VALUE_FACTORY.createStatement(BOB, LIVES_WITH, CHARLIE),
VALUE_FACTORY.createStatement(BOB, LIVES_WITH, ALICE));
final Sail sail = RyaSailFactory.getInstance(config);
final SailConnection conn = sail.getConnection();
log.info("Loading the following statements into a Mock instance of Accumulo Rya:");
conn.begin();
for(final Statement statement : statements) {
log.info(" " + statement.toString());
conn.addStatement(statement.getSubject(), statement.getPredicate(), statement.getObject());
}
conn.commit();
conn.close();
// Create the table that the Prospector's results will be written to.
ConnectorFactory.connect(config)
.tableOperations()
.create("rya_prospects");
// Run the Prospector using the configuration file that is in the resources directory.
log.info("");
log.info("Running the Map Reduce job that computes the Prospector results.");
ToolRunner.run(new Prospector(), new String[]{ "src/main/resources/stats_cluster_config.xml" });
// Print the table that was created by the Prospector.
log.info("");
log.info("The following cardinalities were written to the Prospector table:");
final ProspectorServiceEvalStatsDAO dao = ProspectorServiceEvalStatsDAO.make(config);
// Do each of the Subjects.
double cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECT, Lists.newArrayList(ALICE));
log.info(" subject: " + ALICE + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECT, Lists.newArrayList(BOB));
log.info(" subject: " + BOB + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECT, Lists.newArrayList(CHARLIE));
log.info(" subject: " + CHARLIE + ", cardinality: " + cardinality);
// Do each of the Predicates.
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATE, Lists.newArrayList(WORKS_AT));
log.info(" predicate: " + WORKS_AT + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATE, Lists.newArrayList(ADMIRES));
log.info(" predicate: " + ADMIRES + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATE, Lists.newArrayList(LIVES_WITH));
log.info(" predicate: " + LIVES_WITH + ", cardinality: " + cardinality);
// Do each of the Objects.
cardinality = dao.getCardinality(config, CARDINALITY_OF.OBJECT, Lists.newArrayList(BURGER_JOINT));
log.info(" object: " + BURGER_JOINT + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.OBJECT, Lists.newArrayList(DONUT_SHOP));
log.info(" object: " + DONUT_SHOP + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.OBJECT, Lists.newArrayList(ALICE));
log.info(" object: " + ALICE + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.OBJECT, Lists.newArrayList(BOB));
log.info(" object: " + BOB + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.OBJECT, Lists.newArrayList(CHARLIE));
log.info(" object: " + CHARLIE + ", cardinality: " + cardinality);
// Do each of the Subject/Predicate pairs.
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTPREDICATE, Lists.newArrayList(ALICE, WORKS_AT));
log.info(" subject/predicate: " + ALICE + "/" + WORKS_AT + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTPREDICATE, Lists.newArrayList(ALICE, ADMIRES));
log.info(" subject/predicate: " + ALICE + "/" + ADMIRES + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTPREDICATE, Lists.newArrayList(BOB, WORKS_AT));
log.info(" subject/predicate: " + BOB + "/" + WORKS_AT + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTPREDICATE, Lists.newArrayList(CHARLIE, WORKS_AT));
log.info(" subject/predicate: " + CHARLIE + "/" + WORKS_AT + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTPREDICATE, Lists.newArrayList(CHARLIE, LIVES_WITH));
log.info(" subject/predicate: " + CHARLIE + "/" + LIVES_WITH + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTPREDICATE, Lists.newArrayList(BOB, LIVES_WITH));
log.info(" subject/predicate: " + BOB + "/" + LIVES_WITH + ", cardinality: " + cardinality);
// Do each of the Subject/Object pairs.
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTOBJECT, Lists.newArrayList(ALICE, BURGER_JOINT));
log.info(" subject/object: " + ALICE + "/" + BURGER_JOINT + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTOBJECT, Lists.newArrayList(ALICE, BOB));
log.info(" subject/object: " + ALICE + "/" + BOB + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTOBJECT, Lists.newArrayList(BOB, DONUT_SHOP));
log.info(" subject/object: " + ALICE + "/" + DONUT_SHOP + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTOBJECT, Lists.newArrayList(CHARLIE, DONUT_SHOP));
log.info(" subject/object: " + CHARLIE + "/" + DONUT_SHOP + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTOBJECT, Lists.newArrayList(CHARLIE, BOB));
log.info(" subject/object: " + CHARLIE + "/" + BOB + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTOBJECT, Lists.newArrayList(BOB, CHARLIE));
log.info(" subject/object: " + BOB + "/" + CHARLIE + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.SUBJECTOBJECT, Lists.newArrayList(BOB, ALICE));
log.info(" subject/object: " + BOB + "/" + ALICE + ", cardinality: " + cardinality);
// Do each of the Predicate/Object pairs.
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATEOBJECT, Lists.newArrayList(WORKS_AT, BURGER_JOINT));
log.info(" predicate/object: " + WORKS_AT + "/" + BURGER_JOINT + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATEOBJECT, Lists.newArrayList(ADMIRES, BOB));
log.info(" predicate/object: " + ADMIRES + "/" + BOB + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATEOBJECT, Lists.newArrayList(WORKS_AT, DONUT_SHOP));
log.info(" predicate/object: " + WORKS_AT + "/" + DONUT_SHOP + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATEOBJECT, Lists.newArrayList(LIVES_WITH, BOB));
log.info(" predicate/object: " + LIVES_WITH + "/" + BOB + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATEOBJECT, Lists.newArrayList(LIVES_WITH, CHARLIE));
log.info(" predicate/object: " + LIVES_WITH + "/" + CHARLIE + ", cardinality: " + cardinality);
cardinality = dao.getCardinality(config, CARDINALITY_OF.PREDICATEOBJECT, Lists.newArrayList(LIVES_WITH, ALICE));
log.info(" predicate/object: " + LIVES_WITH + "/" + ALICE + ", cardinality: " + cardinality);
}
private static void setupLogging() {
// Turn off all the loggers and customize how they write to the console.
final Logger rootLogger = LogManager.getRootLogger();
rootLogger.setLevel(Level.OFF);
final ConsoleAppender ca = (ConsoleAppender) rootLogger.getAppender("stdout");
ca.setLayout(new PatternLayout("%-5p - %m%n"));
// Turn the logger used by the demo back on.
log.setLevel(Level.INFO);
}
}