Chris Hillery has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/1070
Change subject: Add standalone performance test. ...................................................................... Add standalone performance test. Change-Id: Iaffcbaaaad2f798402742740b8ac12f9cf41a52c --- A asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/builder/PresetClusterPerfBuilder.java M asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/client/LSMExperimentSetRunner.java A asterixdb/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/bench_3_load_2.aql 3 files changed, 145 insertions(+), 2 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/70/1070/1 diff --git a/asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/builder/PresetClusterPerfBuilder.java b/asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/builder/PresetClusterPerfBuilder.java new file mode 100644 index 0000000..5c136d6 --- /dev/null +++ b/asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/builder/PresetClusterPerfBuilder.java @@ -0,0 +1,134 @@ +/* + * 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. + */ + +package org.apache.asterix.experiment.builder; + +import org.apache.asterix.experiment.action.base.SequentialActionList; +import org.apache.asterix.experiment.action.derived.RunAQLFileAction; +import org.apache.asterix.experiment.action.derived.RunSQLPPFileAction; +import org.apache.asterix.experiment.action.derived.SleepAction; +import org.apache.asterix.experiment.action.derived.TimedAction; +import org.apache.asterix.experiment.client.LSMExperimentConstants; +import org.apache.asterix.experiment.client.LSMExperimentSetRunner.LSMExperimentSetRunnerConfig; +import org.apache.asterix.experiment.client.LSMPerfConstants; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.DefaultHttpClient; + +import javax.xml.bind.JAXBException; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; + +/** + * This experiment simply runs the performance benchmark queries against + * a cluster which is presumed to already be running. + * Also, there is no orchestration server involved in this experiment builder. + * + * The only LSMExperimentSetRunner config command-line options used by this + * experiment are: + * -ler -rh -rp + */ +public class PresetClusterPerfBuilder extends AbstractExperimentBuilder { + + protected final HttpClient httpClient; + + protected final String restHost; + + protected final int restPort; + + protected final Path localExperimentRoot; + + private final String countFileName; + + protected final String loadAQLFilePath; + + protected final String querySQLPPFileName; + + public PresetClusterPerfBuilder(LSMExperimentSetRunnerConfig config) { + super("PresetClusterPerfBuilder"); + this.httpClient = new DefaultHttpClient(); + this.restHost = config.getRESTHost(); + this.restPort = config.getRESTPort(); + this.localExperimentRoot = Paths.get(config.getLocalExperimentRoot()); + this.countFileName = "bench_count.aql"; + this.loadAQLFilePath = "bench_3_load_2.aql"; + this.querySQLPPFileName = "agg_bench"; + } + + @Override + protected void doBuild(Experiment e) throws IOException, JAXBException { + SequentialActionList execs = new SequentialActionList(); + + //ddl statements + execs.add(new SleepAction(15000)); + // TODO: implement retry handler + execs.add(new RunAQLFileAction(httpClient, restHost, restPort, localExperimentRoot.resolve( + LSMExperimentConstants.AQL_DIR).resolve(LSMPerfConstants.BASE_TYPES))); + execs.add(new RunAQLFileAction(httpClient, restHost, restPort, localExperimentRoot.resolve( + LSMExperimentConstants.AQL_DIR).resolve("bench_3.aql"))); + + //---------- main experiment body begins ----------- + + //run DDL + Load + execs.add(new TimedAction(new RunAQLFileAction(httpClient, restHost, restPort, localExperimentRoot.resolve( + LSMExperimentConstants.AQL_DIR).resolve(loadAQLFilePath)))); + + //execute SQL++ Queries + execs.add(new TimedAction(new RunSQLPPFileAction(httpClient, restHost, restPort, localExperimentRoot.resolve( + LSMExperimentConstants.AQL_DIR).resolve(querySQLPPFileName), + localExperimentRoot.resolve(LSMPerfConstants.RESULT_FILE)))); + + //---------- main experiment body ends ----------- + + //total record count + execs.add(new SleepAction(10000)); + if (countFileName != null) { + execs.add(new RunAQLFileAction(httpClient, restHost, restPort, localExperimentRoot.resolve( + LSMExperimentConstants.AQL_DIR).resolve(countFileName))); + } + + e.addBody(execs); + } + + protected Map<String, List<String>> readDatagenPairs(Path p) throws IOException { + Map<String, List<String>> dgenPairs = new HashMap<>(); + Scanner s = new Scanner(p, StandardCharsets.UTF_8.name()); + try { + while (s.hasNextLine()) { + String line = s.nextLine(); + String[] pair = line.split("\\s+"); + List<String> vals = dgenPairs.get(pair[0]); + if (vals == null) { + vals = new ArrayList<>(); + dgenPairs.put(pair[0], vals); + } + vals.add(pair[1]); + } + } finally { + s.close(); + } + return dgenPairs; + } +} diff --git a/asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/client/LSMExperimentSetRunner.java b/asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/client/LSMExperimentSetRunner.java index 9f9115e..45073d9 100644 --- a/asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/client/LSMExperimentSetRunner.java +++ b/asterixdb/asterix-experiments/src/main/java/org/apache/asterix/experiment/client/LSMExperimentSetRunner.java @@ -28,6 +28,7 @@ import org.apache.asterix.experiment.action.base.SequentialActionList; import org.apache.asterix.experiment.builder.AbstractExperimentBuilder; import org.apache.asterix.experiment.builder.PerfTestAggBuilder; +import org.apache.asterix.experiment.builder.PresetClusterPerfBuilder; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.Option; @@ -104,14 +105,14 @@ return sshKeyLocation; } - @Option(name = "-d", aliases = "--datagen-duartion", usage = "Data generation duration in seconds", metaVar = "DATAGENDURATION") + @Option(name = "-d", aliases = "--datagen-duration", usage = "Data generation duration in seconds", metaVar = "DATAGENDURATION") private int duration; public int getDuration() { return duration; } - @Option(name = "-qd", aliases = "--querygen-duartion", usage = "Query generation duration in seconds", metaVar = "QUERYGENDURATION") + @Option(name = "-qd", aliases = "--querygen-duration", usage = "Query generation duration in seconds", metaVar = "QUERYGENDURATION") private int queryDuration; public int getQueryDuration() { @@ -287,6 +288,7 @@ suite.add(new Experiment5DBuilder(config)); */ suite.add(new PerfTestAggBuilder(config)); + suite.add(new PresetClusterPerfBuilder(config)); Pattern p = config.getRegex() == null ? null : Pattern.compile(config.getRegex()); diff --git a/asterixdb/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/bench_3_load_2.aql b/asterixdb/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/bench_3_load_2.aql new file mode 100644 index 0000000..5379ec2 --- /dev/null +++ b/asterixdb/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/bench_3_load_2.aql @@ -0,0 +1,7 @@ +use dataverse SocialNetworkData; + +load dataset GleambookMessages using +localfs(("path"="172.23.100.190:///hd1/datagen/gbook_messages.adm,172.23.100.191:///hd1/datagen/gbook_messages.adm,172.23.100.192:///hd1/datagen/gbook_messages.adm,172.23.100.193:///hd1/datagen/gbook_messages.adm"),("format"="adm")); + +load dataset GleambookUsers using +localfs(("path"="172.23.100.190:///hd1/datagen/gbook_users.adm,172.23.100.191:///hd1/datagen/gbook_users.adm,172.23.100.192:///hd1/datagen/gbook_users.adm,172.23.100.193:///hd1/datagen/gbook_users.adm"),("format"="adm")); -- To view, visit https://asterix-gerrit.ics.uci.edu/1070 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iaffcbaaaad2f798402742740b8ac12f9cf41a52c Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Chris Hillery <c...@lambda.nu>