###
# #%L
# SAMOA
# %%
# Copyright (C) 2013 Yahoo! Inc.
# %%
# 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.
# #L%
###

# ===================================================== #
# 		SAMOA S4 properties file		#	
# ----------------------------------------------------- #
# This file contains specific configuration for 	#
# the deployment in the S4 platform.			#
# ===================================================== #

# Zookeeper Server
zookeeper.server=localhost
zookeeper.port=2181

# Simple HTTP Server prociding the packaged S4 jar
#http.server.ip=localhost
http.server.port=8000

# Name of the S4 cluster
cluster.name=cluster
cluster.port=12000

# Deployment strategy: local or cluster
samoa.deploy.mode=local

# Directory for storing the results of the algorithms.
results.dir=/tmp/samoa/results
# Directory for storing the evaluation results, if the algorithms are to be evaluated.
evaluation.dir=/tmp/samoa/evaluation 
