Skip to content
Snippets Groups Projects
Commit d4bf4e29 authored by Sean Busbey's avatar Sean Busbey Committed by GitHub
Browse files

[scripts] Merge pull request #737 from cmatser/scripting

Shell scripts to run YCSB.
parents 2b3203f3 5f4d4e55
No related branches found
No related tags found
No related merge requests found
......@@ -41,10 +41,17 @@ Getting Started
directory.
3. Run YCSB command.
On Linux:
```sh
bin/ycsb load basic -P workloads/workloada
bin/ycsb run basic -P workloads/workloada
bin/ycsb.sh load basic -P workloads/workloada
bin/ycsb.sh run basic -P workloads/workloada
```
On Windows:
```bat
bin/ycsb.bat load basic -P workloads\workloada
bin/ycsb.bat run basic -P workloads\workloada
```
Running the `ycsb` command without any argument will print the usage.
......
#
# Copyright (c) 2012 - 2016 YCSB contributors. All rights reserved.
#
# Licensed 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. See accompanying
# LICENSE file.
#
#DATABASE BINDINGS
#
# Available bindings should be listed here in the form of
# name:class
#
# - the name must start in column 0.
# - the name is also the directory where the class can be found.
# - if the directory contains multiple versions with different classes,
# use a dash with the version. (e.g. cassandra-7, cassandra-cql)
#
accumulo:com.yahoo.ycsb.db.accumulo.AccumuloClient
aerospike:com.yahoo.ycsb.db.AerospikeClient
asynchbase:com.yahoo.ycsb.db.AsyncHBaseClient
basic:com.yahoo.ycsb.BasicDB
cassandra-7:com.yahoo.ycsb.db.CassandraClient7
cassandra-8:com.yahoo.ycsb.db.CassandraClient8
cassandra-10:com.yahoo.ycsb.db.CassandraClient10
cassandra-cql:com.yahoo.ycsb.db.CassandraCQLClient
cassandra2-cql:com.yahoo.ycsb.db.CassandraCQLClient
couchbase:com.yahoo.ycsb.db.CouchbaseClient
couchbase2:com.yahoo.ycsb.db.couchbase2.Couchbase2Client
dynamodb:com.yahoo.ycsb.db.DynamoDBClient
elasticsearch:com.yahoo.ycsb.db.ElasticsearchClient
geode:com.yahoo.ycsb.db.GeodeClient
googlebigtable:com.yahoo.ycsb.db.GoogleBigtableClient
googledatastore:com.yahoo.ycsb.db.GoogleDatastoreClient
hbase094:com.yahoo.ycsb.db.HBaseClient
hbase098:com.yahoo.ycsb.db.HBaseClient
hbase10:com.yahoo.ycsb.db.HBaseClient10
hypertable:com.yahoo.ycsb.db.HypertableClient
infinispan-cs:com.yahoo.ycsb.db.InfinispanRemoteClient
infinispan:com.yahoo.ycsb.db.InfinispanClient
jdbc:com.yahoo.ycsb.db.JdbcDBClient
kudu:com.yahoo.ycsb.db.KuduYCSBClient
mapkeeper:com.yahoo.ycsb.db.MapKeeperClient
memcached:com.yahoo.ycsb.db.MemcachedClient
mongodb:com.yahoo.ycsb.db.MongoDbClient
mongodb-async:com.yahoo.ycsb.db.AsyncMongoDbClient
nosqldb:com.yahoo.ycsb.db.NoSqlDbClient
orientdb:com.yahoo.ycsb.db.OrientDBClient
redis:com.yahoo.ycsb.db.RedisClient
riak:com.yahoo.ycsb.db.riak.RiakKVClient
s3:com.yahoo.ycsb.db.S3Client
solr:com.yahoo.ycsb.db.SolrClient
tarantool:com.yahoo.ycsb.db.TarantoolClient
voldemort:com.yahoo.ycsb.db.VoldemortClient
@REM
@REM Copyright (c) 2012 - 2016 YCSB contributors. All rights reserved.
@REM
@REM Licensed under the Apache License, Version 2.0 (the "License"); you
@REM may not use this file except in compliance with the License. You
@REM may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing, software
@REM distributed under the License is distributed on an "AS IS" BASIS,
@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
@REM implied. See the License for the specific language governing
@REM permissions and limitations under the License. See accompanying
@REM LICENSE file.
@REM
@REM -----------------------------------------------------------------------
@REM Control Script for YCSB
@REM
@REM Environment Variable Prerequisites
@REM
@REM Do not set the variables in this script. Instead put them into a script
@REM setenv.sh in YCSB_HOME/bin to keep your customizations separate.
@REM
@REM YCSB_HOME (Optional) YCSB installation directory. If not set
@REM this script will use the parent directory of where this
@REM script is run from.
@REM
@REM JAVA_HOME (Required) Must point at your Java Development Kit
@REM or Java Runtime Environment installation.
@REM
@REM JAVA_OPTS (Optional) Java runtime options used when any command
@REM is executed.
@REM
@REM WARNING!!! YCSB home must be located in a directory path that doesn't
@REM contain spaces.
@REM
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
@REM Only set YCSB_HOME if not already set
PUSHD %~dp0..
IF NOT DEFINED YCSB_HOME SET YCSB_HOME=%CD%
POPD
@REM Ensure that any extra CLASSPATH variables are set via setenv.bat
SET CLASSPATH=
@REM Pull in customization options
if exist "%YCSB_HOME%\bin\setenv.bat" call "%YCSB_HOME%\bin\setenv.bat"
@REM Check if we have a usable JDK
IF "%JAVA_HOME%." == "." GOTO noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
GOTO okJava
:noJavaHome
ECHO The JAVA_HOME environment variable is not defined correctly.
GOTO exit
:okJava
@REM Determine YCSB command argument
IF NOT "load" == "%1" GOTO noload
SET YCSB_COMMAND=-load
SET YCSB_CLASS=com.yahoo.ycsb.Client
GOTO gotCommand
:noload
IF NOT "run" == "%1" GOTO noRun
SET YCSB_COMMAND=-t
SET YCSB_CLASS=com.yahoo.ycsb.Client
GOTO gotCommand
:noRun
IF NOT "shell" == "%1" GOTO noShell
SET YCSB_COMMAND=
SET YCSB_CLASS=com.yahoo.ycsb.CommandLine
GOTO gotCommand
:noShell
ECHO [ERROR] Found unknown command '%1'
ECHO [ERROR] Expected one of 'load', 'run', or 'shell'. Exiting.
GOTO exit
:gotCommand
@REM Find binding information
FOR /F "delims=" %%G in (
'FINDSTR /B "%2:" %YCSB_HOME%\bin\bindings.properties'
) DO SET "BINDING_LINE=%%G"
IF NOT "%BINDING_LINE%." == "." GOTO gotBindingLine
ECHO [ERROR] The specified binding '%2' was not found. Exiting.
GOTO exit
:gotBindingLine
@REM Pull out binding name and class
FOR /F "tokens=1-2 delims=:" %%G IN ("%BINDING_LINE%") DO (
SET BINDING_NAME=%%G
SET BINDING_CLASS=%%H
)
@REM Some bindings have multiple versions that are managed in the same
@REM directory.
@REM They are noted with a '-' after the binding name.
@REM (e.g. cassandra-7 & cassandra-8)
FOR /F "tokens=1 delims=-" %%G IN ("%BINDING_NAME%") DO (
SET BINDING_DIR=%%G
)
@REM The 'basic' binding is core functionality
IF NOT "%BINDING_NAME%" == "basic" GOTO noBasic
SET BINDING_DIR=core
:noBasic
@REM Add Top level conf to classpath
IF "%CLASSPATH%." == "." GOTO emptyClasspath
SET CLASSPATH=%CLASSPATH%;%YCSB_HOME%\conf
GOTO confAdded
:emptyClasspath
SET CLASSPATH=%YCSB_HOME%\conf
:confAdded
@REM Build classpath according to source checkout or release distribution
IF EXIST "%YCSB_HOME%\pom.xml" GOTO gotRelease
@REM Core libraries
FOR %%F IN (%YCSB_HOME%\lib\*.jar) DO (
SET CLASSPATH=!CLASSPATH!;%%F%
)
@REM Database conf dir
IF NOT EXIST "%YCSB_HOME%\%BINDING_DIR%-binding\conf" GOTO noBindingConf
set CLASSPATH=%CLASSPATH%;%YCSB_HOME%\%BINDING_DIR%-binding\conf
:noBindingConf
@REM Database libraries
FOR %%F IN (%YCSB_HOME%\%BINDING_DIR%-binding\lib\*.jar) DO (
SET CLASSPATH=!CLASSPATH!;%%F%
)
GOTO classpathComplete
:gotRelease
@REM Core libraries
FOR %%F IN (%YCSB_HOME%\core\target\*.jar) DO (
SET CLASSPATH=!CLASSPATH!;%%F%
)
@REM Database conf (need to find because location is not consistent)
FOR /D /R %YCSB_HOME%\%BINDING_DIR% %%F IN (*) DO (
IF "%%~nxF" == "conf" SET CLASSPATH=!CLASSPATH!;%%F%
)
@REM Database libraries
FOR %%F IN (%YCSB_HOME%\%BINDING_DIR%\target\*.jar) DO (
SET CLASSPATH=!CLASSPATH!;%%F%
)
@REM Database dependency libraries
FOR %%F IN (%YCSB_HOME%\%BINDING_DIR%\target\dependency\*.jar) DO (
SET CLASSPATH=!CLASSPATH!;%%F%
)
:classpathComplete
@REM Cassandra deprecation message
IF NOT "%BINDING_DIR%" == "cassandra" GOTO notOldCassandra
echo [WARN] The 'cassandra-7', 'cassandra-8', 'cassandra-10', and cassandra-cql' clients are deprecated. If you are using Cassandra 2.X try using the 'cassandra2-cql' client instead.
:notOldCassandra
@REM Get the rest of the arguments, skipping the first 2
FOR /F "tokens=2*" %%G IN ("%*") DO (
SET YCSB_ARGS=%%H
)
@REM Run YCSB
@ECHO ON
"%JAVA_HOME%\bin\java.exe" %JAVA_OPTS% -classpath "%CLASSPATH%" %YCSB_CLASS% %YCSB_COMMAND% -db %BINDING_CLASS% %YCSB_ARGS%
@ECHO OFF
GOTO end
:exit
EXIT /B 1;
:end
#!/bin/sh
#
# Copyright (c) 2012 - 2016 YCSB contributors. All rights reserved.
#
# Licensed 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. See accompanying
# LICENSE file.
#
# -----------------------------------------------------------------------------
# Control Script for YCSB
#
# Environment Variable Prerequisites
#
# Do not set the variables in this script. Instead put them into a script
# setenv.sh in YCSB_HOME/bin to keep your customizations separate.
#
# YCSB_HOME (Optional) YCSB installation directory. If not set
# this script will use the parent directory of where this
# script is run from.
#
# JAVA_HOME (Optional) Must point at your Java Development Kit
# installation. If empty, this script tries use the
# available java executable.
#
# JAVA_OPTS (Optional) Java runtime options used when any command
# is executed.
#
# WARNING!!! YCSB home must be located in a directory path that doesn't
# contain spaces.
#
# www.shellcheck.net was used to validate this script
# Cygwin support
CYGWIN=false
case "$(uname)" in
CYGWIN*) CYGWIN=true;;
esac
# Get script path
SCRIPT_DIR=$(dirname "$0" 2>/dev/null)
# Only set YCSB_HOME if not already set
[ -z "$YCSB_HOME" ] && YCSB_HOME=$(cd "$SCRIPT_DIR/.." || exit; pwd)
# Ensure that any extra CLASSPATH variables are set via setenv.sh
CLASSPATH=
# Pull in customization options
if [ -r "$YCSB_HOME/bin/setenv.sh" ]; then
# Shellcheck wants a source, but this directive only runs if available
# So, tell shellcheck to ignore
# shellcheck source=/dev/null
. "$YCSB_HOME/bin/setenv.sh"
fi
# Attempt to find the available JAVA, if JAVA_HOME not set
if [ -z "$JAVA_HOME" ]; then
JAVA_PATH=$(which java 2>/dev/null)
if [ "x$JAVA_PATH" != "x" ]; then
JAVA_HOME=$(dirname "$(dirname "$JAVA_PATH" 2>/dev/null)")
fi
fi
# If JAVA_HOME still not set, error
if [ -z "$JAVA_HOME" ]; then
echo "[ERROR] Java executable not found. Exiting."
exit 1;
fi
# Determine YCSB command argument
if [ "load" = "$1" ] ; then
YCSB_COMMAND=-load
YCSB_CLASS=com.yahoo.ycsb.Client
elif [ "run" = "$1" ] ; then
YCSB_COMMAND=-t
YCSB_CLASS=com.yahoo.ycsb.Client
elif [ "shell" = "$1" ] ; then
YCSB_COMMAND=
YCSB_CLASS=com.yahoo.ycsb.CommandLine
else
echo "[ERROR] Found unknown command '$1'"
echo "[ERROR] Expected one of 'load', 'run', or 'shell'. Exiting."
exit 1;
fi
# Find binding information
BINDING_LINE=$(grep "^$2:" "$YCSB_HOME/bin/bindings.properties" -m 1)
if [ -z "$BINDING_LINE" ] ; then
echo "[ERROR] The specified binding '$2' was not found. Exiting."
exit 1;
fi
# Get binding name and class
BINDING_NAME=$(echo "$BINDING_LINE" | cut -d':' -f1)
BINDING_CLASS=$(echo "$BINDING_LINE" | cut -d':' -f2)
# Some bindings have multiple versions that are managed in the same directory.
# They are noted with a '-' after the binding name.
# (e.g. cassandra-7 & cassandra-8)
BINDING_DIR=$(echo "$BINDING_NAME" | cut -d'-' -f1)
# The 'basic' binding is core functionality
if [ "$BINDING_NAME" = "basic" ] ; then
BINDING_DIR=core
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $CYGWIN; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
[ -n "$CLASSPATH" ] && CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
fi
# Check if source checkout, or release distribution
DISTRIBUTION=true
if [ -r "$YCSB_HOME/pom.xml" ]; then
DISTRIBUTION=false;
fi
# Add Top level conf to classpath
if [ -z "$CLASSPATH" ] ; then
CLASSPATH="$YCSB_HOME/conf"
else
CLASSPATH="$CLASSPATH:$YCSB_HOME/conf"
fi
# Build classpath
# The "if" check after the "for" is because glob may just return the pattern
# when no files are found. The "if" makes sure the file is really there.
if $DISTRIBUTION; then
# Core libraries
for f in "$YCSB_HOME"/lib/*.jar ; do
if [ -r "$f" ] ; then
CLASSPATH="$CLASSPATH:$f"
fi
done
# Database conf dir
if [ -r "$YCSB_HOME"/"$BINDING_DIR"-binding/conf ] ; then
CLASSPATH="$CLASSPATH:$YCSB_HOME/$BINDING_DIR-binding/conf"
fi
# Database libraries
for f in "$YCSB_HOME"/"$BINDING_DIR"-binding/lib/*.jar ; do
if [ -r "$f" ] ; then
CLASSPATH="$CLASSPATH:$f"
fi
done
# Source checkout
else
# Check for some basic libraries to see if the source has been built.
for f in "$YCSB_HOME"/"$BINDING_DIR"/target/*.jar ; do
# Call mvn to build source checkout.
if [ ! -e "$f" ] ; then
if [ "$BINDING_NAME" = "basic" ] ; then
MVN_PROJECT=core
else
MVN_PROJECT="$BINDING_DIR"-binding
fi
echo "[WARN] YCSB libraries not found. Attempting to build..."
mvn -pl com.yahoo.ycsb:"$MVN_PROJECT" -am package -DskipTests
if [ "$?" -ne 0 ] ; then
echo "[ERROR] Error trying to build project. Exiting."
exit 1;
fi
fi
done
# Core libraries
for f in "$YCSB_HOME"/core/target/*.jar ; do
if [ -r "$f" ] ; then
CLASSPATH="$CLASSPATH:$f"
fi
done
# Database conf (need to find because location is not consistent)
CLASSPATH_CONF=$(find "$YCSB_HOME"/$BINDING_DIR -name "conf" | while IFS="" read -r file; do echo ":$file"; done)
if [ "x$CLASSPATH_CONF" != "x" ]; then
CLASSPATH="$CLASSPATH$CLASSPATH_CONF"
fi
# Database libraries
for f in "$YCSB_HOME"/"$BINDING_DIR"/target/*.jar ; do
if [ -r "$f" ] ; then
CLASSPATH="$CLASSPATH:$f"
fi
done
# Database dependency libraries
for f in "$YCSB_HOME"/"$BINDING_DIR"/target/dependency/*.jar ; do
if [ -r "$f" ] ; then
CLASSPATH="$CLASSPATH:$f"
fi
done
fi
# Cassandra deprecation message
if [ "$BINDING_DIR" = "cassandra" ] ; then
echo "[WARN] The 'cassandra-7', 'cassandra-8', 'cassandra-10', and \
cassandra-cql' clients are deprecated. If you are using \
Cassandra 2.X try using the 'cassandra2-cql' client instead."
fi
# For Cygwin, switch paths to Windows format before running java
if $CYGWIN; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
[ -n "$CLASSPATH" ] && CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
fi
# Get the rest of the arguments
YCSB_ARGS=$(echo "$@" | cut -d' ' -f3-)
# About to run YCSB
echo "$JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $YCSB_CLASS $YCSB_COMMAND -db $BINDING_CLASS $YCSB_ARGS"
# Run YCSB
# Shellcheck reports the following line as needing double quotes to prevent
# globbing and word splitting. However, word splitting is the desired effect
# here. So, the shellcheck error is disabled for this line.
# shellcheck disable=SC2086
"$JAVA_HOME/bin/java" $JAVA_OPTS -classpath "$CLASSPATH" $YCSB_CLASS $YCSB_COMMAND -db $BINDING_CLASS $YCSB_ARGS
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment