You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2015/06/04 03:58:24 UTC

ambari git commit: AMBARI-11577 - Accumulo Does Not Upgrade During A Rolling Upgrade (jonathanhurley)

Repository: ambari
Updated Branches:
  refs/heads/trunk cb2a69aa4 -> d658e6fd7


AMBARI-11577 - Accumulo Does Not Upgrade During A Rolling Upgrade (jonathanhurley)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d658e6fd
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d658e6fd
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d658e6fd

Branch: refs/heads/trunk
Commit: d658e6fd72b1081ddd5c9eaeec026c2540dad3f3
Parents: cb2a69a
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue Jun 2 09:21:14 2015 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Jun 3 21:54:43 2015 -0400

----------------------------------------------------------------------
 .../ACCUMULO/1.6.1.2.2.0/metainfo.xml           |   6 ++
 .../package/scripts/accumulo_client.py          |  22 +++-
 .../package/scripts/accumulo_script.py          | 104 ++++++++++++++-----
 .../stacks/HDP/2.2/upgrades/upgrade-2.3.xml     |  45 ++++++++
 .../stacks/2.2/ACCUMULO/test_accumulo_client.py |  78 ++++++++++++++
 .../test/python/stacks/2.2/configs/default.json |  47 ++++++++-
 6 files changed, 276 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d658e6fd/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/metainfo.xml b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/metainfo.xml
index f727a17..f40da62 100644
--- a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/metainfo.xml
@@ -30,6 +30,7 @@
           <displayName>Accumulo Master</displayName>
           <category>MASTER</category>
           <cardinality>1+</cardinality>
+          <versionAdvertised>true</versionAdvertised>
           <timelineAppid>ACCUMULO</timelineAppid>
           <dependencies>
             <dependency>
@@ -60,6 +61,7 @@
           <displayName>Accumulo Monitor</displayName>
           <category>MASTER</category>
           <cardinality>1+</cardinality>
+          <versionAdvertised>true</versionAdvertised>
           <timelineAppid>ACCUMULO</timelineAppid>
           <commandScript>
             <script>scripts/accumulo_monitor.py</script>
@@ -73,6 +75,7 @@
           <displayName>Accumulo GC</displayName>
           <category>MASTER</category>
           <cardinality>1+</cardinality>
+          <versionAdvertised>true</versionAdvertised>
           <timelineAppid>ACCUMULO</timelineAppid>
           <commandScript>
             <script>scripts/accumulo_gc.py</script>
@@ -86,6 +89,7 @@
           <displayName>Accumulo Tracer</displayName>
           <category>MASTER</category>
           <cardinality>1+</cardinality>
+          <versionAdvertised>true</versionAdvertised>
           <timelineAppid>ACCUMULO</timelineAppid>
           <commandScript>
             <script>scripts/accumulo_tracer.py</script>
@@ -99,6 +103,7 @@
           <displayName>Accumulo TServer</displayName>
           <category>SLAVE</category>
           <cardinality>1+</cardinality>
+          <versionAdvertised>true</versionAdvertised>
           <timelineAppid>ACCUMULO</timelineAppid>
           <commandScript>
             <script>scripts/accumulo_tserver.py</script>
@@ -111,6 +116,7 @@
           <displayName>Accumulo Client</displayName>
           <category>CLIENT</category>
           <cardinality>1+</cardinality>
+          <versionAdvertised>true</versionAdvertised>
           <timelineAppid>ACCUMULO</timelineAppid>
           <commandScript>
             <script>scripts/accumulo_client.py</script>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d658e6fd/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_client.py b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_client.py
index 1645304..df5e687 100644
--- a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_client.py
+++ b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_client.py
@@ -18,7 +18,11 @@ limitations under the License.
 
 """
 
-from resource_management import *
+from resource_management.core.logger import Logger
+from resource_management.core.exceptions import ClientComponentHasNoStatus
+from resource_management.libraries.functions import conf_select
+from resource_management.libraries.functions import hdp_select
+from resource_management.libraries.script.script import Script
 
 from accumulo_configuration import setup_conf_dir
 
@@ -27,19 +31,35 @@ class AccumuloClient(Script):
   def get_stack_to_component(self):
     return {"HDP": "accumulo-client"}
 
+
   def install(self, env):
     self.install_packages(env)
     self.configure(env)
 
+
   def configure(self, env):
     import params
     env.set_params(params)
 
     setup_conf_dir(name='client')
 
+
   def status(self, env):
     raise ClientComponentHasNoStatus()
 
 
+  def pre_rolling_restart(self, env):
+    import params
+    env.set_params(params)
+
+    # this function should not execute if the version can't be determined or
+    # is not at least HDP 2.2.0.0
+    if Script.is_hdp_stack_less_than("2.2"):
+      return
+
+    Logger.info("Executing Accumulo Client Rolling Upgrade pre-restart")
+    conf_select.select(params.stack_name, "accumulo", params.version)
+    hdp_select.select("accumulo-client", params.version)
+
 if __name__ == "__main__":
   AccumuloClient().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/d658e6fd/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_script.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_script.py b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_script.py
index 8f78325..b4bf044 100644
--- a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_script.py
+++ b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_script.py
@@ -17,44 +17,76 @@ See the License for the specific language governing permissions and
 limitations under the License.
 
 """
-
-from resource_management import *
-from resource_management.libraries.functions.security_commons import build_expectations, \
-  cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
-  FILE_TYPE_XML
+from resource_management.core.exceptions import Fail
+from resource_management.core.logger import Logger
+from resource_management.libraries.functions import format
+from resource_management.libraries.functions import check_process_status
+from resource_management.libraries.functions import conf_select
+from resource_management.libraries.functions import hdp_select
+from resource_management.libraries.functions.security_commons import build_expectations
+from resource_management.libraries.functions.security_commons import cached_kinit_executor
+from resource_management.libraries.functions.security_commons import get_params_from_filesystem
+from resource_management.libraries.functions.security_commons import validate_security_config_properties
+from resource_management.libraries.functions.security_commons import FILE_TYPE_XML
+from resource_management.libraries.script.script import Script
 
 from accumulo_configuration import setup_conf_dir
 from accumulo_service import accumulo_service
 
 class AccumuloScript(Script):
+
+  # a mapping between the component named used by these scripts and the name
+  # which is used by hdp-select
+  COMPONENT_TO_HDP_SELECT_MAPPING = {
+    "gc" : "accumulo-gc",
+    "master" : "accumulo-master",
+    "monitor" : "accumulo-monitor",
+    "tserver" : "accumulo-tablet",
+    "tracer" : "accumulo-tracer"
+  }
+
   def __init__(self, component):
     self.component = component
 
+
+  def get_stack_to_component(self):
+    """
+    Gets the hdp-select component name given the script component
+    :return:  the name of the component on the HDP stack which is used by
+              hdp-select
+    """
+    if self.component not in self.COMPONENT_TO_HDP_SELECT_MAPPING:
+      return None
+
+    hdp_component = self.COMPONENT_TO_HDP_SELECT_MAPPING[self.component]
+    return {"HDP": hdp_component}
+
+
   def install(self, env):
     self.install_packages(env)
 
+
   def configure(self, env):
     import params
     env.set_params(params)
 
     setup_conf_dir(name=self.component)
 
-  def start(self, env):
+
+  def start(self, env, rolling_restart=False):
     import params
     env.set_params(params)
     self.configure(env) # for security
 
-    accumulo_service( self.component,
-      action = 'start'
-    )
+    accumulo_service( self.component, action = 'start')
 
-  def stop(self, env):
+
+  def stop(self, env, rolling_restart=False):
     import params
     env.set_params(params)
 
-    accumulo_service( self.component,
-      action = 'stop'
-    )
+    accumulo_service( self.component, action = 'stop')
+
 
   def status(self, env):
     import status_params
@@ -63,6 +95,30 @@ class AccumuloScript(Script):
     pid_file = format("{pid_dir}/accumulo-{accumulo_user}-{component}.pid")
     check_process_status(pid_file)
 
+
+  def pre_rolling_restart(self, env):
+    import params
+    env.set_params(params)
+
+    # this function should not execute if the version can't be determined or
+    # is not at least HDP 2.2.0.0
+    if Script.is_hdp_stack_less_than("2.2"):
+      return
+
+    if self.component not in self.COMPONENT_TO_HDP_SELECT_MAPPING:
+      Logger.info("Unable to execute an upgrade for unknown component {0}".format(self.component))
+      raise Fail("Unable to execute an upgrade for unknown component {0}".format(self.component))
+
+    hdp_component = self.COMPONENT_TO_HDP_SELECT_MAPPING[self.component]
+
+    Logger.info("Executing Accumulo Rolling Upgrade pre-restart for {0}".format(hdp_component))
+    conf_select.select(params.stack_name, "accumulo", params.version)
+    hdp_select.select(hdp_component, params.version)
+
+    # some accumulo components depend on the client, so update that too
+    hdp_select.select("accumulo-client", params.version)
+
+
   def security_status(self, env):
     import status_params
 
@@ -73,15 +129,14 @@ class AccumuloScript(Script):
                          'general.kerberos.principal']
     props_read_check = ['general.kerberos.keytab']
     accumulo_site_expectations = build_expectations('accumulo-site',
-                                                    props_value_check,
-                                                    props_empty_check,
-                                                    props_read_check)
+      props_value_check, props_empty_check, props_read_check)
 
     accumulo_expectations = {}
     accumulo_expectations.update(accumulo_site_expectations)
 
     security_params = get_params_from_filesystem(status_params.conf_dir,
-                                                 {'accumulo-site.xml': FILE_TYPE_XML})
+      {'accumulo-site.xml': FILE_TYPE_XML})
+
     result_issues = validate_security_config_properties(security_params, accumulo_expectations)
     if not result_issues:  # If all validations passed successfully
       try:
@@ -95,12 +150,13 @@ class AccumuloScript(Script):
           return
 
         cached_kinit_executor(status_params.kinit_path_local,
-                              status_params.accumulo_user,
-                              security_params['accumulo-site']['general.kerberos.keytab'],
-                              security_params['accumulo-site']['general.kerberos.principal'],
-                              status_params.hostname,
-                              status_params.tmp_dir,
-                              30)
+          status_params.accumulo_user,
+          security_params['accumulo-site']['general.kerberos.keytab'],
+          security_params['accumulo-site']['general.kerberos.principal'],
+          status_params.hostname,
+          status_params.tmp_dir,
+          30)
+
         self.put_structured_out({"securityState": "SECURED_KERBEROS"})
       except Exception as e:
         self.put_structured_out({"securityState": "ERROR"})
@@ -114,4 +170,4 @@ class AccumuloScript(Script):
 
 
 if __name__ == "__main__":
-  self.fail_with_error('component unspecified')
+  AccumuloScript().fail_with_error('component unspecified')

http://git-wip-us.apache.org/repos/asf/ambari/blob/d658e6fd/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
index f2ca5a0..0cee7b1 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
@@ -265,6 +265,18 @@
       </service>
     </group>
 
+    <group name="ACCUMULO" title="Accumulo">
+      <skippable>true</skippable>
+      <service name="ACCUMULO">
+        <component>ACCUMULO_MASTER</component>
+        <component>ACCUMULO_TSERVER</component>
+        <component>ACCUMULO_MONITOR</component>
+        <component>ACCUMULO_GC</component>
+        <component>ACCUMULO_TRACER</component>
+        <component>ACCUMULO_CLIENT</component>
+      </service>
+    </group>
+
     <group xsi:type="cluster" name="POST_CLUSTER" title="Finalize {{direction.text.proper}}">
       <skippable>true</skippable>
       <execute-stage title="Check Unhealthy Hosts" id="unhealthy-hosts">
@@ -1141,5 +1153,38 @@
         </upgrade>
       </component>
     </service>
+
+    <service name="ACCUMULO">
+      <component name="ACCUMULO_MASTER">
+        <upgrade>
+          <task xsi:type="restart" />
+        </upgrade>
+      </component>
+      <component name="ACCUMULO_MONITOR">
+        <upgrade>
+          <task xsi:type="restart" />
+        </upgrade>
+      </component>
+      <component name="ACCUMULO_GC">
+        <upgrade>
+          <task xsi:type="restart" />
+        </upgrade>
+      </component>
+      <component name="ACCUMULO_TRACER">
+        <upgrade>
+          <task xsi:type="restart" />
+        </upgrade>
+      </component>
+      <component name="ACCUMULO_TSERVER">
+        <upgrade>
+          <task xsi:type="restart" />
+        </upgrade>
+      </component>
+      <component name="ACCUMULO_CLIENT">
+        <upgrade>
+          <task xsi:type="restart" />
+        </upgrade>
+      </component>
+    </service>
   </processing>
 </upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d658e6fd/ambari-server/src/test/python/stacks/2.2/ACCUMULO/test_accumulo_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.2/ACCUMULO/test_accumulo_client.py b/ambari-server/src/test/python/stacks/2.2/ACCUMULO/test_accumulo_client.py
new file mode 100644
index 0000000..18c71e3
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.2/ACCUMULO/test_accumulo_client.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+import json
+
+from mock.mock import patch
+from stacks.utils.RMFTestCase import *
+
+
+class TestAccumuloClient(RMFTestCase):
+  COMMON_SERVICES_PACKAGE_DIR = "ACCUMULO/1.6.1.2.2.0/package"
+  STACK_VERSION = "2.1"
+
+  def test_pre_rolling_restart(self):
+    config_file = self.get_src_folder() + "/test/python/stacks/2.2/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+
+    version = '2.2.7.0-1234'
+    json_content['commandParams']['version'] = version
+
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/accumulo_client.py",
+      classname = "AccumuloClient",
+      command = "pre_rolling_restart",
+      config_dict = json_content,
+      hdp_stack_version = self.STACK_VERSION,
+      target = RMFTestCase.TARGET_COMMON_SERVICES)
+
+    self.assertResourceCalled('Execute', 'hdp-select set accumulo-client %s' % version,)
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder() + "/test/python/stacks/2.2/configs/default.json"
+
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/accumulo_client.py",
+      classname = "AccumuloClient",
+      command = "pre_rolling_restart",
+      config_dict = json_content,
+      hdp_stack_version = self.STACK_VERSION,
+      target = RMFTestCase.TARGET_COMMON_SERVICES,
+      call_mocks = [(0, None), (0, None)],
+      mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set accumulo-client %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package accumulo --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+
+    self.assertEquals(
+      "conf-select set-conf-dir --package accumulo --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

http://git-wip-us.apache.org/repos/asf/ambari/blob/d658e6fd/ambari-server/src/test/python/stacks/2.2/configs/default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.2/configs/default.json b/ambari-server/src/test/python/stacks/2.2/configs/default.json
index 505086d..0dc9ad0 100644
--- a/ambari-server/src/test/python/stacks/2.2/configs/default.json
+++ b/ambari-server/src/test/python/stacks/2.2/configs/default.json
@@ -330,7 +330,52 @@
       },
       "ranger-hive-plugin-properties": {
             "ranger-hive-plugin-enabled":"yes"
-       }
+       },
+        "accumulo-env": {
+            "accumulo_user": "accumulo",
+            "accumulo_master_heapsize": "1024",
+            "accumulo_log_dir": "/var/log/accumulo",
+            "accumulo_gc_heapsize": "256",
+            "server_content": "\n#! /usr/bin/env bash\nexport HADOOP_PREFIX={{hadoop_prefix}}\nexport HADOOP_CONF_DIR={{hadoop_conf_dir}}\nexport JAVA_HOME={{java64_home}}\nexport ZOOKEEPER_HOME={{zookeeper_home}}\nexport ACCUMULO_PID_DIR={{pid_dir}}\nexport ACCUMULO_LOG_DIR={{log_dir}}\nexport ACCUMULO_CONF_DIR={{server_conf_dir}}\nexport ACCUMULO_TSERVER_OPTS=\"-Xmx{{accumulo_tserver_heapsize}}m -Xms{{accumulo_tserver_heapsize}}m\"\nexport ACCUMULO_MASTER_OPTS=\"-Xmx{{accumulo_master_heapsize}}m -Xms{{accumulo_master_heapsize}}m\"\nexport ACCUMULO_MONITOR_OPTS=\"-Xmx{{accumulo_monitor_heapsize}}m -Xms{{accumulo_monitor_heapsize}}m\"\nexport ACCUMULO_GC_OPTS=\"-Xmx{{accumulo_gc_heapsize}}m -Xms{{accumulo_gc_heapsize}}m\"\nexport ACCUMULO_GENERAL_OPTS=\"-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -Djava.net.preferIPv4Stack=true ${ACCUMULO_GENERAL_OPTS}\"\nexport ACCUMULO_OTHER_OPTS=\"-Xmx{{accumulo_other_heapsize}}m -Xms{{accumulo_other_heapsize}}m ${ACCUMULO_OTHER
 _OPTS}\"\nexport ACCUMULO_MONITOR_BIND_ALL={{monitor_bind_str}}\n# what do when the JVM runs out of heap memory\nexport ACCUMULO_KILL_CMD='kill -9 %p'",
+            "content": "\n#! /usr/bin/env bash\nexport HADOOP_PREFIX={{hadoop_prefix}}\nexport HADOOP_CONF_DIR={{hadoop_conf_dir}}\nexport JAVA_HOME={{java64_home}}\nexport ZOOKEEPER_HOME={{zookeeper_home}}\nexport ACCUMULO_LOG_DIR={{log_dir}}\nexport ACCUMULO_CONF_DIR={{conf_dir}}\nexport ACCUMULO_TSERVER_OPTS=\"-Xmx{{accumulo_tserver_heapsize}}m -Xms{{accumulo_tserver_heapsize}}m\"\nexport ACCUMULO_MASTER_OPTS=\"-Xmx{{accumulo_master_heapsize}}m -Xms{{accumulo_master_heapsize}}m\"\nexport ACCUMULO_MONITOR_OPTS=\"-Xmx{{accumulo_monitor_heapsize}}m -Xms{{accumulo_monitor_heapsize}}m\"\nexport ACCUMULO_GC_OPTS=\"-Xmx{{accumulo_gc_heapsize}}m -Xms{{accumulo_gc_heapsize}}m\"\nexport ACCUMULO_GENERAL_OPTS=\"-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -Djava.net.preferIPv4Stack=true ${ACCUMULO_GENERAL_OPTS}\"\nexport ACCUMULO_OTHER_OPTS=\"-Xmx{{accumulo_other_heapsize}}m -Xms{{accumulo_other_heapsize}}m ${ACCUMULO_OTHER_OPTS}\"\n# what do when the JVM runs out of heap m
 emory\nexport ACCUMULO_KILL_CMD='kill -9 %p'",
+            "accumulo_instance_name": "hdp-accumulo-instance",
+            "instance_secret": "password",
+            "accumulo_root_password": "password",
+            "accumulo_pid_dir": "/var/run/accumulo",
+            "accumulo_monitor_bind_all": "false",
+            "trace_password": "password",
+            "accumulo_tserver_heapsize": "1536",
+            "accumulo_monitor_heapsize": "1024",
+            "accumulo_other_heapsize": "1024"
+        },
+        "accumulo-site": {
+            "instance.zookeeper.host": "c6402.ambari.apache.org:2181,c6401.ambari.apache.org:2181,c6403.ambari.apache.org:2181",
+            "tserver.port.client": "9997",
+            "trace.port.client": "12234",
+            "monitor.port.client": "50095",
+            "trace.user": "trace",
+            "tserver.cache.data.size": "128M",
+            "tserver.memory.maps.native.enabled": "true",
+            "general.classpaths": "\n$ACCUMULO_HOME/lib/accumulo-server.jar,\n$ACCUMULO_HOME/lib/accumulo-core.jar,\n$ACCUMULO_HOME/lib/accumulo-start.jar,\n$ACCUMULO_HOME/lib/accumulo-fate.jar,\n$ACCUMULO_HOME/lib/accumulo-proxy.jar,\n$ACCUMULO_HOME/lib/[^.].*.jar,\n$ZOOKEEPER_HOME/zookeeper[^.].*.jar,\n$HADOOP_CONF_DIR,\n/usr/hdp/current/hadoop-client/[^.].*.jar,\n/usr/hdp/current/hadoop-client/lib/(?!slf4j)[^.].*.jar,\n/usr/hdp/current/hadoop-hdfs-client/[^.].*.jar,\n/usr/hdp/current/hadoop-mapreduce-client/[^.].*.jar,\n/usr/hdp/current/hadoop-yarn-client/[^.].*.jar,\n/usr/hdp/current/hadoop-yarn-client/lib/jersey.*.jar,\n/usr/hdp/current/hive-client/lib/hive-accumulo-handler.jar,",
+            "monitor.port.log4j": "4560",
+            "gc.port.client": "50091",
+            "tserver.memory.maps.max": "1G",
+            "tserver.sort.buffer.size": "200M",
+            "tserver.cache.index.size": "256M",
+            "master.port.client": "9999",
+            "tserver.walog.max.size": "1G",
+            "instance.volumes": "hdfs://c1ha/apps/accumulo/data",
+            "instance.zookeeper.timeout": "30s"
+        },
+        "accumulo-log4j": {
+            "info_num_logs": "10",
+            "info_log_size": "1000M",
+            "debug_log_size": "1000M",
+            "content": "\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements.  See the NOTICE file distributed with\n# this work for additional information regarding copyright ownership.\n# The ASF licenses this file to You under the Apache License, Version 2.0\n# (the \"License\"); you may not use this file except in compliance with\n# the License.  You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# default logging properties:\n#  by default, log everything at INFO or higher to the console\nlog4j.rootLogger=INFO,A1\n\n# hide Jetty junk\nlog4j.logger.org.mortbay.log
 =WARN,A1\n\n# hide \"Got brand-new compressor\" messages\nlog4j.logger.org.apache.hadoop.io.compress=WARN,A1\nlog4j.logger.org.apache.accumulo.core.file.rfile.bcfile.Compression=WARN,A1\n\n# hide junk from TestRandomDeletes\nlog4j.logger.org.apache.accumulo.test.TestRandomDeletes=WARN,A1\n\n# hide junk from VFS\nlog4j.logger.org.apache.commons.vfs2.impl.DefaultFileSystemManager=WARN,A1\n\n# hide almost everything from zookeeper\nlog4j.logger.org.apache.zookeeper=ERROR,A1\n\n# hide AUDIT messages in the shell, alternatively you could send them to a different logger\nlog4j.logger.org.apache.accumulo.core.util.shell.Shell.audit=WARN,A1\n\n# Send most things to the console\nlog4j.appender.A1=org.apache.log4j.ConsoleAppender\nlog4j.appender.A1.layout.ConversionPattern=%d{ISO8601} [%-8c{2}] %-5p: %m%n\nlog4j.appender.A1.layout=org.apache.log4j.PatternLayout",
+            "audit_log_level": "OFF",
+            "monitor_forwarding_log_level": "WARN",
+            "debug_num_logs": "10"
+        }
     },
     "configuration_attributes": {
         "yarn-site": {