#
# 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.

# Number of processors to be used for query processing
#org.apache.vxquery.available_processors=-1

# Number of local node controllers to be created when creating a local hyracks cluster
org.apache.vxquery.local_nc=1

# Join hash size
#org.apache.vxquery.join_hash=-1

# Maximum Data Size
#org.apache.vxquery.data_size=-1

# hdfs config directory
#org.apache.vxquery.hdfs_config=foo/bar
