Repository: bigtop
Updated Branches:
  refs/heads/master 4fa50e433 -> 1b574950f


BIGTOP-2570: ease hadoop charm debugging (closes #162)

Signed-off-by: Kevin W Monroe <[email protected]>


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

Branch: refs/heads/master
Commit: 1b574950f1d7165337a651b503c5caaefd428fd2
Parents: 4fa50e4
Author: Kevin W Monroe <[email protected]>
Authored: Thu Nov 17 00:08:27 2016 +0000
Committer: Kevin W Monroe <[email protected]>
Committed: Tue Nov 22 17:19:53 2016 -0600

----------------------------------------------------------------------
 .../layer-hadoop-namenode/reactive/namenode.py  | 27 ++++++++----
 .../reactive/apache_bigtop_plugin.py            |  5 +--
 .../layer-hadoop-resourcemanager/actions.yaml   | 10 ++---
 .../actions/mrbench                             | 29 +++++++------
 .../actions/nnbench                             | 28 ++++++------
 .../actions/parseBenchmark.py                   | 43 +++++++++++++++++++
 .../actions/parseNNBench.py                     | 45 --------------------
 .../actions/parseTerasort.py                    | 45 --------------------
 .../actions/smoke-test                          |  6 +--
 .../actions/teragen                             | 25 ++++++-----
 .../actions/terasort                            | 31 ++++++++------
 .../actions/testdfsio                           | 29 +++++++------
 .../reactive/resourcemanager.py                 | 32 +++++++++-----
 .../layer-hadoop-slave/actions/smoke-test       |  6 +--
 14 files changed, 174 insertions(+), 187 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/reactive/namenode.py
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/reactive/namenode.py 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/reactive/namenode.py
index b18bd60..2faee7f 100644
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/reactive/namenode.py
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/reactive/namenode.py
@@ -92,15 +92,24 @@ def install_namenode():
 @when_not('apache-bigtop-namenode.started')
 def start_namenode():
     hookenv.status_set('maintenance', 'starting namenode')
-    # NB: service should be started by install, but this may be handy in case
-    # we have something that removes the .started state in the future. Also
-    # note we restart here in case we modify conf between install and now.
-    host.service_restart('hadoop-hdfs-namenode')
-    for port in get_layer_opts().exposed_ports('namenode'):
-        hookenv.open_port(port)
-    set_state('apache-bigtop-namenode.started')
-    hookenv.application_version_set(get_hadoop_version())
-    hookenv.status_set('maintenance', 'namenode started')
+    # NB: service should be started by install, but we want to verify it is
+    # running before we set the .started state and open ports. We always
+    # restart here, which may seem heavy-handed. However, restart works
+    # whether the service is currently started or stopped. It also ensures the
+    # service is using the most current config.
+    started = host.service_restart('hadoop-hdfs-namenode')
+    if started:
+        for port in get_layer_opts().exposed_ports('namenode'):
+            hookenv.open_port(port)
+        set_state('apache-bigtop-namenode.started')
+        hookenv.status_set('maintenance', 'namenode started')
+        hookenv.application_version_set(get_hadoop_version())
+    else:
+        hookenv.log('NameNode failed to start')
+        hookenv.status_set('blocked', 'namenode failed to start')
+        remove_state('apache-bigtop-namenode.started')
+        for port in get_layer_opts().exposed_ports('namenode'):
+            hookenv.close_port(port)
 
 
 ###############################################################################

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/reactive/apache_bigtop_plugin.py
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/reactive/apache_bigtop_plugin.py
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/reactive/apache_bigtop_plugin.py
index e680002..4c29404 100644
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/reactive/apache_bigtop_plugin.py
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/reactive/apache_bigtop_plugin.py
@@ -89,7 +89,7 @@ def install_hadoop_client_yarn(principal, namenode, 
resourcemanager):
         bigtop.render_site_yaml(hosts=hosts, roles='hadoop-client')
         bigtop.trigger_puppet()
         set_state('apache-bigtop-plugin.yarn.installed')
-        hookenv.status_set('active', 'ready (HDFS & YARN)')
+        hookenv.status_set('maintenance', 'plugin (yarn) installed')
     else:
         hookenv.status_set('waiting', 'waiting for master fqdns')
 
@@ -108,8 +108,7 @@ def send_rm_spec(principal, resourcemanager):
 @when_not('apache-bigtop-plugin.yarn.ready')
 def send_principal_yarn_info(principal, resourcemanager):
     """Send YARN data when the resourcemanager becomes ready."""
-    version = get_hadoop_version()
-    principal.set_installed(version)
+    principal.set_installed(get_hadoop_version())
     principal.set_yarn_ready(
         resourcemanager.resourcemanagers(), resourcemanager.port(),
         resourcemanager.hs_http(), resourcemanager.hs_ipc())

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions.yaml
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions.yaml 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions.yaml
index 77a644b..bdd28be 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions.yaml
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions.yaml
@@ -75,10 +75,6 @@ testdfsio:
                 description: filesize in MB
                 type: integer
                 default: 1000
-        resfile:
-                description: Results file name
-                type: string
-                default: "/tmp/TestDFSIO_results.log"
         buffersize:
                 description: Buffer size in bytes
                 type: integer
@@ -93,18 +89,18 @@ teragen:
         indir:
             description: HDFS directory where generated data is stored
             type: string
-            default: 'tera_demo_in'
+            default: '/benchmarks/TeraGen'
 terasort:
     description: Runs teragen to generate sample data, and then runs terasort 
to sort that data
     params:
         indir:
             description: HDFS directory where generated data is stored
             type: string
-            default: 'tera_demo_in'
+            default: '/benchmarks/TeraGen'
         outdir:
             description: HDFS directory where sorted data is stored
             type: string
-            default: 'tera_demo_out'
+            default: '/benchmarks/TeraSort'
         size:
             description: The number of 100 byte rows, default to 1GB of data 
to generate and sort
             type: integer

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench
index 1ef70cc..d177a2d 100755
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench
@@ -22,7 +22,7 @@ if ! charms.reactive is_state 
'apache-bigtop-resourcemanager.ready'; then
     exit
 fi
 
-BASE_DIR=`action-get basedir`/`hostname -s`
+BASE_DIR=`action-get basedir`
 OPTIONS=''
 
 MAPS=`action-get maps`
@@ -31,6 +31,7 @@ NUMRUNS=`action-get numruns`
 INPUTLINES=`action-get inputlines`
 INPUTTYPE=`action-get inputtype`
 
+# construct options
 OPTIONS="${OPTIONS} -maps ${MAPS}"
 OPTIONS="${OPTIONS} -reduces ${REDUCES}"
 OPTIONS="${OPTIONS} -numRuns ${NUMRUNS}"
@@ -45,12 +46,13 @@ RESULT_LOG=${RESULT_DIR}/${RUN}.log
 mkdir -p ${RESULT_DIR}
 chown -R ubuntu:ubuntu ${RESULT_DIR}
 
-# clean out any previous data (must be run as ubuntu)
-su ubuntu << EOF
-if hadoop fs -stat ${BASE_DIR} &> /dev/null; then
-    hadoop fs -rm -r -skipTrash ${BASE_DIR} || true
-fi
-EOF
+benchmark_cleanup() {
+  # must be run as ubuntu, since that user owns the hdfs space
+  su - ubuntu -c "hadoop fs -rm -f -r -skipTrash ${BASE_DIR}"
+}
+
+# clean out benchmark dir
+benchmark_cleanup
 
 benchmark-start
 START=`date +%s`
@@ -60,16 +62,15 @@ START=`date +%s`
 su ubuntu << EOF
 . /etc/default/hadoop
 echo 'running benchmark'
-hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar mrbench $OPTIONS 
&> ${RESULT_LOG}
+hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar mrbench $OPTIONS 
2>&1 | tee -a ${RESULT_LOG}
 EOF
 STOP=`date +%s`
 benchmark-finish
 
-su ubuntu << EOF
-`cat ${RESULT_LOG} | $CHARM_DIR/actions/parseTerasort.py`
-EOF
-
-# More mapreduce benchmark results logged to: ${RESULT_LOG}
-
+# Set action and benchmark output
+cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
 DURATION=`expr $STOP - $START`
 benchmark-composite "${DURATION}" 'secs' 'asc'
+
+# clean out benchmark dir
+benchmark_cleanup

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench
index f965936..13d7618 100755
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench
@@ -22,7 +22,7 @@ if ! charms.reactive is_state 
'apache-bigtop-resourcemanager.ready'; then
     exit
 fi
 
-BASE_DIR=`action-get basedir`/`hostname -s`
+BASE_DIR=`action-get basedir`
 OPTIONS=''
 
 MAPS=`action-get maps`
@@ -32,6 +32,8 @@ BYTES=`action-get bytes`
 NUMFILES=`action-get numfiles`
 REPFACTOR=`action-get repfactor`
 
+# construct options
+OPTIONS="${OPTIONS} -operation create_write -readFileAfterOpen true"
 OPTIONS="${OPTIONS} -maps ${MAPS}"
 OPTIONS="${OPTIONS} -reduces ${REDUCES}"
 OPTIONS="${OPTIONS} -blockSize ${BLOCKSIZE}"
@@ -47,12 +49,13 @@ RESULT_LOG=${RESULT_DIR}/${RUN}.log
 mkdir -p ${RESULT_DIR}
 chown -R ubuntu:ubuntu ${RESULT_DIR}
 
-# clean out any previous data (must be run as ubuntu)
-su ubuntu << EOF
-if hadoop fs -stat ${BASE_DIR} &> /dev/null; then
-    hadoop fs -rm -r -skipTrash ${BASE_DIR} || true
-fi
-EOF
+benchmark_cleanup() {
+  # must be run as ubuntu, since that user owns the hdfs space
+  su - ubuntu -c "hadoop fs -rm -f -r -skipTrash ${BASE_DIR}"
+}
+
+# clean out benchmark dir
+benchmark_cleanup
 
 benchmark-start
 START=`date +%s`
@@ -63,14 +66,15 @@ su ubuntu << EOF
 . /etc/default/hadoop
 echo 'running benchmark'
 cd /tmp/
-hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar nnbench 
-operation create_write -readFileAfterOpen true $OPTIONS &> ${RESULT_LOG}
+hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar nnbench $OPTIONS 
2>&1 | tee -a ${RESULT_LOG}
 EOF
 STOP=`date +%s`
 benchmark-finish
 
-su ubuntu << EOF
-`cat ${RESULT_LOG} | $CHARM_DIR/actions/parseTerasort.py`
-EOF
-
+# Set action and benchmark output
+cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
 DURATION=`expr $STOP - $START`
 benchmark-composite "${DURATION}" 'secs' 'asc'
+
+# clean out benchmark dir
+benchmark_cleanup

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py
new file mode 100755
index 0000000..4abdea0
--- /dev/null
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+
+# 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.
+
+"""
+Simple script to parse benchmark transaction results
+and reformat them as JSON for sending back to juju
+"""
+import sys
+import json
+from charmhelpers.core import hookenv
+import re
+
+
+def parse_benchmark_output():
+    """
+    Parse the output from the benchmark and set the action results:
+    """
+    results = {}
+
+    # Find all of the interesting things
+    regex = re.compile('\t+(.*)=(.*)')
+    for line in sys.stdin.readlines():
+        m = regex.match(line)
+        if m:
+            results[m.group(1)] = m.group(2)
+    hookenv.action_set({"results.raw": json.dumps(results)})
+
+if __name__ == "__main__":
+    parse_benchmark_output()

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseNNBench.py
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseNNBench.py
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseNNBench.py
deleted file mode 100755
index 0374dbe..0000000
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseNNBench.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python3
-
-# 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.
-
-"""
-Simple script to parse nnbench transaction results
-and reformat them as JSON for sending back to juju
-"""
-import sys
-import json
-from charmhelpers.core import hookenv
-import re
-
-
-def parse_nnbench_output():
-    """
-    Parse the output from nnbench and set the action results:
-
-    """
-
-    results = {}
-
-    # Find all of the interesting things
-    regex = re.compile('\t+(.*)=(.*)')
-    for line in sys.stdin.readlines():
-        m = regex.match(line)
-        if m:
-            results[m.group(1)] = m.group(2)
-    hookenv.action_set({"results.raw": json.dumps(results)})
-
-if __name__ == "__main__":
-    parse_nnbench_output()

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseTerasort.py
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseTerasort.py
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseTerasort.py
deleted file mode 100755
index dbf59ba..0000000
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseTerasort.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python3
-
-# 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.
-
-"""
-Simple script to parse terasort transaction results
-and reformat them as JSON for sending back to juju
-"""
-import sys
-import json
-from charmhelpers.core import hookenv
-import re
-
-
-def parse_terasort_output():
-    """
-    Parse the output from terasort and set the action results:
-
-    """
-
-    results = {}
-
-    # Find all of the interesting things
-    regex = re.compile('\t+(.*)=(.*)')
-    for line in sys.stdin.readlines():
-        m = regex.match(line)
-        if m:
-            results[m.group(1)] = m.group(2)
-    hookenv.action_set({"results.raw": json.dumps(results)})
-
-if __name__ == "__main__":
-    parse_terasort_output()

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
index 3280e79..4218f7e 100755
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
@@ -18,9 +18,9 @@
 import sys
 sys.path.append('lib')
 
-from charmhelpers.core import hookenv
-from charms.layer.apache_bigtop_base import Bigtop
-from charms.reactive import is_state
+from charmhelpers.core import hookenv  # noqa: E402
+from charms.layer.apache_bigtop_base import Bigtop  # noqa: E402
+from charms.reactive import is_state  # noqa: E402
 
 
 def fail(msg, output=None):

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen
index fb7c79e..d08468c 100755
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen
@@ -30,28 +30,33 @@ RUN=`date +%s`
 RESULT_DIR=/opt/teragen-results
 RESULT_LOG=${RESULT_DIR}/${RUN}.log
 mkdir -p ${RESULT_DIR}
-chown -R hdfs ${RESULT_DIR}
+chown -R ubuntu:ubuntu ${RESULT_DIR}
 
-# clean out any previously generated data (must be run as hdfs)
-su hdfs << EOF
-if hadoop fs -stat ${IN_DIR} &> /dev/null; then
-    hadoop fs -rm -r -skipTrash ${IN_DIR} || true
-fi
-EOF
+benchmark_cleanup() {
+  # must be run as ubuntu, since that user owns the hdfs space
+  su - ubuntu -c "hadoop fs -rm -f -r -skipTrash ${IN_DIR}"
+}
+
+# clean out benchmark dir
+benchmark_cleanup
 
 benchmark-start
 START=`date +%s`
 # NB: Escaped vars in the block below (e.g., \${HADOOP_HOME}) come from
 # /etc/environment while non-escaped vars (e.g., ${IN_DIR}) are parameterized
 # from this outer scope
-su hdfs << EOF
+su ubuntu << EOF
 . /etc/default/hadoop
 echo 'generating data'
-hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-examples-*.jar teragen 
${SIZE} ${IN_DIR} &> ${RESULT_LOG}
+hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-examples-*.jar teragen 
${SIZE} ${IN_DIR} 2>&1 | tee -a ${RESULT_LOG}
 EOF
 STOP=`date +%s`
 benchmark-finish
 
-`cat ${RESULT_LOG} | $CHARM_DIR/actions/parseTerasort.py`
+# Set action and benchmark output
+cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
 DURATION=`expr $STOP - $START`
 benchmark-composite "${DURATION}" 'secs' 'asc'
+
+# clean out benchmark dir
+benchmark_cleanup

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
index aaf7da5..5e3e592 100755
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
@@ -32,6 +32,7 @@ REDUCES=`action-get reduces`
 NUMTASKS=`action-get numtasks`
 COMPRESSION=`action-get compression`
 
+# construct options
 OPTIONS="${OPTIONS} -D mapreduce.job.maps=${MAPS}"
 OPTIONS="${OPTIONS} -D mapreduce.job.reduces=${REDUCES}"
 OPTIONS="${OPTIONS} -D mapreduce.job.jvm.numtasks=${NUMTASKS}"
@@ -48,33 +49,35 @@ RUN=`date +%s`
 RESULT_DIR=/opt/terasort-results
 RESULT_LOG=${RESULT_DIR}/${RUN}.log
 mkdir -p ${RESULT_DIR}
-chown -R hdfs ${RESULT_DIR}
+chown -R ubuntu:ubuntu ${RESULT_DIR}
 
-# clean out any previous data (must be run as hdfs)
-su hdfs << EOF
-if hadoop fs -stat ${IN_DIR} &> /dev/null; then
-    hadoop fs -rm -r -skipTrash ${IN_DIR} || true
-fi
-if hadoop fs -stat ${OUT_DIR} &> /dev/null; then
-    hadoop fs -rm -r -skipTrash ${OUT_DIR} || true
-fi
-EOF
+benchmark_cleanup() {
+  # must be run as ubuntu, since that user owns the hdfs space
+  su - ubuntu -c "hadoop fs -rm -f -r -skipTrash ${IN_DIR} ${OUT_DIR}"
+}
+
+# clean out benchmark dir
+benchmark_cleanup
 
 benchmark-start
 START=`date +%s`
 # NB: Escaped vars in the block below (e.g., \${HADOOP_HOME}) come from
 # /etc/environment while non-escaped vars (e.g., ${IN_DIR}) are parameterized
 # from this outer scope
-su hdfs << EOF
+su ubuntu << EOF
 . /etc/default/hadoop
 echo 'generating data'
-hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-examples-*.jar teragen 
${SIZE} ${IN_DIR} &>/dev/null
+hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-examples-*.jar teragen 
${SIZE} ${IN_DIR} 2>&1 | tee -a ${RESULT_LOG}
 echo 'sorting data'
-hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-examples-*.jar terasort 
${OPTIONS} ${IN_DIR} ${OUT_DIR} &> ${RESULT_LOG}
+hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-examples-*.jar terasort 
${OPTIONS} ${IN_DIR} ${OUT_DIR} 2>&1 | tee -a ${RESULT_LOG}
 EOF
 STOP=`date +%s`
 benchmark-finish
 
-`cat ${RESULT_LOG} | $CHARM_DIR/actions/parseTerasort.py`
+# Set action and benchmark output
+cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
 DURATION=`expr $STOP - $START`
 benchmark-composite "${DURATION}" 'secs' 'asc'
+
+# clean out benchmark dir
+benchmark_cleanup

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
index beeb38c..558c9f4 100755
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
@@ -22,7 +22,6 @@ if ! charms.reactive is_state 
'apache-bigtop-resourcemanager.ready'; then
     exit
 fi
 
-RESULTS_FILE=`action-get resfile`
 OPTIONS=''
 
 MODE=`action-get mode`
@@ -30,16 +29,15 @@ NUMFILES=`action-get numfiles`
 FILESIZE=`action-get filesize`
 BUFFERSIZE=`action-get buffersize`
 
+# construct options
 if [ $MODE == 'read' ] ; then
         OPTIONS="${OPTIONS} -read"
 else
         OPTIONS="${OPTIONS} -write"
 fi
-
 OPTIONS="${OPTIONS} -nrFiles ${NUMFILES}"
 OPTIONS="${OPTIONS} -fileSize ${FILESIZE}"
 OPTIONS="${OPTIONS} -bufferSize ${BUFFERSIZE}"
-OPTIONS="${OPTIONS} -resFile ${RESULTS_FILE}"
 
 # create dir to store results
 RUN=`date +%s`
@@ -48,13 +46,17 @@ RESULT_LOG=${RESULT_DIR}/${RUN}.log
 mkdir -p ${RESULT_DIR}
 chown -R ubuntu:ubuntu ${RESULT_DIR}
 
-
-# clean out any previous data (must be run as ubuntu)
-su ubuntu << EOF
-. /etc/default/hadoop
-echo 'cleaning data'
-hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar TestDFSIO -clean
+benchmark_cleanup() {
+  # must be run as ubuntu, since that user owns the hdfs space
+  su ubuntu << EOF
+  . /etc/default/hadoop
+  echo 'cleaning data'
+  hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar TestDFSIO 
-clean
 EOF
+}
+
+# clean out benchmark dir
+benchmark_cleanup
 
 benchmark-start
 START=`date +%s`
@@ -65,12 +67,15 @@ su ubuntu << EOF
 . /etc/default/hadoop
 echo 'running benchmark'
 cd /tmp/
-hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar TestDFSIO 
$OPTIONS &> ${RESULT_LOG}
+hadoop jar \${HADOOP_MAPRED_HOME}/hadoop-mapreduce-*test*.jar TestDFSIO 
$OPTIONS 2>&1 | tee -a ${RESULT_LOG}
 EOF
 STOP=`date +%s`
 benchmark-finish
 
-`cat ${RESULTS_FILE} ${RESULT_LOG} | $CHARM_DIR/actions/parseNNBench.py`
-
+# Set action and benchmark output
+cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
 DURATION=`expr $STOP - $START`
 benchmark-composite "${DURATION}" 'secs' 'asc'
+
+# clean out benchmark dir
+benchmark_cleanup

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/reactive/resourcemanager.py
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/reactive/resourcemanager.py
 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/reactive/resourcemanager.py
index 61c7a3b..c6984e3 100644
--- 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/reactive/resourcemanager.py
+++ 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/reactive/resourcemanager.py
@@ -131,16 +131,28 @@ def send_nn_spec(namenode):
 @when_not('apache-bigtop-resourcemanager.started')
 def start_resourcemanager(namenode):
     hookenv.status_set('maintenance', 'starting resourcemanager')
-    # NB: service should be started by install, but this may be handy in case
-    # we have something that removes the .started state in the future. Also
-    # note we restart here in case we modify conf between install and now.
-    host.service_restart('hadoop-yarn-resourcemanager')
-    host.service_restart('hadoop-mapreduce-historyserver')
-    for port in get_layer_opts().exposed_ports('resourcemanager'):
-        hookenv.open_port(port)
-    set_state('apache-bigtop-resourcemanager.started')
-    hookenv.application_version_set(get_hadoop_version())
-    hookenv.status_set('maintenance', 'resourcemanager started')
+    # NB: service should be started by install, but we want to verify it is
+    # running before we set the .started state and open ports. We always
+    # restart here, which may seem heavy-handed. However, restart works
+    # whether the service is currently started or stopped. It also ensures the
+    # service is using the most current config.
+    rm_started = host.service_restart('hadoop-yarn-resourcemanager')
+    if rm_started:
+        for port in get_layer_opts().exposed_ports('resourcemanager'):
+            hookenv.open_port(port)
+        set_state('apache-bigtop-resourcemanager.started')
+        hookenv.status_set('maintenance', 'resourcemanager started')
+        hookenv.application_version_set(get_hadoop_version())
+    else:
+        hookenv.log('YARN ResourceManager failed to start')
+        hookenv.status_set('blocked', 'resourcemanager failed to start')
+        remove_state('apache-bigtop-resourcemanager.started')
+        for port in get_layer_opts().exposed_ports('resourcemanager'):
+            hookenv.close_port(port)
+
+    hs_started = host.service_restart('hadoop-mapreduce-historyserver')
+    if not hs_started:
+        hookenv.log('YARN HistoryServer failed to start')
 
 
 ###############################################################################

http://git-wip-us.apache.org/repos/asf/bigtop/blob/1b574950/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test
----------------------------------------------------------------------
diff --git 
a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test 
b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test
index 6dec4b5..68e646d 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test
@@ -18,9 +18,9 @@
 import sys
 sys.path.append('lib')
 
-from charmhelpers.core import hookenv
-from charms.layer.apache_bigtop_base import Bigtop
-from charms.reactive import is_state
+from charmhelpers.core import hookenv  # noqa: E402
+from charms.layer.apache_bigtop_base import Bigtop  # noqa: E402
+from charms.reactive import is_state  # noqa: E402
 
 
 def fail(msg, output=None):

Reply via email to