<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
   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.
-->

<configuration>

  <property>
    <name>hive.metastore.client.cache.maxSize</name>
    <value>10Mb</value>
    <description>Max size for hive metastore client local cache</description>
  </property>

  <property>
    <name>hive.metastore.client.cache.enabled</name>
    <value>true</value>
    <description>This property enables a Caffeiene Cache for Metastore client</description>
  </property>

  <property>
    <name>hive.metastore.client.cache.recordStats</name>
    <value>true</value>
    <description>This property enables recording metastore client cache stats in DEBUG logs</description>
  </property>

<property>
  <name>hive.in.test</name>
  <value>true</value>
  <description>Internal marker for test. Used for masking env-dependent values</description>
</property>

<!-- Properties for test folders -->
<property>
  <name>mapreduce.jobtracker.staging.root.dir</name>
  <value>${test.tmp.dir}/cli/mapred/staging</value>
</property>

<!-- Hive Configuration can either be stored in this file or in the hadoop configuration files  -->
<!-- that are implied by Hadoop setup variables.                                                -->
<!-- Aside from Hadoop setup variables - this file is provided as a convenience so that Hive    -->
<!-- users do not have to edit hadoop configuration files (that may be managed as a centralized -->
<!-- resource).                                                                                 -->

<!-- Hive Execution Parameters -->
<property>
  <name>hadoop.tmp.dir</name>
  <value>${test.tmp.dir}/hadoop-tmp</value>
  <description>A base for other temporary directories.</description>
</property>

<!--
<property>
  <name>hive.exec.reducers.max</name>
  <value>1</value>
  <description>maximum number of reducers</description>
</property>
-->

<property>
  <name>hive.exec.scratchdir</name>
  <value>${test.tmp.dir}/scratchdir</value>
  <description>Scratch space for Hive jobs</description>
</property>

<property>
  <name>hive.exec.local.scratchdir</name>
  <value>${test.tmp.dir}/localscratchdir/</value>
  <description>Local scratch space for Hive jobs</description>
</property>

<property>
  <name>datanucleus.schema.autoCreateAll</name>
  <value>true</value>
</property>

<property>
  <name>datanucleus.connectionPool.maxPoolSize</name>
  <value>4</value>
</property>

<property>
  <name>hive.metastore.schema.verification</name>
  <value>false</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:derby:memory:${test.tmp.dir}/junit_metastore_db;create=true</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>APP</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>mine</value>
</property>

<property>
  <!--  this should eventually be deprecated since the metastore should supply this -->
  <name>hive.metastore.warehouse.dir</name>
  <value>${test.warehouse.dir}</value>
  <description></description>
</property>

<property>
  <name>hive.metastore.metadb.dir</name>
  <value>file://${test.tmp.dir}/metadb/</value>
  <description>
  Required by metastore server or if the uris argument below is not supplied
  </description>
</property>

<property>
  <name>test.log.dir</name>
  <value>${test.tmp.dir}/log/</value>
  <description></description>
</property>

<property>
  <name>test.data.files</name>
  <value>${hive.root}/data/files</value>
  <description></description>
</property>

<property>
  <name>test.data.scripts</name>
  <value>${hive.root}/data/scripts</value>
  <description></description>
</property>

<property>
  <name>hive.jar.path</name>
  <value>${maven.local.repository}/org/apache/hive/hive-exec/${hive.version}/hive-exec-${hive.version}.jar</value>
  <description></description>
</property>

<property>
  <name>hive.metastore.rawstore.impl</name>
  <value>org.apache.hadoop.hive.metastore.ObjectStore</value>
  <description>Name of the class that implements org.apache.hadoop.hive.metastore.rawstore interface. This class is used to store and retrieval of raw metadata objects such as table, database</description>
</property>

<property>
  <name>hive.querylog.location</name>
  <value>${test.tmp.dir}/tmp</value>
  <description>Location of the structured hive logs</description>
</property>

<property>
  <name>hive.exec.pre.hooks</name>
  <value>org.apache.hadoop.hive.ql.hooks.PreExecutePrinter, org.apache.hadoop.hive.ql.hooks.EnforceReadOnlyTables, org.apache.hadoop.hive.ql.hooks.MaterializedViewRegistryPropertiesHook</value>
  <description>Pre Execute Hook for Tests</description>
</property>

<property>
  <name>hive.exec.post.hooks</name>
  <value>org.apache.hadoop.hive.ql.hooks.PostExecutePrinter</value>
  <description>Post Execute Hook for Tests</description>
</property>

<property>
  <name>hive.support.concurrency</name>
  <value>true</value>
  <description>Whether hive supports concurrency or not. A zookeeper instance must be up and running for the default hive lock manager to support read-write locks.</description>
</property>

<property>
  <key>hive.unlock.numretries</key>
  <value>2</value>
  <description>The number of times you want to retry to do one unlock</description>
</property>

<property>
  <key>hive.lock.sleep.between.retries</key>
  <value>2</value>
  <description>The sleep time (in seconds) between various retries</description>
</property>


<property>
  <name>fs.pfile.impl</name>
  <value>org.apache.hadoop.fs.ProxyLocalFileSystem</value>
  <description>A proxy for local file system used for cross file system testing</description>
</property>

<property>
  <name>hive.exec.mode.local.auto</name>
  <value>false</value>
  <description>
    Let hive determine whether to run in local mode automatically
    Disabling this for tests so that minimr is not affected
  </description>
</property>

<property>
  <name>hive.auto.convert.join</name>
  <value>false</value>
  <description>Whether Hive enable the optimization about converting common join into mapjoin based on the input file size</description>
</property>

<property>
  <name>hive.ignore.mapjoin.hint</name>
  <value>false</value>
  <description>Whether Hive ignores the mapjoin hint</description>
</property>

<property>
  <name>hive.mapjoin.max.gc.time.percentage</name>
  <value>0.99</value>
  <description>
  Maximum percentage of wallclock time that the JVM can spend in GC.
  If this limit is exceeded, the local task will abort by itself.
  Tests may run in very stressed environment, so this number is set very high to avoid false negatives.
  </description>
</property>

<property>
  <name>hive.input.format</name>
  <value>org.apache.hadoop.hive.ql.io.CombineHiveInputFormat</value>
  <description>The default input format, if it is not specified, the system assigns it. It is set to HiveInputFormat for hadoop versions 17, 18 and 19, whereas it is set to CombineHiveInputFormat for hadoop 20. The user can always overwrite it - if there is a bug in CombineHiveInputFormat, it can always be manually set to HiveInputFormat. </description>
</property>

<property>
  <name>hive.default.rcfile.serde</name>
  <value>org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe</value>
  <description>The default SerDe hive will use for the rcfile format</description>
</property>

<property>
  <name>hive.stats.key.prefix.reserve.length</name>
  <value>0</value>
</property>

<property>
  <name>hive.conf.restricted.list</name>
  <value>dummy.config.value</value>
  <description>Using dummy config value above because you cannot override config with empty value</description>
</property>

<property>
  <name>hive.exec.submit.local.task.via.child</name>
  <value>false</value>
</property>


<property>
  <name>hive.dummyparam.test.server.specific.config.override</name>
  <value>from.hive-site.xml</value>
  <description>Using dummy param to test server specific configuration</description>
</property>

<property>
  <name>hive.dummyparam.test.server.specific.config.hivesite</name>
  <value>from.hive-site.xml</value>
  <description>Using dummy param to test server specific configuration</description>
</property>

<property>
  <name>test.var.hiveconf.property</name>
  <value>${hive.exec.default.partition.name}</value>
  <description>Test hiveconf property substitution</description>
</property>

<property>
  <name>test.property1</name>
  <value>value1</value>
  <description>Test property defined in hive-site.xml only</description>
</property>

<property>
  <name>hive.test.dummystats.aggregator</name>
  <value>value2</value>
</property>

<property>
  <name>hive.fetch.task.conversion</name>
  <value>minimal</value>
</property>

<property>
  <name>hive.users.in.admin.role</name>
  <value>hive_admin_user</value>
</property>

<property>
  <name>hive.security.authorization.manager</name>
  <value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactoryForTest</value>
  <description>The Hive client authorization manager class name.</description>
</property>

<property>
  <name>hive.llap.io.cache.orc.size</name>
  <value>8388608</value>
</property>

<property>
  <name>hive.llap.io.cache.orc.arena.size</name>
  <value>8388608</value>
</property>

<property>
  <name>hive.llap.io.cache.orc.alloc.max</name>
  <value>2097152</value>
</property>


<property>
  <name>hive.llap.io.cache.orc.alloc.min</name>
  <value>32768</value>
</property>

<property>
  <name>hive.llap.cache.allow.synthetic.fileid</name>
  <value>true</value>
</property>

<property>
  <name>hive.llap.io.use.lrfu</name>
  <value>true</value>
</property>

<property>
  <name>hive.llap.io.allocator.direct</name>
  <value>false</value>
</property>

<property>
  <name>hive.stats.column.autogather</name>
  <value>true</value>
</property>

<property>
  <name>hive.materializedview.rewriting</name>
  <value>true</value>
</property>

<property>
  <name>hive.stats.fetch.bitvector</name>
  <value>true</value>
</property>


<property>
  <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
  <value>99</value>
</property>

<property>
  <name>hive.query.results.cache.enabled</name>
  <value>false</value>
</property>

<property>
  <name>hive.query.reexecution.stats.persist.scope</name>
  <value>query</value>
</property>

<property>
  <name>hive.scheduled.queries.executor.enabled</name>
  <value>false</value>
</property>

<property>
  <name>hive.strict.timestamp.conversion</name>
  <value>false</value>
</property>

<property>
  <name>hive.cbo.fallback.strategy</name>
  <value>TEST</value>
</property>

<property>
  <name>iceberg.hive.keep.stats</name>
  <value>true</value>
  <description>
    We want we keep the stats in Hive sessions.
  </description>
</property>

<property>
  <name>hive.server2.operation.log.purgePolicy.timeToLive</name>
  <value>5s</value>
</property>

<property>
  <name>hive.txn.xlock.ctas</name>
  <value>false</value>
</property>

  <property>
    <!-- Set large for tests. This acts as an artifical LIMIT. See HIVE-24484 for details -->
    <name>hive.server2.thrift.resultset.max.fetch.size</name>
    <value>1000000</value>
  </property>

  <property>
    <name>hive.server2.webui.max.threads</name>
    <value>4</value>
  </property>

  <property>
    <name>hive.async.cleanup.service.thread.count</name>
    <value>4</value>
  </property>
</configuration>
