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):
