HAD-619. SecondaryNameNode checkpoint deamon installed as an RPM
Project: http://git-wip-us.apache.org/repos/asf/bigtop/repo Commit: http://git-wip-us.apache.org/repos/asf/bigtop/commit/4e74d706 Tree: http://git-wip-us.apache.org/repos/asf/bigtop/tree/4e74d706 Diff: http://git-wip-us.apache.org/repos/asf/bigtop/diff/4e74d706 Branch: refs/heads/master Commit: 4e74d706a5743e90a86b3d26de34fe3edd768944 Parents: c7a1abc Author: Konstantin Boudnik <[email protected]> Authored: Thu Oct 24 17:58:14 2013 -0700 Committer: Konstantin Boudnik <[email protected]> Committed: Mon Oct 28 19:23:54 2013 -0700 ---------------------------------------------------------------------- .../hadoop-hdfs-nonstop-checkpoints.default | 30 ++++++ .../hadoop-hdfs-nonstop-checkpoints.svc | 24 +++++ .../secondary-nonstop-daemon.sh | 107 +++++++++++++++++++ .../secondary-nonstop-loop.sh | 36 +++++++ .../SPECS/wdd-namenode-nonstop.spec | 54 +++++++++- 5 files changed, 247 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/bigtop/blob/4e74d706/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.default ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.default b/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.default new file mode 100644 index 0000000..93b8e9e --- /dev/null +++ b/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.default @@ -0,0 +1,30 @@ +# 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. +export HADOOP_HOME_WARN_SUPPRESS=true +export HADOOP_HOME=/usr/lib/hadoop +export HADOOP_PREFIX=/usr/lib/hadoop +export HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec + +export HADOOP_COMMON_HOME=/usr/lib/hadoop +export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs + +export HADOOP_CONF_DIR=/etc/hadoop/conf +export HADOOP_CHECKPOINTS_CONFIGS=/etc/hadoop/checkpoints.nonstop +export HADOOP_PID_DIR=/var/run/hadoop-hdfs +export HADOOP_LOG_DIR=/var/log/hadoop-hdfs +export HADOOP_NAMENODE_USER=hdfs +export HADOOP_SECONDARYNAMENODE_USER=hdfs +export HADOOP_DATANODE_USER=hdfs +export HADOOP_IDENT_STRING=hdfs http://git-wip-us.apache.org/repos/asf/bigtop/blob/4e74d706/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.svc ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.svc b/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.svc new file mode 100644 index 0000000..5b7b7de --- /dev/null +++ b/bigtop-packages/src/common/wdd-namenode-nonstop/hadoop-hdfs-nonstop-checkpoints.svc @@ -0,0 +1,24 @@ +# 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. +HADOOP_NAME="nonstop-checkpoints" +DAEMON="hadoop-hdfs-$HADOOP_NAME" +DESC="Hadoop namenode $HADOOP_NAME " +EXEC_PATH="/usr/lib/hadoop/sbin/secondary-nonstop-daemon.sh" +SVC_USER="hdfs" +DAEMON_FLAGS="" +CONF_DIR="/etc/hadoop/checkpoints.nonstop" +PIDFILE="/var/run/hadoop-hdfs/hadoop-$SVC_USER-$HADOOP_NAME.pid" +LOCKDIR="/var/lock/subsys" +LOCKFILE="hadoop-$HADOOP_NAME" http://git-wip-us.apache.org/repos/asf/bigtop/blob/4e74d706/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-daemon.sh ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-daemon.sh b/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-daemon.sh new file mode 100755 index 0000000..52cdb04 --- /dev/null +++ b/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-daemon.sh @@ -0,0 +1,107 @@ +#!/bin/bash +# 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. + +usage="Usage: secondary-nonstop-daemon.sh --config CONF_DIR (start|stop)" + +# if no args specified, show usage +if [ $# -le 1 ]; then + echo $usage + exit 1 +fi + +if [ -f /etc/default/hadoop-hdfs-nonstop-checkpoints ] ; then + . /etc/default/hadoop-hdfs-nonstop-checkpoints +fi + +if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then + . "${HADOOP_CONF_DIR}/hadoop-env.sh" +fi + +if [ "$HADOOP_IDENT_STRING" = "" ]; then + export HADOOP_IDENT_STRING="$USER" +fi + +#HADOOP_CHECKPOINTS_CONFIGS is coming from the default above +STOP_TIMEOUT=5 +command=nonstop-checkpoints +log=$HADOOP_LOG_DIR/hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.out +pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid + +if [ "--config" = "$1" ] + then + shift + config=$1 + shift +fi +startStop=$1 + +rotate_log () +{ + log=$1; + num=5; + if [ -n "$2" ]; then + num=$2 + fi + if [ -f "$log" ]; then # rotate logs + while [ $num -gt 1 ]; do + prev=`expr $num - 1` + [ -f "$log.$prev" ] && mv "$log.$prev" "$log.$num" + num=$prev + done + mv "$log" "$log.$num"; + fi +} + +case $startStop in + + (start) + rotate_log $log + echo starting $command, logging to $log + nohup $HADOOP_HOME/sbin/secondary-nonstop-loop.sh > "$log" 2>&1 < /dev/null & + echo $! > $pid + sleep 1 + head "$log" + if ! ps -p $! > /dev/null ; then + exit 1 + fi + ;; + + (stop) + if [ -f $pid ]; then + TARGET_PID=`cat $pid` + if kill -0 $TARGET_PID > /dev/null 2>&1; then + echo stopping $command + kill $TARGET_PID + sleep $STOP_TIMEOUT + if kill -0 $TARGET_PID > /dev/null 2>&1; then + echo "$command did not stop gracefully after $STOP_TIMEOUT seconds: killing with kill -9" + kill -9 $TARGET_PID + fi + else + echo no $command to stop + fi + else + echo no $command to stop + fi + ;; + + (*) + echo $usage + exit 1 + ;; + +esac + http://git-wip-us.apache.org/repos/asf/bigtop/blob/4e74d706/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-loop.sh ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-loop.sh b/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-loop.sh new file mode 100644 index 0000000..e18c18a --- /dev/null +++ b/bigtop-packages/src/common/wdd-namenode-nonstop/secondary-nonstop-loop.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +## This script isn't supposed to be called without secondary-nonstop-daemon service +while true; do + NNLIST=$(find ${HADOOP_CHECKPOINTS_CONFIGS} -mindepth 1 -type d | sort) + + for nsnode in ${NNLIST[@]}; do + FSIMAGEDIR=$(hdfs --config $nsnode getconf -confKey dfs.namenode.checkpoint.dir) + echo Removing previous FSImage and Editlogs from ${FSIMAGEDIR} + if [ "x$FSIMAGEDIR" != "x" ]; then + rm -rf ${FSIMAGEDIR}/* + else + echo "FSIMAGEDIR couldn't be determined" + exit 1 + fi + echo Checkpointing against ConsensusNode configured in $nsnode + hdfs --config $nsnode secondarynamenode -checkpoint force + PERIOD=$(hdfs --config $nsnode getconf -confKey dfs.namenode.checkpoint.period) + echo Sleeping for dfs.namenode.checkpoint.period set in $nsnode: ${PERIOD}s + sleep ${PERIOD}s + done +done http://git-wip-us.apache.org/repos/asf/bigtop/blob/4e74d706/bigtop-packages/src/rpm/wdd-namenode-nonstop/SPECS/wdd-namenode-nonstop.spec ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/rpm/wdd-namenode-nonstop/SPECS/wdd-namenode-nonstop.spec b/bigtop-packages/src/rpm/wdd-namenode-nonstop/SPECS/wdd-namenode-nonstop.spec index a75ce99..8d2cc27 100644 --- a/bigtop-packages/src/rpm/wdd-namenode-nonstop/SPECS/wdd-namenode-nonstop.spec +++ b/bigtop-packages/src/rpm/wdd-namenode-nonstop/SPECS/wdd-namenode-nonstop.spec @@ -11,6 +11,8 @@ Source1: do-component-build Source3: hadoop-hdfs-nonstop.default Source11: init.d.tmpl Source12: hadoop-hdfs-nonstop.svc +Source14: secondary-nonstop-daemon.sh +Source15: secondary-nonstop-loop.sh Source22: nonstop BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -28,9 +30,10 @@ AutoReq: no %define lib_hadoop %{lib_hadoop_dirname}/hadoop %define lib_hdfs %{lib_hadoop_dirname}/hadoop-hdfs %define hadoop_name nonstop -%define hadoop_services hadoop-hdfs-nonstop +%define hadoop_services hadoop-hdfs-nonstop hadoop-hdfs-nonstop-checkpoints %define extra_libs DConE-*.jar DConE_Platform-*.jar %define extra_deps_libs java-uuid-generator*.jar prevayler-*.jar xstream-*.jar bcprov*.jar xmlpull-*.jar +%define conf_checkpoints %{etc_hadoop}/checkpoints.nonstop %global initd_dir %{_sysconfdir}/rc.d/init.d @@ -38,6 +41,14 @@ AutoReq: no WANdisco Non-Stop namenode with full replication for hdfs via our patented Dcone PAXOS replication technology. +%package checkpoints +Summary: Non-Stop HDFS namenode checkpoint daemon +Group: System/Daemons +Requires: hadoop-hdfs-secondarynamenode, /sbin/chkconfig, /sbin/service + +%description checkpoints +A service daemon for check-pointing of all instances of WANdisco Non-Stop namenode + %prep %setup -n %{artifactname}-%{wdd_namenode_nonstop_base_version} @@ -55,6 +66,9 @@ rm -rf $RPM_BUILD_ROOT %__install -m 0644 $RPM_SOURCE_DIR/conf.nonstop/* $RPM_BUILD_ROOT/%{conf_nonstop}/ %__install -d -m 0755 $RPM_BUILD_ROOT/%{conf_dcone}/ %__install -m 0644 $RPM_SOURCE_DIR/wandisco/* $RPM_BUILD_ROOT/%{conf_dcone}/ +## secondary check-pointing +%__install -m 0755 %{SOURCE14} $RPM_BUILD_ROOT/%{lib_hadoop}/sbin +%__install -m 0755 %{SOURCE15} $RPM_BUILD_ROOT/%{lib_hadoop}/sbin ## Product specific lib %__install -m 0644 target/%{artifactname}-%{wdd_namenode_nonstop_base_version}.jar $RPM_BUILD_ROOT/%{lib_hdfs} @@ -73,6 +87,9 @@ done # Install top level /etc/default files %__install -d -m 0755 $RPM_BUILD_ROOT/etc/default %__cp $RPM_SOURCE_DIR/hadoop-hdfs-nonstop.default $RPM_BUILD_ROOT/etc/default/hadoop-hdfs-nonstop +## secondary check-pointing +%__install -d -m 0755 $RPM_BUILD_ROOT/%{conf_checkpoints} +%__cp $RPM_SOURCE_DIR/hadoop-hdfs-nonstop-checkpoints.default $RPM_BUILD_ROOT/etc/default/hadoop-hdfs-nonstop-checkpoints # Generate the init.d scripts for service in %{hadoop_services} @@ -96,7 +113,7 @@ rm -rf $RPM_BUILD_ROOT sed -e 's#namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc)#nonstop|wan)#' -e 's#hdfsScript="$HADOOP_PREFIX"/bin/hdfs#hdfsScript="$HADOOP_PREFIX"/bin/nonstop#' -e 's#hdfsScript="$HADOOP_HDFS_HOME"/bin/hdfs#hdfsScript="$HADOOP_HDFS_HOME"/bin/nonstop#' %{lib_hadoop}/sbin/hadoop-daemon.sh > %{lib_hadoop}/sbin/hadoop-nonstop-daemon.sh %__chmod 755 %{lib_hadoop}/sbin/hadoop-nonstop-daemon.sh -for service in %{hadoop_services} +for service in hadoop-hdfs-nonstop do if [ $1 -ge 1 ]; then chkconfig --add ${service} @@ -105,7 +122,7 @@ do done %preun -for service in %{hadoop_services} +for service in hadoop-hdfs-nonstop do if [ $1 -eq 0 ]; then service ${service} stop > /dev/null 2>&1 @@ -114,6 +131,26 @@ do fi done +%post checkpoints +for service in hadoop-hdfs-nonstop-checkpoints +do + if [ $1 -ge 1 ]; then + chkconfig --add ${service} + chkconfig hadoop-hdfs-secondarynamenode off + fi +done + +%preun checkpoints +## Removing the link setup in the %post phase and moving HDFS NN script back +for service in hadoop-hdfs-nonstop-checkpoints +do + if [ $1 -eq 0 ]; then + service ${service} stop > /dev/null 2>&1 + chkconfig --del ${service} + chkconfig hadoop-hdfs-secondarynamenode on + fi +done + %postun for service in %{hadoop_services} do @@ -125,7 +162,6 @@ done %files %defattr(-,root,root) %{lib_hdfs} -%{initd_dir} %{initd_dir}/hadoop-hdfs-nonstop /etc/default/hadoop-hdfs-nonstop %attr(0755,root,root) @@ -137,7 +173,17 @@ done %config(noreplace) %{etc_hadoop}/conf.nonstop/log4j.properties +%files checkpoints +%{lib_hadoop}/sbin/secondary-nonstop-daemon.sh +%{lib_hadoop}/sbin/secondary-nonstop-loop.sh +%{initd_dir}/hadoop-hdfs-nonstop-checkpoints +/etc/default/hadoop-hdfs-nonstop-checkpoints +%{conf_checkpoints} + %changelog +* Thu Oct 24 2013 Konstantin Boudnik <[email protected]> +- Adding checkpointing daemon to save checkpoints from all + non-stop namenodes, using secondarynamenode mechanism * Thu Apr 29 2013 Konstantin Boudnik <[email protected]> - Adding default dcone property files and logger - fixing the problem where some jar files weren't picked up
