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

# This is the main configuration file for Apache Accumulo. Available configuration properties can be
# found in the Accumulo documentation on the Accumulo project website (https://accumulo.apache.org/)
# Link for Accumulo 2.0: https://accumulo.apache.org/docs/2.0/administration/properties

## Sets location in HDFS where Accumulo will store data
instance.volumes=hdfs://localhost:8020/accumulo

## Sets location of Zookeepers
instance.zookeeper.host=localhost:2181

## Change secret before initialization. All Accumulo servers must have same secret
instance.secret=DEFAULT

## Set to false if 'accumulo-util build-native' fails
tserver.memory.maps.native.enabled=true

## Trace user
trace.user=root

## Trace password
trace.password=secret

## Search for available port if default is unavailable
tserver.port.search=true
